Qt數(shù)據(jù)庫應(yīng)用之實現(xiàn)csv文件轉(zhuǎn)xls_第1頁
Qt數(shù)據(jù)庫應(yīng)用之實現(xiàn)csv文件轉(zhuǎn)xls_第2頁
Qt數(shù)據(jù)庫應(yīng)用之實現(xiàn)csv文件轉(zhuǎn)xls_第3頁
Qt數(shù)據(jù)庫應(yīng)用之實現(xiàn)csv文件轉(zhuǎn)xls_第4頁
Qt數(shù)據(jù)庫應(yīng)用之實現(xiàn)csv文件轉(zhuǎn)xls_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

第Qt數(shù)據(jù)庫應(yīng)用之實現(xiàn)csv文件轉(zhuǎn)xls目錄一、前言二、功能特點三、體驗地址四、效果圖五、相關(guān)代碼

一、前言

最近又多了個需求就是將csv格式的文件轉(zhuǎn)xls,需求一個接著一個,還好都是真實的需求,而且都是有用的需求,并不是不靠譜的需求,不靠譜的需求就比如程序自動識別手機殼顏色自動換背景顏色或者邊框顏色色系。csv轉(zhuǎn)xls,因為很多軟件或者網(wǎng)頁為了跨平臺做了極致簡單的導(dǎo)出數(shù)據(jù)形式,那就是csv格式的文本數(shù)據(jù),有些用戶覺得這種格式用電子表格軟件打開后,格式顯得很擁擠不好看,所以需要自己的程序能夠提供靜態(tài)函數(shù)直接進行轉(zhuǎn)換,里面有多少個字段,轉(zhuǎn)成xls數(shù)據(jù)后也多少個字段,有多少行內(nèi)容也就多少行內(nèi)容,這樣打開后就是標(biāo)準(zhǔn)的xls文件,帶有一定格式。

之前封裝的通用導(dǎo)出函數(shù)就支持直接傳入數(shù)據(jù)集合和字段集合導(dǎo)出,所以這個需求的難點及主要工作量就是讀取csv文件,取出字段集合和內(nèi)容集合,最后賦值給數(shù)據(jù)導(dǎo)出結(jié)構(gòu)體即可。如果是標(biāo)準(zhǔn)的csv文件,那還是很容易讀取的,搞個QFile搭配QTextStream以文本流的形式一行行readLine讀取,理想很好顯示很打臉,自己按照標(biāo)準(zhǔn)csv要求導(dǎo)出的文件可以正常轉(zhuǎn)換,而用戶第三方軟件導(dǎo)出的csv格式的文件死活無法ok,用記事本打開一看,居然是bom格式,而且里面穿插了非常多的無效空格以及不可見字符\x200B,bom字節(jié)也好,不可見字符也好,用普通的QString是打印不出來的,必須轉(zhuǎn)成QByteArray然后再轉(zhuǎn)成16進制字符串就能看到,bom是文本最開始前面三個固定字節(jié)0xEF、0xBB、0xBF,只要讀取到文件前面存在這三個字節(jié)就說明是帶bom的文件。

格式搞明白了,代碼自然就出來了,通過readLine拿到數(shù)據(jù)后,傳入正則表達式調(diào)用remove方法移除不可見字符,這樣剩下的就是可見字符,然后判斷當(dāng)前是否讀取的是第一行,是第一行則數(shù)據(jù)分割后傳入列名字段名稱集合中,其余都是一行行數(shù)據(jù),按照要求的分隔符傳入隊列即可,最后一次性調(diào)用靜態(tài)數(shù)據(jù)導(dǎo)出函數(shù)打完收工,完美!總結(jié):遇到困難要迎難而上,只要功夫深,一定能找到問題所在,尤其是代碼寫的多了以后,遇到問題會有多種甚至幾十種解決辦法。

二、功能特點

