版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、前段时间因一个项目的需要,需要用Qt生成Word报告,网上查阅并借鉴了相关资料终于解决了基本的问题。本文档中主要是基本数据的填充、数据表格和图片几种类型,所以是用word模板(.dot)和书签进行操作。(网上看有种方法是利用宏来进行操作,表示不是很懂,哈哈)。一、主要方法1、根据报告要求,设计word模板,定义好需要插入数据的标签,调好其他固定内容的格式。(以保证数据插入后文档内容排列有序)2、编写word操作接口类,主要包括:打开、关闭、保存、插入文本、插入图片、插入表格、相关格式调整函数3、编写生成报告界面类,调用接口函数生成word文档。二、接口函数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. /插入一个几行几列表格 并设置表头 25. QAxObject *insertTable(QString sLabel,int row,int column,QStringList headList); &
7、#160;26. /设置列宽 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应用程序 33. QAxObject *m_pWorkDocuments; /指向文档集,Word有很多文档 34.
9、 QAxObject *m_pWorkDocument; /指向m_sFile对应的文档,就是要操作的文档 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应用程序 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. /获取当前激活的文档 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的标签 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");/设置标题 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. /设置标题 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根据内容调整 2 根据窗口调整 183. table->dynamicC
56、all("AutoFitBehavior(WdAutoFitBehavior)", 2); 184. 185. /设置表头 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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024冷库租赁合同书范本(适用小型企业)
- 2024年度互联网广告技术服务合同
- 2024年买卖合同标的为新能源汽车
- 2024年度影视制作与发行承包合同
- 2024年度房地产商业综合体建设项目施工合同
- 公租房个人收入证明(12篇)
- 2024年度安置房社区文化活动合同
- 手机教学课件教学
- 2024年度品牌合作框架协议
- 2024年度特许经营合同标的及许可使用范围
- 海洋工程柔性立管发展概况
- 汉语教师志愿者培训大纲
- 护理导论 评判性思维
- SPC培训资料_2
- 学习适应性测验(AAT)
- ADS创建自己的元件库
- MATLAB仿真三相桥式整流电路(详细完美)
- 2019年重庆普通高中会考通用技术真题及答案
- 天秤座小奏鸣曲,Libra Sonatine;迪安斯,Roland Dyens(古典吉他谱)
- 钢筋混凝土工程施工及验收规范最新(完整版)
- 光缆施工规范及要求
评论
0/150
提交评论