Qt下Excel操作_第1頁
Qt下Excel操作_第2頁
Qt下Excel操作_第3頁
Qt下Excel操作_第4頁
Qt下Excel操作_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精品文檔Qt之操作Excel(2013-12-06 13:57:20)轉(zhuǎn)載標簽:分類:Qtqt qaxobject qt操作excel qtvba excelvbaVisual Basic for Applications(VBA是一種Visual Basic的一種宏語言,主要能用來擴展Windows的應用程式功能,特別是Microsoft Office軟件。也可說是一種應 用程式視覺化的Basic Script。1994年發(fā)行的Excel 5.0版本中,即具備了VBA的宏功能。在VBA的參考手冊中就可以看到具體函數(shù)、屬性的用法,Qt操作Excel主要通過QAxObject + Excel V

2、BA來實現(xiàn)!關(guān)于Qt對Excel的操作,網(wǎng)上的資料挺多的,但大多數(shù)都是比較基礎(chǔ)的,關(guān)于插 入工作表(至最后一行)、刪除工作表、合并/拆分單元格、設(shè)置單元格背景色、設(shè)置單元格邊框色、設(shè)置單元格字體(類型、大小、加粗、斜體、下劃線、顏色等)、以及設(shè)置單元 格對齊方式等用法都沒有怎么提到,今天就總結(jié)一下有關(guān)Qt對Excel的操作。Qt操作Excel,無論后綴是xls還是xlsx都可以。如下,是我下載的一個Excel VBA參考手冊,內(nèi)容不算太全!1歡迎下載C omntajndBaLr s (0 omunaoidBair J-COWAlilns (COMAddin)精品文檔f因Microsoft Ex

3、cel Visual Basic就考LEJ霜 Q 冒醉 顯示 上一*打印迭頂Jfflcrosoft Eicel對象請莽聞Appli.c all onLYoYkbovkK Of orkb o ok JWorksheet 5(Worksheet)AatoC orrecl-Addins (Kddln)Charts(Churt)B cnm entFr*t*rtTTstFifop*r tyjAcs i s tuitVTrject CUEtomVi ews (Cnt ovniew)CellFormat-ffTMUrojectHDabiLEP i voCaiclke s (FxurotCachejDi aJ

4、L a: gs(Dia_l oijlCm 0迎妙壬(vmmandB ar JEoirdeirs LB order)一Ev-rrChecki .( tionsFnntTut eriorFanes(pMLe)Himes(NameJdiILAOWFanes(Ffine)Excel讀取為了便于測試,假設(shè)已存在一個excel文件,操作內(nèi)容已經(jīng)被紅色標記出來。如下所示:主要讀取內(nèi)容:?標題?工作表數(shù)目?工作表名稱?起始行?起始列?行數(shù)?列數(shù)?單元格內(nèi)容2歡迎下載代碼如下:QAxObject excel(Excel.Applicatio n); excel.setProperty(Visible, true

5、);QAxObject *work_books = excel.querySubObject(WorkBooks); work_books-dynamicCall(Open (const QString&.),QString(E:/test.xlsx);QVariant title_value = perty(Caption);/獲取標題qDebug()QString(excel title : )querySubObject(Sheets);/Sheets也可換用WorkSheetsint sheet_count = work_sheets-property(Cou

6、nt).toInt();/獲取工作表數(shù)目qDebug()QStri ng(sheet count : )sheet_co unt;for(i nt i=1; iquerySubObject(Sheets(i nt),i);/Sheets(int)也可換用Worksheets(int)QString work_sheet_name = work_sheet-property(Name).toString();/獲取工作表名稱QString message = QString(sheet )+QString:number(i, 10)+ QString( name); qDebug()messag

7、e 0)QAxObject *work_sheet = work_book-querySubObject(Sheets( in t), 1);QAxObject *used_ra nge = work_sheet-querySubObject(UsedRa nge);QAxObject *rows = used_ra nge-querySubObject(Rows);QAxObject *colu mns = used_ra nge-querySubObject(Colu mn s);int row_start = used_ra nge-property(Row).to In t();int

8、 colu mn _start = used_ra nge-property(Colu mn ”).to In t();int row_co unt = rows-property(Co un t).to In t();int colu mn_count = colu mn s-property(Co un t).to In t();for(i nt i=row_start; i for(i nt j=column_start; jQAxObject *cell = work_sheet-querySubObject(Cells(i nt,i nt), i, j);QVariant cell_

9、value = cell-property(Value);/獲取單元格內(nèi)容QStri ng message = QStri ng(row- )+QStri ng: nu mber(i, 10)+QStri ng(-colum n-)+QStri ng:n umber(j, 10)+QStri ng(:);qDebug()messagecell_value;3歡迎下載精品文檔精品文檔/獲取起始行/獲取起始列/獲取行數(shù)/獲取列數(shù)效果如下:raw C:wi nd wssystem 3exceltitle : QUariantCQStrin.- Microsoft Excel - test-xlsx只

10、,讀1,sliee七count:M3&Ji&et1 nanteShe&tl*slieet2 nAnerSheetS*sheet3 nane1GheetMrow-Golunn-Z: QVariantQStrinsVow-2-colunn-3: QUaiantQGtring, QLrow-3-colunin2 :,F(xiàn)Variantrow-3-columnJ:QVaiiarat;dy namicCall(Ope n(con st QStri ng&), E:test.xlsx); excel.setProperty(Caption, Qt Excel);QAxObje

11、ct *work_book = excel.querySubObject(ActiveWorkBook);QAxObject *work_sheets = work_book-querySubObject(Sheets);/Sheets也可換用WorkSheets/刪除工作表(刪除第一個)QAxObject *first_sheet = work_sheets-querySubObject(ltem(i nt), 1);first_sheet-dy namicCall(delete);4歡迎下載精品文檔/插入工作表(插入至最后一行)int sheet_count = work_sheets-p

12、roperty(Count).toInt();/獲取工作表數(shù)目QAxObject *last_sheet = work_sheets-querySubObject(ltem(i nt), sheet_co un t);QAxObject *work_sheet = work_sheets-querySubObject(Add(QVaria nt), last_sheet-asVaria nt();last_sheet-dy namicCall(Move(QVaria nt), work_sheet-asVaria nt();work_sheet-setProperty(Name, Qt She

13、et);/設(shè)置工作表名稱/操作單元格(第2行第2列)QAxObject *cell = work_sheet-querySubObject(Cells(int,int), 2, 2);cell-setProperty(Value, Java C+ C# PHP Perl Python Delphi Ruby);/設(shè)置單元格值cell-setProperty(RowHeight, 50);/設(shè)置單元格行高cell-setProperty(ColumnWidth, 30);/設(shè)置單元格列寬cell-setProperty(HorizontalAlignment, -4108); /左對齊(xlLe

14、ft) :-4131居中(xlCenter):-4108右對齊(xlRight):-4152cell-setProperty(VerticalAlignment, -4108);/上對齊(xlTop)-4160居中(xlCenter) :-4108下對齊(xlBottom):-4107 cell-setProperty(WrapText, true);/內(nèi)容過多,自動換行/cell-dynamicCall(ClearContents();/清空單元格內(nèi)容QAxObject* i nterior = cell-querySubObject(I nterior);interior-setPrope

15、rty(Color,QColor(0, 255, 0);QAxObject* border = cell-querySubObject(Borders);border-setProperty(Color, QColor(0, 0, 255);fon t-setProperty(Bold, true); font-setProperty(Size, 20);fon t-setProperty(Italic, true);font-setProperty(Underline, 2);fon t-setProperty(Color, QColor(255, 0, 0);/設(shè)置單元格內(nèi)容,并合并單元格

16、(第5行第3列-第8行第5列)QAxObject *cell_5_6 =work_sheet-querySubObject(Cells(i nt, in t), 5, 3); cell_5_6-setProperty(Value, Java);/設(shè)置單元格值QAxObject *cell_8_5 = work_sheet-querySubObject(Cells(int,int), 8, 5); cell_8_5-setProperty(Value, C+);QString merge cell;/設(shè)置單元格背景色(綠色)/設(shè)置單元格邊框色(藍色)QAxObject *font = cell-

17、querySubObject(Fo nt); font-setProperty(Name, QStri ngLiteral(/獲取單元格字體華文彩云);/設(shè)置單元格字體/設(shè)置單元格字體加粗/設(shè)置單元格字體大小/設(shè)置單元格字體斜體/設(shè)置單元格下劃線/設(shè)置單元格字體顏色(紅色)5歡迎下載精品文檔merge_cell.appe nd(QChar(3 - 1 + A);merge_cell.appe nd(QStri ng: nu mber(5);merge_cell.appe nd(:);merge_cell.append(QChar(5 - 1 + A);merge_cell.appe nd(QS

18、tri ng: nu mber(8);/初始列初始行終止列終止行QAxObject*merge_range=work_sheet-querySubObject(Range(constQString&),merge_cell);merge_ra nge-setProperty(Horizo ntalAlig nmen t, -4108);merge_ra nge-setProperty(VerticalAlig nmen t, -4108);merge_ra nge-setProperty(WrapText, true);merge_ra nge-setProperty(MergeCel

19、ls, true);merge_range-setProperty(MergeCells, false);/合并單元格/拆分單元格(為了對比test與下面的test2文work_book-dynamicCall(Save();/保存文件件,這里不做保存操作)work_book-dy namicCall(SaveAs(co nst QStri ng&),E:test2.xlsx);/另存為另一個文件work_book-dynamicCall(Close(Boolean), false);excel.dynamicCall(Quit(void);/退出/關(guān)閉文件效果如下:操作前:testx

20、lsx - Qt Excul文件緬入 麗布局 公式 琳 審闖 祝冒 111 %A1罔K IU - I A A對齊方式 *1雯TT* 27*VEcDFGK12l3456wM 4卜H 1 Sheetl/Sheetsj Sheet3中二Illi r丄操作后:6歡迎下載到這里很多人也許都在納悶, 單元格的宏怎么獲取的?比如對齊方式 (居中對齊), 為什么值是-4108,而不是其他值呢?當然那不是我隨便寫的,自己可以錄制宏,然后跟蹤。看下圖:Excel Object Model Refere nee7歡迎下載精品文檔如上所講,已經(jīng)基本可以滿足常用的操作,如有更多專業(yè)需求,請參考精品文檔最近寫程序中需要將

21、數(shù)據(jù)輸出保存到Excel文件中。翻看C+ GUIProgramming with Qt 4(Second Edition)發(fā)現(xiàn)可以在Qt中運用ActiveX控件,這真是太好了??戳撕芫媒坛桃矝]有學會,畢竟是新手,平時也沒學過ActiveX編程。一些在VB中可以方便使用的函數(shù)在Qt中都沒法兒運行。網(wǎng)上的 方法也很多解決不了問題,還會報錯。也許是版本問題吧,Qt都更新了 好幾次了。所以只好自己多試幾次。經(jīng)過摸索我的方法如下:首先在.pro文件中添加CONFIG += qaxcontainer接著程序?qū)崿F(xiàn)cpp view pla in copy1.QString filepath=QFileDial

22、og:getSaveFileName( this ,tr( Save orbit ), . ,tr( Microsoft Office 2007 (*.xlsx); /獲取保存路徑2.if (!filepath.isEmpty()3.QAxObject *excel = new QAxObject( this );4.excel-setControl( Excel.Application ); /連接Excel控件5.excel-dynamicCall( SetVisible (bool Visible) , false ); /不顯示窗體6.excel-setProperty( Displa

23、yAlerts , false ); /不顯示任何警告信息。如果為true那么在關(guān)閉是會岀現(xiàn)類似文件已修改,是否保存”的提示7.7.QAxObject *workbooks = excel-querySubObject( WorkBooks); /獲取工作簿集 合8.workbooks-dynamicCall( Add); /新建一個工作簿10.作簿QAxObject *workbook = excel-querySubObject( ActiveWorkBook);/獲取當前工11.QAxObject *worksheets = workbook-querySubObject( Sheets

24、);/獲取工作表集合12.QAxObject *worksheet = worksheets-querySubObject( Item(int),1); /獲取工作表集合的工作表1,即sheet113.QAxObject *cellX,*cellY;14.for (int i=0;iformula(i,1).tolnt();21. 22.23.workbook-dynamicCall( SaveAs(const QString&) ,QDir:toNativeSeparators(filepath); /保存至filepath,注意一定要用QDir:toNativeSeparators

25、將路徑中的/轉(zhuǎn)換為不然一定保存不了。workbook-dynamicCall( Close() ); /關(guān)閉工作簿excel-dynamicCall( Quit() ); /關(guān)閉excel delete excel;excel=NULL;另外附上在網(wǎng)上搜到的一些常用操作:QAxWidget excel(”Excel.Applicatio n);1)顯示當前窗口:excel.setProperty(”Visible”,true);2)更改Excel標題欄:excel.setProperty(”Captio n”,”1 nvoke Microsoft Excel);3)添加新工作簿:QAxObje

26、ct * workbooks = excel.querySubObject(”WorkBooks”);workbooks-dy namicCall(”Add”);4)打開已存在的工作簿:workbooks-d yn amicCall(Ope n (const QStri ng&)”,QStri ng(c:/test.xls);9歡迎下載精品文檔16.17.取單元格QString Y=B +QString:number(i+1); cellX =worksheet-querySubObject(Range(QVariant, QVariant) ,X); /獲18.cellY = worksheet-querySubObject(1

溫馨提示

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

評論

0/150

提交評論