版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、前段時間因一個項目的需要,需要用Qt生成Word報告,網(wǎng)上查閱并借鑒了相關(guān)資料終于解決了基本的問題。本文檔中主要是基本數(shù)據(jù)的填充、數(shù)據(jù)表格和圖片幾種類型,所以是用word模板(.dot)和書簽進(jìn)行操作。(網(wǎng)上看有種方法是利用宏來進(jìn)行操作,表示不是很懂,哈哈)。一、主要方法1、根據(jù)報告要求,設(shè)計word模板,定義好需要插入數(shù)據(jù)的標(biāo)簽,調(diào)好其他固定內(nèi)容的格式。(以保證數(shù)據(jù)插入后文檔內(nèi)容排列有序)2、編寫word操作接口類,主要包括:打開、關(guān)閉、保存、插入文本、插入圖片、插入表格、相關(guān)格式調(diào)整函數(shù)3、編寫生成報告界面類,調(diào)用接口函數(shù)生成word文檔。二、接口函數(shù)WordEngine.h文件cpp
2、160;view plain copy1. #ifndef WORDENGINE_H 2. #define WORDENGINE_H 3. #include <QObject> 4. #include <QAxObject> 5. #include <QtCore> 6. class WordEngine : public QObject &
3、#160;7. 8. Q_OBJECT 9. public: 10. WordEngine(); 11. WordEngine(); 12. 13. / 打開Word文件,如果sFile路徑為空或錯誤,則打開新的Word文檔 14.
4、60; bool Open(QString sFile, bool bVisible = true); 15. 16. void save(QString sSavePath); 17. 18. void close(bool bSave = true);&
5、#160; 19. 20. bool replaceText(QString sLabel,QString sText); 21. bool replacePic(QString sLabel,QString sFile); 22. /插入一個幾行幾列表格 23.
6、60; QAxObject *insertTable(QString sLabel,int row,int column); 24. /插入一個幾行幾列表格 并設(shè)置表頭 25. QAxObject *insertTable(QString sLabel,int row,int column,QStringList headList); &
7、#160;26. /設(shè)置列寬 27. void setColumnWidth(QAxObject *table,int column, int width); 28. void SetTableCellString(QAxObject *table, int row,int column,QString
8、0;text); 29. 30. private: 31. 32. QAxObject *m_pWord; /指向整個Word應(yīng)用程序 33. QAxObject *m_pWorkDocuments; /指向文檔集,Word有很多文檔 34.
9、 QAxObject *m_pWorkDocument; /指向m_sFile對應(yīng)的文檔,就是要操作的文檔 35. 36. QString m_sFile; 37. bool m_bIsOpen; 38. bool m_bNewFile;
10、0;39. ; 40. 41. #endif / WORDENGINE_H WordEngine.cpp文件cpp view plain copy1. #include "WordEngine.h" 2. #include "qt_windows.h" 3. WordEngine:WordEngine() 4. 5.
11、; m_pWord = NULL; 6. m_pWorkDocuments = NULL; 7. m_pWorkDocument = NULL; 8. 9. m_bIsOpen = false; 10. &
12、#160;m_bNewFile = false; 11. 12. HRESULT result = OleInitialize(0); 13. 14. if (result != S_OK && result != S_FALSE) 15.
13、 16. qDebug()<<QString("Could not initialize OLE (error %x)").arg(unsigned int)result); 17. 18. 19. 20. Wo
14、rdEngine:WordEngine() 21. 22. /if(m_bIsOpen) 23. / close(); 24. 25. OleUninitialize(); 26. 27. 28. bool Word
15、Engine:Open(QString sFile, bool bVisible) 29. 30. /新建一個word應(yīng)用程序 31. m_pWord = new QAxObject(); 32. bool bFlag = m_pWord-
16、>setControl( "word.Application" ); 33. if(!bFlag) 34. 35. return false; 36. 3
17、7. m_pWord->setProperty("Visible", bVisible); 38. /獲取所有的工作文檔 39. QAxObject *document = m_pWord->querySubObject("Documents"); 40.
18、160; if(!document) 41. 42. return false; 43. 44. /以文件template.dot為模版新建一個文檔 45
19、. document->dynamicCall("Add(QString)", sFile); 46. /獲取當(dāng)前激活的文檔 47. m_pWorkDocument = m_pWord->querySubObject("ActiveDocument"); 48.
20、0; if(m_pWorkDocument) 49. m_bIsOpen = true; 50. else 51. m_bIsOpen = false;
21、0;52. 53. return m_bIsOpen; 54. 55. 56. void WordEngine:save(QString sSavePath) 57. 58. if(m_bIsOpen && m_pWorkDocument) 59. &
22、#160; 60. if(m_bNewFile) 61. m_pWorkDocument->dynamicCall("Save()"); 62. &
23、#160; 63. else 64. /m_pWorkDocument->dynamicCall("SaveAs (const QString&,int,const QString&,const QString&,bool,bool)",
24、 65. / m_sFile,56,QString(""),QString(&q
25、uot;"),false,false); 66. m_pWorkDocument->dynamicCall("SaveAs (const QString&)", sSavePath); 67. 68.
26、160; 69. qDebug()<<"save Done." 70. 71. 72. void WordEngine:close(bool bSave) 73. 74. if(bSave) 75.
27、; /save(); 76. 77. if(m_pWord) 78. m_pWord->setProperty("DisplayAlerts", true); 79. 80.
28、 if(m_pWorkDocument) 81. m_pWorkDocument->dynamicCall("Close(bool)", true); 82. 83. if(m_pWord) 84.
29、 m_pWord->dynamicCall("Quit()"); 85. 86. if(m_pWorkDocuments) 87. 88. delete m_pWorkDoc
30、uments; 89. 90. if(m_pWord) 91. 92. delete m_pWord; 93. 94.
31、0;m_pWorkDocument = NULL; 95. m_pWorkDocuments = NULL; 96. m_pWord = NULL; 97. 98. m_bIsOpen = false; 99.
32、160; m_bNewFile = false; 100. 101. 102. 103. bool WordEngine:replaceText(QString sLabel,QString sText) 104. 105. if(!m_pWorkDocument) 106.
33、160; return false; 107. 108. /獲取文檔中名字為sLabel的標(biāo)簽 109. QAxObject *pBookmark = m_pWorkDocument->querySubObject("Bookmarks(QString)",sLabel);&
34、#160; 110. if(pBookmark) 111. 112. pBookmark->dynamicCall("Select(void)"); 113. pBookmark->querySubOb
35、ject("Range")->setProperty("Text",sText); 114. delete pBookmark; 115. 116. return true; 117. 118. 119.
36、 bool WordEngine:replacePic(QString sLabel,QString sFile) 120. 121. if(!m_pWorkDocument) 122. return false; 123. 124. QAxObject
37、 *bookmark_pic = m_pWorkDocument->querySubObject("Bookmarks(QString)",sLabel); 125. if(bookmark_pic) 126. 127. bookmark_pic->dynamicCall(&q
38、uot;Select(void)"); 128. QAxObject *Inlineshapes = m_pWorkDocument->querySubObject("InlineShapes"); 129. Inlineshapes->dynamicCall("AddPictur
39、e(const QString&)",sFile); 130. delete Inlineshapes; 131. 132. return true; 133. 134. 135. QAxObject *Word
40、Engine:insertTable(QString sLabel, int row, int column) 136. 137. QAxObject *bookmark = m_pWorkDocument->querySubObject("Bookmarks(QVariant)", sLabel); 138.
41、60; if(bookmark) 139. 140. bookmark->dynamicCall("Select(void)"); 141. QAxObject *selection = m_pWord->querySubObjec
42、t("Selection"); 142. 143. selection->dynamicCall("InsertAfter(QString&)", "n"); 144. /selection->dynamicCall("MoveLeft(int)",
43、160;1); 145. selection->querySubObject("ParagraphFormat")->dynamicCall("Alignment", "wdAlignParagraphCenter"); 146. /selection->dynamicCall("Type
44、Text(QString&)", "Table Test");/設(shè)置標(biāo)題 147. 148. QAxObject *range = selection->querySubObject("Range"); 149. QAxObject *ta
45、bles = m_pWorkDocument->querySubObject("Tables"); 150. QAxObject *table = tables->querySubObject("Add(QVariant,int,int)",range->asVariant(),row,column); 151. 152. &
46、#160; for(int i=1;i<=6;i+) 153. 154. QString str = QString("Borders(-%1)").arg(i); 155.
47、160; QAxObject *borders = table->querySubObject(str.toAscii().constData(); 156. borders->dynamicCall("SetLineStyle(int)",1); 157
48、. 158. return table; 159. 160. 161. 162. QAxObject *WordEngine:insertTable(QString sLabel, int row,
49、60;int column, QStringList headList) 163. 164. QAxObject *bookmark = m_pWorkDocument->querySubObject("Bookmarks(QVariant)", sLabel); 165. if(headList.size() !=
50、column) 166. return NULL; 167. 168. if(bookmark) 169. 170. bookmark->dynamicCal
51、l("Select(void)"); 171. QAxObject *selection = m_pWord->querySubObject("Selection"); 172. 173. selection->dynamicCall("InsertAfter(QString&)&quo
52、t;, "rn"); 174. /selection->dynamicCall("MoveLeft(int)", 1); 175. selection->querySubObject("ParagraphFormat")->dynamicCall("Alignment", "
53、;wdAlignParagraphCenter"); 176. /設(shè)置標(biāo)題 177. /selection->dynamicCall("TypeText(QString&)", "Table Test"); 178. 179.
54、60; QAxObject *range = selection->querySubObject("Range"); 180. QAxObject *tables = m_pWorkDocument->querySubObject("Tables"); 181. QAxObject
55、0;*table = tables->querySubObject("Add(QVariant,int,int)",range->asVariant(),row,column); 182. /表格自動拉伸列 0固定 1根據(jù)內(nèi)容調(diào)整 2 根據(jù)窗口調(diào)整 183. table->dynamicC
56、all("AutoFitBehavior(WdAutoFitBehavior)", 2); 184. 185. /設(shè)置表頭 186. for(int i=0;i<headList.size();i+) 187.
57、 table->querySubObject("Cell(int,int)",1,i+1)->querySubObject("Range")->dynamicCall("SetText(QString)", headList.at(i); 188. /加粗 189.
58、; table->querySubObject("Cell(int,int)",1,i+1)->querySubObject("Range")->dynamicCall("SetBold(int)", true); 190. 191. 192. for(int i=1;i<=6;i+) 193. 194.
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度海洋資源開發(fā)與保護(hù)合作協(xié)議5篇
- 設(shè)計院在醫(yī)療領(lǐng)域的科技創(chuàng)新實踐
- 2025版無產(chǎn)權(quán)儲藏室買賣及售后服務(wù)保障協(xié)議3篇
- 2025年度個人設(shè)備抵押貸款業(yè)務(wù)合同
- 未來教育趨勢下的學(xué)生心理素質(zhì)培養(yǎng)方向
- 2025年度個人網(wǎng)絡(luò)借貸平臺合作協(xié)議書4篇
- 二零二五年度車牌租賃代理服務(wù)合作協(xié)議4篇
- 二零二五年度車位使用權(quán)及物業(yè)管理服務(wù)轉(zhuǎn)讓協(xié)議3篇
- 二零二五年度蟲草市場推廣與銷售支持合同2篇
- 2025年度文化旅游資源承包轉(zhuǎn)讓合同范本3篇
- 七年級歷史下冊第2課唐朝建立與貞觀之治
- 李四光《看看我們的地球》原文閱讀
- 抖音火花合同電子版獲取教程
- 高考語文文學(xué)類閱讀分類訓(xùn)練:戲劇類(含答案)
- 協(xié)會監(jiān)事會工作報告大全(12篇)
- 灰壩施工組織設(shè)計
- WS-T 813-2023 手術(shù)部位標(biāo)識標(biāo)準(zhǔn)
- 同意更改小孩名字協(xié)議書
- 隱患排查治理資金使用專項制度
- 家具定做加工合同
- 中國心胸外科的歷史和現(xiàn)狀
評論
0/150
提交評論