



免费预览已结束,剩余12页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
环境:win7+vs2010+office2010/20131、 创建MFC工程,非Unicode。2、 添加Word的类库添加所有的接口,可以作为一个文件夹,以后再使用只要加入该文件夹就可以了。由于函数命名冲突,需要在生成的头文件中做相应处理,即:/#import C:Program FilesMicrosoft OfficeOffice14MSWORD.OLB no_namespace#import C:Program FilesMicrosoft OfficeOffice14MSWORD.OLB no_namespaceraw_interfaces_only rename(FindText, _FindText) rename(Rectangle, _Rectangle) rename(ExitWindows, _ExitWindows)对于不同版本的office,其默认的类型库位置如下表所示:Office 版本路径Office 2003C:Program FilesMicrosoft OfficeOffice11Office 2007C:Program FilesMicrosoft OfficeOffice12Office 2010C:Program FilesMicrosoft OfficeOffice14Office 2013C:Program FilesMicrosoft OfficeOffice15特别的,word2013在vc2010下必须手动指定类型库文件位置。3、在stdafx中添加调用的头文件#include Word2010/CApplication.h/ word程序对象#include Word2010/CDocuments.h/ 文档集对象#include Word2010/CDocument0.h/ 单个docx对象#include Word2010/CSelection.h/ 该对象代表窗口或窗格中的当前所选内容,使用率最高#include Word2010/CCell.h/ 表格单元格#include Word2010/CCells.h/ 表格单元格集合#include Word2010/CRange.h/ 该对象代表文档中的一个连续范围#include Word2010/CTable0.h/ 单个表格#include Word2010/CTables0.h/ 表格集合#include Word2010/CFont0.h/ 字体#include Word2010/CParagraphs.h/ 段落集合#include Word2010/CParagraphFormat.h/ 段落样式#include Word2010/CParagraph.h/ 单个段落#include Word2010/CnlineShape.h/ Inline图形对象集合#include Word2010/CnlineShapes.h/ 单个Inline图像对象#include Word2010/CRow.h/ 单个行#include Word2010/CRows.h/ 行集合#include Word2010/CFields.h#include Word2010/CPane0.h/ 页眉等设置#include Word2010/CWindow0.h/ 页眉等设置#include Word2010/CView0.h/ 页眉等设置#include Word2010/CPageSetup.h/ 页面设置4、注销每个引入的头文件的import行/#import C:Program FilesMicrosoft OfficeOffice14MSWORD.OLB no_namespace不过如果使用wdMove等参数的话,只需要在CApplication.h文件中改为:/#import C:Program FilesMicrosoft OfficeOffice14MSWORD.OLB no_namespace#import C:Program FilesMicrosoft OfficeOffice14MSWORD.OLB no_namespaceraw_interfaces_only rename(FindText, _FindText) rename(Rectangle, _Rectangle) rename(ExitWindows, _ExitWindows)否则,如果没有上面一段,则报错提示为(即全部头文件都注销import的情况下):但是上述的方法会带来一个问题,就是当word版本改变时会出现问题,解决办法就是上述报错的变量都用其数值代替就不会有问题了(写代码时可以加上用以查看wdMove等变量的值),如下面一些:wdAlignParagraphLeft = 0wdAlignParagraphCenter = 1wdAlignParagraphRight = 2wdAlignParagraphJustify = 3wdParagraph = 4wdMove = 0wdStyleHeading1 = -2wdStory = 6页面纵向wdOrientPortrait=0页面横向wdOrientLandscape=1enum WdUnits wdCharacter = 1, / 字母 wdWord = 2, / 单词 wdSentence = 3, / 句子 wdParagraph = 4, / 段落 wdLine = 5, / 行 wdStory = 6, / 所选区域 wdScreen = 7, / 当前屏幕 wdSection = 8, / 部分 wdColumn = 9, / 列 wdRow = 10, / 行 wdWindow = 11, / 窗口 wdCell = 12, / 单元格 wdCharacterFormatting = 13, / 字体格式 wdParagraphFormatting = 14, / 段落格式 wdTable = 15, / 表格 wdItem = 16 / 项目;具体可以参考手册或者通过VBA代码查看。5、到CXXXApp.cpp文件中找到InitInstance函数添加代码:/ 例如修改为公司或组织名SetRegistryKey(_T(应用程序向导生成的本地应用程序);if ( !AfxOleInit() )AfxMessageBox(_T(无法初始化COM的动态链接库!);return FALSE;这一步可以通过在创建MFC工程时,勾选“自动化”。6、具体代码添加按钮,在按钮中实现:void CVCForWordDlg:OnBnClickedButton1()/ TODO: 在此添加控件通知处理程序代码COleVariantcovZero(short)0),covTrue(short)TRUE), covFalse(short)FALSE), covOptional(long)DISP_E_PARAMNOTFOUND, VT_ERROR), covDocxType(short)0);/ 定义word变量CApplication wordApp; / wordAppCDocuments docxs; / docxsCDocument0 docx, docx_active; / docxif ( !wordApp.CreateDispatch(_T(Word.Application) ) / 实例化wordApp,必须有初始化AfxMessageBox(_T(本机没有安装word产品!);return;elsewordApp.put_Visible(FALSE); / 设置文档开始不可见CString wordVersion = wordApp.get_Version();/ 获得当前word的版本,比如word2010为14.0,2013为15.0/ * 添加一个document */ 得到docxsdocxs = wordApp.get_Documents();/ 或者下面一段/ =/LPDISPATCH disp = wordApp.get_Documents();/if ( NULL = disp )/return;/ FALSE;/docxs.AttachDispatch(disp);/if ( NULL = docxs.m_lpDispatch )/return;/ FALSE;/ =/ 添加一个docxdocx = docxs.Add(covOptional, covOptional, covOptional, covOptional);/ 未用模板时,或者下面段两种/ =/ 2,未用模板/docx.AttachDispatch(docxs.Add(covOptional, covOptional, covOptional, covOptional);/ 3,使用模板/CComVariant tpl(_T(), Visble, DocxType(0), NewTemplate(false);/docx = docxs.Add(&tpl,&NewTemplate,&DocxType,&Visble);/ =if ( NULL = docx.m_lpDispatch )return;/ * 设置页边距 */ 放在创建文档后,需要CPageSetup.hdocx_active = wordApp.get_ActiveDocument();CPageSetup oPageSetup = docx_active.get_PageSetup();/ 设置为页面方向和页边距if ( oPageSetup.get_Orientation() = 0 )/ 若为纵向则设置为横向,纵向wdOrientPortrait=0,横向wdOrientLandscape=1oPageSetup.put_Orientation(1);/ 横向/ 设置上下左右变距,单位缇,以下参数设置的页边距是“适中”oPageSetup.put_TopMargin( (float) 72);/ 适中时72=2.54cm,默认时90=3.17cm;100.35cmoPageSetup.put_BottomMargin( (float) 72);/ 适中时72=2.54cm,默认时90=3.17cm;100.35cmoPageSetup.put_LeftMargin( (float) 54);/ 适中时54=1.9cm,默认时72=2.54cmoPageSetup.put_RightMargin( (float) 54);/ 适中时54=1.9cm,默认时72=2.54cm/else/ 设置为纵向/oPageSetup.put_Orientation(0);/ 设置上下左右变距,单位缇,以下参数设置的页边距是“适中”/oPageSetup.put_TopMargin( (float) 72);/ 适中时72=2.54cm,默认或普通时72=2.54cm;100.35cm/oPageSetup.put_BottomMargin( (float) 72);/ 适中时72=2.54cm,默认或普通时72=2.54cm;100.35cm/oPageSetup.put_LeftMargin( (float) 54);/ 适中时54=1.9cm,默认或普通时90=3.17cm/oPageSetup.put_RightMargin( (float) 54);/ 适中时54=1.9cm,默认或普通时90=3.17cm/ 声明一个CSelection对象,并实例化CSelection wordSelection = wordApp.get_Selection();/ * 设置文档内容 *wordSelection.TypeText(_T(虚拟试验仿真报表);wordSelection.HomeKey(COleVariant(short)5), COleVariant(short)1); / wdLine=5,返回当前行首,并选择当前行wordSelection.put_Style( COleVariant(short)-2) );/ 设置为“标题1“样式,wdStyleHeading1=-2/ 设置选择区域字体,一定要放在样式后,否则格式会被样式的覆盖CFont0 font = wordSelection.get_Font();font.put_Name(_T(微软雅黑);font.put_Size(16);/ 必须选择该行才可以修改,即必须有HomeKey那行/ 获得当前段落,并设置对齐方式CParagraph lastPara = GetCurParagraph(docx);lastPara.put_Alignment(1);/ wdAlignParagraphLeft=0, wdAlignParagraphCenter=1,wdAlignParagraphRight=2/ 结束当前段落编辑,移动光标到段落后wordSelection.EndOf(COleVariant(short)4), COleVariant(short)0);/ wdParagraph=4,wdMove=0wordSelection.TypeParagraph(); / 新起一段COleVariant covTime(_T(yyyy-MM-dd:dddd);/ 时间格式可调整wordSelection.InsertDateTime(covTime, covFalse, covOptional, covOptional, covOptional);/ 插入当前时间wordSelection.EndOf(COleVariant(short)4), COleVariant(short)0);/ 结束当前段落编辑,wdParagraph=4,wdMove=0/ 生成表格MakeRTITable( docx, wordSelection );/ 以下为为不同段落设置不同字体和对齐方式示例wordSelection.TypeParagraph(); / 新起一段wordSelection.TypeText(_T(end of the story!);wordSelection.HomeKey(COleVariant(short)5), COleVariant(short)1); / wdLine=5,返回当前行首,并选择当前行/*CFont0 */font = wordSelection.get_Font();font.put_Size(20);/ 必须选择该行才可以修改,即必须有HomeKey那行/*CParagraph */lastPara = GetCurParagraph(docx);lastPara.put_Alignment(3);/ 右对齐wordSelection.EndOf(COleVariant(short)4), COleVariant(short)0);/ 结束当前段落编辑,wdParagraph=4,wdMove=0wordSelection.TypeParagraph(); / 新起一段wordSelection.TypeText(_T(Thanks for reading!);wordSelection.HomeKey(COleVariant(short)5), COleVariant(short)1); / wdLine=5,返回当前行首,并选择当前行/*CFont0 */font = wordSelection.get_Font();font.put_Size(10);/ 必须选择该行才可以修改,即必须有HomeKey那行font.put_Name(_T(Times New Roman);/*CParagraph */lastPara = GetCurParagraph(docx);lastPara.put_Alignment(1);/ 居中对齐wordSelection.EndOf(COleVariant(short)4), COleVariant(short)0);/ 结束当前段落编辑,wdParagraph=4,wdMove=0/ 插入分页符,用于换页wordSelection.InsertBreak(covOptional);/ 插入公式,操作域CFields fields = wordSelection.get_Fields();COleVariant ofont = _variant_t(_T(Times New Roman);COleVariant text = _variant_t(_T(EQ a ar co2 vs3 hs3(Axy,Bxy,A,B);/ 注意要两个,一个转义后不对!fields.Add( wordSelection.get_Range(), covOptional, text, covFalse );wordSelection.HomeKey(COleVariant(short)5), COleVariant(short)1); / wdLine=5,返回当前行首,并选择当前行lastPara = GetCurParagraph(docx);lastPara.put_Alignment(0);/ 左对齐wordSelection.EndOf(COleVariant(short)4), COleVariant(short)0);/ 结束当前段落编辑,wdParagraph=4,wdMove=0/ 获取应用当前Debug路径char fileNameMAX_PATH;GetModuleFileName(NULL, fileName, MAX_PATH);char dir260;char dirver100;_splitpath(fileName, dirver, dir, NULL, NULL);CString strAppPath = dirver;strAppPath += dir;/CString strAppPath = _T(D:);/ * 插入图片示例 */ 需要CWindow0.h, CPane0.h, CView0.hwordSelection.TypeParagraph();/ 另起一段CString strPicture = strAppPath + _T(截图.jpg);CnlineShapes nLineShapes = wordSelection.get_InlineShapes();CnlineShape nLineshape = nLineShapes.AddPicture(strPicture, covFalse, covTrue, covOptional);/ * 设置页眉页脚 *CWindow0 oWind = docx.get_ActiveWindow();CPane0 oPane = oWind.get_ActivePane();/ 一定将CPane改为CPane0或其他CView0 oView = oPane.get_View();/ = 设置页眉 =oView.put_SeekView(9);/ wdSeekCurrentPageHeader=9/*CFont0 */font = wordSelection.get_Font();/ 设置选择区域字体font.put_Name(_T(华文楷体);font.put_Size(16);/*CParagraphFormat */lastPara = wordSelection.get_ParagraphFormat();/ 默认为居中lastPara.put_Alignment(1);/ wdAlignParagraphLeft=0, wdAlignParagraphCenter=1, wdAlignParagraphRight=2wordSelection.TypeText(_T(网络大学);/ = 设置页脚,包括页码 =oView.put_SeekView(10);/ wdSeekCurrentPageFooter=10/*CFont0 */font = wordSelection.get_Font();/ 设置选择区域字体,一定要放在样式后,否则格式会被样式的覆盖font.put_Name(_T(华文楷体);font.put_Size(16);/*CParagraphFormat */lastPara = wordSelection.get_ParagraphFormat();/ 默认为居中lastPara.put_Alignment(1);/ wdAlignParagraphLeft=0, wdAlignParagraphCenter=1, wdAlignParagraphRight=2/ 添加页码wordSelection.TypeText(_T(第页 共页);wordSelection.MoveLeft( COleVariant(short)1), COleVariant(short)4), &covZero );/*CFields */fields = wordSelection.get_Fields();fields.Add( wordSelection.get_Range(), COleVariant(short)33), COleVariant(PAGE ), &covTrue );/ 增加页码域,当前页码wordSelection.MoveRight( COleVariant(short)1), COleVariant(short)3), &covZero);fields.Add( wordSelection.get_Range(), COleVariant(short)26), COleVariant(NUMPAGES ), &covTrue );/ 增加页码域,总页数oView.put_SeekView(0);/ 关闭页眉页脚,wdSeekMainDocument=0,回到主控文档/ Word程序可见,显示报表/wordApp.put_Visible(TRUE);/ 保存成果CString strSavePath = strAppPath;strSavePath += _T(报表.docx);docx.SaveAs(COleVariant(strSavePath), covOptional, covOptional, covOptional, covOptional,covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional,covOptional);/ 退出word应用docx.Close(covFalse, covOptional, covOptional);wordApp.Quit(covOptional, covOptional, covOptional);wordApp.ReleaseDispatch();MessageBox(_T(生成成功!);表格插入函数MakeRTITable(CDocument0& oDoc, CSelection& selection):void CVCForWordDlg:MakeRTITable(CDocument0& oDoc, CSelection& selection)int nRowSize = 10;nRowSize = nRowSize = 0 ? 2 : nRowSize;/ 表格至少两行/ new paragraphselection.TypeParagraph();/ 新起一段/ Add table titleselection.TypeParagraph();/ 新起一段selection.TypeText(RTITableTitle);CParagraph lastPara = GetCurParagraph(oDoc);/lastPara.put_Alignment(wdAlignParagraphCenter);/ 下面表格内容也受此控制/selection.EndOf(COleVariant(short)wdParagraph), COleVariant(short)wdMove);lastPara.put_Alignment(1);/ 下面表格内容也受此控制selection.EndOf(COleVariant(short)4), COleVariant(short)0);/ Add tableCTables0 wordTables = oDoc.get_Tables();CRange wordRange = selection.get_Range();COleVariant covTrue(short)TRUE), covFalse(short)FALSE), covOptional(long)DISP_E_PARAMNOTFOUND, VT_ERROR);CTable0 wordTable = wordTables.Add(wordRange, nRowSize , RTITableColumnSize, covTrue, covFalse); / 添加表格wordRange = wordTable.get_Range();/ Make headerCCell cell;for ( int i=1; iRTITableColumnSize+1; i+ )cell = wordTable.Cell(1, i); / 表格第一行第i列单元格cell.Select();selection.TypeText(RTITableFieldArrayi-1);/selection.EndOf(COleVariant(short)wdStory), COleVariant(short)wdMove); / 结束表格编辑selection.EndOf(COleVariant(short)6), COleVariant(short)0); / 结束表格编辑for ( int i=1; iRTITableColumnSize+1; i+ )cell = wordTable.Cell(2, i); / 表格第一行第i列单元格cell.Select();selection.TypeText(_T(111.0);/selection.EndOf(COleVariant(short)wdStory), COleVariant(short)wdMove); / 结束表格编辑selection.EndOf(COleVariant(short)6), COleVariant(short)0); / 结束表格编辑/ 合并单元格,需要注意的是,合并整行前不能有单元格的合并,否则无法获取表格的行信息CRows rows;rows = wordTable.get_Rows();/ 获取表格的行CRow row;row = rows.Item(3);/ 指向
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 应急制氮装置项目可行性研究报告
- 连续铸造机项目可行性研究报告
- 钻井平台涂料项目可行性研究报告
- 2026年高考语文总复习文言文专题-学生版-古代文化常识(复习讲义)
- 防汛知识培训演练方案课件
- 防汛疏散知识培训内容课件
- 软件开发和服务合同书
- 新媒体行业发展趋势前瞻
- 智能家居市场用户行为分析
- 医疗健康行业市场前景分析
- 农贸市场消防整改报告
- (高清版)DZT 0337-2020 矿产地质勘查规范 油砂
- 【培训课件】5S培训课程讲义
- 消费者市场与购买行为课件
- 2021年10月自考健康教育与健康促进试题及答案
- 个人独资企业章程样本
- 假性软骨发育不全综合征介绍演示培训课件
- 他们创造了数学:50位著名数学家的故事
- 财务管理-企业筹资方式
- 07K103-2 防排烟系统设备及附件选用及安装
- (完整)消化性溃疡PPT课件ppt
评论
0/150
提交评论