1、环境: win7+vs2010+office2010/2013 1、 创建 MFC 工程,非 Unicode。 2、 添加 Word 的类库 添加所有的接口,可以作为一个文件夹,以后再使用只要加入该文件夹就可以了。 由于函数命名冲突,需要在生成的头文件 中 做相应处理,即: /#import “C:Program FilesMicrosoft OfficeOffice14MSWORD.OLB“ no_namespace #import “C:Program FilesMicrosoft OfficeOffice14MSWORD.OLB“ no_namespace raw_interfaces_
2、only rename(“FindText“, “_FindText“) rename(“Rectangle“, “_Rectangle“) rename(“ExitWindows“, “_ExitWindows“) 对于不同版本的 office,其默认的类型库位置如下表所示: Office 版本 路径 Office 2003 C:Program FilesMicrosoft OfficeOffice11 Office 2007 C:Program FilesMicrosoft OfficeOffice12 Office 2010 C:Program FilesMicrosoft Office
3、Office14 Office 2013 C: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“ / 该对象代表窗口或窗格
4、中的当前所选内容,使用率最高 #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 “Wor
5、d2010/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“ /
6、 页眉等设置 #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 FilesMicroso
7、ft OfficeOffice14MSWORD.OLB“ no_namespace #import “C:Program FilesMicrosoft OfficeOffice14MSWORD.OLB“ no_namespace raw_interfaces_only rename(“FindText“, “_FindText“) rename(“Rectangle“, “_Rectangle“) rename(“ExitWindows“, “_ExitWindows“) 否则, 如果没有上面一段,则报错提示为 (即全部头文件都注销 import的情况下 ) : 但是上述的方法会带来一个问题,
8、就是当 word版本改变时会出现问题, 解决办法就是上述报错的变量都用其数值代替就 不会有问题了 (写代码时可以加上用以查看 wdMove等变量的值) ,如下面一些: wdAlignParagraphLeft = 0 wdAlignParagraphCenter = 1 wdAlignParagraphRight = 2 wdAlignParagraphJustify = 3 wdParagraph = 4 wdMove = 0 wdStyleHeading1 = -2 wdStory = 6 页面纵向 wdOrientPortrait=0 页面横向 wdOrientLandscape=1 e
9、num 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
10、 = 14, / 段落格式 wdTable = 15, / 表格 wdItem = 16 / 项目 ; 具体可以参考手册或者通过 VBA代码查看。 5、到 CXXXApp.cpp 文件中找到 InitInstance 函数 添加代码: / 例如修改为公司或组织名 SetRegistryKey(_T(“应用程序向导生成的本地应用程序 “); if ( !AfxOleInit() ) AfxMessageBox(_T(“无法初始化 COM的动态链接库! “); return FALSE; 这一步可以通过在创建 MFC工程时,勾选 “自动化 ”。 6、 具体代码 添加按钮,在按钮 中实现 : voi
11、d CVCForWordDlg:OnBnClickedButton1() / TODO: 在此添加控件通知处理程序代码 COleVariant covZero(short)0), covTrue(short)TRUE), covFalse(short)FALSE), covOptional(long)DISP_E_PARAMNOTFOUND, VT_ERROR), covDocxType(short)0); / 定义 word变量 CApplication wordApp; / wordApp CDocuments docxs; / docxs CDocument0 docx, docx_ac
12、tive; / docx if ( !wordApp.CreateDispatch(_T(“Word.Application“) ) / 实例化 wordApp,必须有初始化 AfxMessageBox(_T(“本机没有安装 word产品! “); return; else wordApp.put_Visible(FALSE); / 设置文档开始不可见 CString wordVersion = wordApp.get_Version(); / 获得当前 word的版本,比如word2010为 14.0,2013为 15.0 / * 添加一个 document * / 得到 docxs doc
13、xs = wordApp.get_Documents(); / 或者下面一段 / = /LPDISPATCH disp = wordApp.get_Documents(); /if ( NULL = disp ) / return;/ FALSE; /docxs.AttachDispatch(disp); /if ( NULL = docxs.m_lpDispatch ) / return;/ FALSE; / = / 添加一个 docx docx = docxs.Add(covOptional, covOptional, covOptional, covOptional); / 未用模板时,
14、或者下面段两种 / = / 2,未用模板 /docx.AttachDispatch(docxs.Add(covOptional, covOptional, covOptional, covOptional); / 3,使用模板 /CComVariant tpl(_T(“), Visble, DocxType(0), NewTemplate(false); /docx = docxs.Add( / = if ( NULL = docx.m_lpDispatch ) return; / * 设置页边距 * / 放在创建文档后,需要 CPageSetup.h docx_active = wordAp
15、p.get_ActiveDocument(); CPageSetup oPageSetup = docx_active.get_PageSetup(); / 设置为页面方向和页边距 if ( oPageSetup.get_Orientation() = 0 ) / 若为纵向则设置为横向, 纵向wdOrientPortrait=0,横向 wdOrientLandscape=1 oPageSetup.put_Orientation(1); / 横向 / 设置上下左右变距,单位缇,以下参数设置的页边距是 “适中 ” oPageSetup.put_TopMargin( (float) 72); / 适
16、中时 72=2.54cm,默认时90=3.17cm; 100.35cm oPageSetup.put_BottomMargin( (float) 72); / 适中时 72=2.54cm,默认时90=3.17cm; 100.35cm oPageSetup.put_LeftMargin( (float) 54); / 适中时 54=1.9cm,默认时72=2.54cm oPageSetup.put_RightMargin( (float) 54); / 适中时 54=1.9cm,默认时72=2.54cm /else / 设置为纵向 / / oPageSetup.put_Orientation(0
17、); / / 设置上下左右变距,单位缇,以下参数设置的页边距是 “适中 ” / 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_Rig
18、htMargin( (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
19、( 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); / wd
20、AlignParagraphLeft=0, wdAlignParagraphCenter=1,wdAlignParagraphRight=2 / 结束当前段落编辑,移动光标到段落后 wordSelection.EndOf(COleVariant(short)4), COleVariant(short)0); / wdParagraph=4,wdMove=0 wordSelection.TypeParagraph(); / 新起一段 COleVariant covTime(_T(“yyyy-MM-dd:dddd“); / 时间格式可调整 wordSelection.InsertDateTime(
21、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
22、(“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); / 右对齐 wordSelectio
23、n.EndOf(COleVariant(short)4), COleVariant(short)0); / 结束当前段落编辑, wdParagraph=4, wdMove=0 wordSelection.TypeParagraph(); / 新起一段 wordSelection.TypeText(_T(“Thanks for reading!“); wordSelection.HomeKey(COleVariant(short)5), COleVariant(short)1); / wdLine=5,返回当前行首,并选择当前行 /*CFont0 */font = wordSelection.g
24、et_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 / 插入分页符,用于换页 wordSele
25、ction.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 );
26、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; Ge
27、tModuleFileName(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.h wordSelection.TypeParagraph(); / 另起一段 CString strPicture = strAppPath + _T(“截图 .jpg“); CnlineShapes nLineShapes = wordSelection.get_InlineShapes(); CnlineShape nLineshape = nLineShapes.AddPicture(strPicture, covFalse, covTrue, covOptional);
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。