組件同時集成了導(dǎo)出數(shù)據(jù)到csv、xls、pdf和打印數(shù)據(jù)。所有操作全部提供靜態(tài)方法無需new,數(shù)據(jù)和屬性等各種參數(shù)設(shè)置采用結(jié)構(gòu)體數(shù)據(jù),極為方便。同時支持QTableView、QTableWidget、QStandardItemModel、QSqlTableModel等數(shù)據(jù)源。提供靜態(tài)方法直接傳入QTableView、QTableWidget控件,自動識別列名、列寬和數(shù)據(jù)內(nèi)容。每組功能都提供單獨的完整的示例,注釋詳細,非常適合各階段Qter程序員。原創(chuàng)導(dǎo)出數(shù)據(jù)機制,不依賴任何office組件或者操作系統(tǒng)等第三方庫,支持嵌入式linux。速度超快,9個字段10萬行數(shù)據(jù)只需要2秒鐘完成。只需要四個步驟即可開始急速導(dǎo)出海量數(shù)據(jù)比如100W條記錄到Excel。同時提供直接寫入數(shù)據(jù)接口和多線程寫入數(shù)據(jù)接口,不卡主界面。可設(shè)置標(biāo)題、副標(biāo)題、表名??稍O(shè)置導(dǎo)出數(shù)據(jù)的字段名、列名、列寬??稍O(shè)置末尾列自動拉伸填充,默認(rèn)拉伸更美觀??稍O(shè)置是否啟用校驗過濾數(shù)據(jù),啟用后符合規(guī)則的數(shù)據(jù)特殊顏色顯示??芍付ㄐr灥牧?、校驗規(guī)則、校驗值、校驗值數(shù)據(jù)類型。校驗規(guī)則支持精確等于==、大于、大于等于=、小于、小于等于=、不等于!=、包含contains。校驗值數(shù)據(jù)類型支持整型int、浮點型float、雙精度型double,默認(rèn)文本字符串類型。可設(shè)置隨機背景顏色及需要隨機背景色的列集合。支持分組輸出數(shù)據(jù),比如按照設(shè)備分組輸出數(shù)據(jù),方便查看??稍O(shè)置csv分隔符、行內(nèi)容分隔符、子內(nèi)容分隔符??稍O(shè)置邊框?qū)挾取⒆詣犹顢?shù)據(jù)類型,默認(rèn)自動數(shù)據(jù)類型開啟??稍O(shè)置是否開啟數(shù)據(jù)單元格樣式,默認(rèn)不開啟,不開啟可以節(jié)約大概30%的文件體積??稍O(shè)置橫向排版、紙張邊距等,比如導(dǎo)出到pdf以及打印數(shù)據(jù)。提供圖文混排導(dǎo)出數(shù)據(jù)到pdf以及打印示例,自動分頁,支持多圖。提供一個打印樣板中同時包括橫向縱向排版示例。提供靜態(tài)函數(shù)將控件截圖導(dǎo)出到pdf文件。提供靜態(tài)函數(shù)將圖片轉(zhuǎn)成pdf文件。提供靜態(tài)函數(shù)將csv文件轉(zhuǎn)成xls文件,支持列寬表名等參數(shù)設(shè)置。針對每列可分別設(shè)置字段對齊樣式、內(nèi)容對齊樣式,包括左對齊、居中對齊、右對齊。靈活性超高,可自由更改源碼設(shè)置對齊方式、文字顏色、背景顏色等。支持任意excel表格軟件,包括但不限于excel2003-2025、wps、openoffice等。純Qt編寫,支持任意Qt版本+任意編譯器+任意系統(tǒng)。

三、體驗地址

體驗地址:/s/1eeL5MTz0rifwtVLegRpkoQ提取碼:erxm文件名:bin_dataout.zip

國內(nèi)站點:/feiyangqingyun

國際站點:/feiyangqingyun

四、效果圖

五、相關(guān)代碼

QStringDataOther::csvToXls(DataContentdataContent,constQStringcsvFile,constQStringxlsFile,boolquatation,constQStringspliter)

//為空則同名文件

QStringfileName=xlsFile;

if(fileName.isEmpty()){

fileName=csvFile;

fileName.replace("."+QFileInfo(csvFile).suffix(),".xls");

//內(nèi)容集合

QStringListcontent;

//字段名稱

QListQStringcolumnNames;

//字段寬度

QListintcolumnWidths;

//讀取csv文件的內(nèi)容

QFilefile(csvFile);

if(file.open(QIODevice::ReadOnly|QFile::Text)){

//采用文件流的形式讀取速度最快

QTextStreamstream(file);

DataCsv::initTextStream(csvFile,stream);

stream.seek(0);

//循環(huán)讀取文件

introw=0;

while(!stream.atEnd()){

QStringline=stream.readLine();

if(line.isEmpty()){

continue;

//刪除特殊字符,這個字符會導(dǎo)致讀取不到內(nèi)容TNND

QStringpattern="[\\x200B]";

#if(QT_VERSION=QT_VERSION_CHECK(6,0,0))

line.remove(QRegularExpression(pattern));

#else

line.remove(QRegExp(pattern));

#endif

row++;

QStringListlist=line.split(spliter);

//第一行是字段

if(row==1){

intcount=list.count();

for(inti=0;icount;++i){

//去掉空字段名

QStringcolumnName=list.at(i);

if(columnName.isEmpty()){

continue;

columnNamescolumnName;

//設(shè)置過則取設(shè)置好的

if(dataContent.columnWidths.count()i){

columnWidthsdataContent.columnWidths.at(i);

}else{

columnWidths70;

continue;

QStringseparator=dataContent.separator;

//每行數(shù)據(jù)作為一個整體字符串帶分割符;存入

contentlist.join(separator);

if(content.count()0){

//填充內(nèi)容

dataContent.content=content;

//設(shè)置列名列寬

dataC

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論