VC6使用word2003生成报表的示例
摘要:当用户需要对报表需要重新编辑的时候,用Excel或者Word生成报表就会比XML或者HTML的方式更加合理。但是由于Word的组件在使用时候要导入很多类,如果直接加在工程中会使其看上去很乱,所以封装到DLL中是个不错的主意。本文在前人经验指导下对一些常用的操作做了简单的封装,功能由从DLL中导出类CWordOperate提供。 <br><br><br><br>关键字:Word2003,MFC扩展DLL,报表,CWordOperate <br><br><br><br>一、 鉴于www.vckbase.com中已经有文章对vc使用word生成报表方式做详细的论述,这里不准备对此赘述。仅仅介绍封装类CWordOperate中的函数和DLL的使用。<br><br><br>#include "msword.h"<br><br>class AFX_EXT_CLASS CWordOperate <br>{<br>public:<br> CWordOperate();<br> virtual ~CWordOperate();<br> <br> BOOL CreateWordApp(BOOL bShow); // 创建一个word应用程序<br> void DeleteApp(); // 用后,删除<br> void ShowApp(BOOL bShow); // 显示,或者隐藏<br> void QuitApp(); // 关闭外部打开的word应用程序<br> <br> BOOL NewDoc(CString tpName); // 根据模板创建文档<br> void SaveDoc(CString Filename); // 保存文档到文件路径<br> <br> void TypeText(CString Text); // 在当前位置输入文字<br> void SetTextAlign(int val); // 设置文字对齐方式<br> void SetTextColor(COLORREF cr); // 设置文本颜色<br> <br> void AddPic(CString FileName); // 在当前位置插入图片文件<br> void RunMacro(CString macroName); // 运行一个宏<br> <br> void AddTable(int nRow, int nCol); // 加一个几行几列的表格<br> void AddTable(int nRow, int nCol, int autoFit); // 加一个几行几列的表格,列宽度自动<br> void SelectTable(int i); // 选择当前文档中的第i个表格<br> void MoveToTableNext(int iTable); // 把选择区指向表格后面<br> void SetCellText(int iTable, int iRow, int iCol, CString text); // 设置第i个表格中的某行某列的文字<br> <br> void SetTableTextVAlign(int iTable, int val); // 置第i个表格中文字对齐方式<br> void SetColWidth(int iTable, int iCol, float width); // 设置列宽度<br> void SetRowHeight(int iTable, int iRow, float height); // 设置行高度<br> <br> // 合并两个单元格之间的区域<br> void MergeCell(int iTable, int cell1Row, int cell1Col, int cell2Row, int cell2Col, CString text);<br> // 设置单元格文本颜色<br> void SetCellTextColor(int iTable, int iRow, int iCol, COLORREF cr);<br> // 设置单元格背景颜色<br> void SetCellColor(int iTable, int iRow, int iCol, COLORREF crCell);<br> <br> // 设置单元格边框的四周风格,<br> void SetCellBorderStyle(int iTale, int iRow, int iCol, int sTop, int sLeft, int sBottom, int sRight);<br> <br> // 设置两个单元格之间的区域,边框的四周风格,<br> void SetCellsBorderStyle(int iTable, int iRow1, int iCol1, int iRow2, int iCol2,int sTop, <br> int sLeft, int sBottom, int sRight);<br> <br> // 设置两个单元格之间的区域,背景颜色<br> void SetCellsColor(int iTable, int iRow1, int iCol1, int iRow2, int iCol2, COLORREF crCell);<br> <br> CString ToString();<br> <br>protected:<br> _Application app; // 应用程序<br> Selection sel; // 用来存放获得的选择范围<br> _Document saveDoc; // 当前活动文档<br> COleVariant vTrue; // 常量TRUE<br> COleVariant vFalse;<br> COleVariant vOpt;<br>};<br><br><br><br><br><br><br>二、使用DLL中导出类的方法:<br><br><br>#include "WordOperate.h"<br>#pragma comment(lib, "wordDll.lib")<br><br>在类中定义成员: <br>CWordOperate wordFile;<br><br><br>使用示例:<br><br>// 创建文件 <br>CString str;<br>COLORREF crCell = RGB(240, 240, 240);<br>char buffer[255];<br>wordFile.CreateWordApp(TRUE);<br>GetCurrentDirectory(254, buffer);<br>strcat(buffer, "\\tp.doc");<br>wordFile.NewDoc(buffer);<br> <br>// 表格使用<br>wordFile.AddTable(8, 11);<br>wordFile.SelectTable(1);<br>wordFile.MergeCell(iTable, 1, 6, 1, 8, "频域数据");<br>crCell = RGB(255, 0, 0);<br>wordFile.SetCellColor(iTable, 3, 2, crCell);<br>wordFile.MoveToTableNext(1);<br><br>// 写文字<br>wordFile.TypeText("二. 分析图:\r\n");<br><br>// 插入图片<br>GetCurrentDirectory(254, buffer);<br>strcat(buffer, "\\chart.jpg");<br>wordFile.AddPic(buffer);<br><br>// 保存文件,删除对象<br>GetCurrentDirectory(254, buffer);<br>strcat(buffer, "\\测试报表.doc");<br>wordFile.SaveDoc(buffer);<br>wordFile.DeleteApp();<br><br>// 也可以在删除对象前先关闭程序<br>wordFile.QuitApp();<br><br><br><br><br><br>三、使用压缩包的测试程序,按钮二能提供的效果如下图:<br><br><br>图一 Word报表效果屏幕截图<br><br><br><br>四、说明:<br>开发环境为:vc6 + sp6 + xp_sdk<br>Word版本:2003企业版<br><br>压缩包说明:wordDll为库的代码,TestDll为使用示例,宏.txt是格式化段落的宏<br><br>附加:如果想知道函数中使用的值应该为多少,可以在Word操作的时候录制宏,然后使用单步调试的方式得到想要的值。<br>注:本着开源的精神,把这个使用过的类和大家分享,希望大家有用,如果有错误的地方,希望指正,谢谢<br>
- 1
- 粉丝: 7587
- 资源: 85
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
- 1
- 2
- 3
- 4
- 5
- 6
前往页