C++、MFC往Word模板中添加图片

  新建一个基于对话框的MFC应用程序工程,将对话框界面设置成图1所示。

图1    通过类向导添加所有的接口,使VS与Word建立联系。   
   “类向导”界面如图2,在 “添加类”处选择“类型库中的MFC类(T)...”,弹出图3所示界面,选择从文件中添加类。 图2 图3    找到计算机中Word安装路径中“MSWORD.OLB”文件,如图4所示,单击“打开”按钮,则“接口”窗口出现Word相关接口,如图5 所示。 图4 图5    可以根据自己的需要添加接口,往Word模板中添加图片则需要用到_Application、_Document、Cell、Documents、Inlineshape、Inlineshapes、Selection、Table和Tables共9个接口,找到接口并点击图5中 “>”符号,则生成相应的类,CApplication、CDocument0、CCell、CDocuments、Cnlineshape、Cnlineshapes、CSelection、CTable0 和CTables0共9个类,如图6所示。 图6    单击“完成”、“应用”之后,在“解决方案资源管理器”可以看见生成了相应的头文件,如图7所示;在“类视图”可以看见生成了相应的类,如图8所示。 图7

图8    双击打开图7所示生成的各头文件,可见第三行的代码#import "D:\\Microsoft Office\\Office12\\MSWORD.OLB" no_namespace,如图9为CApplication.h中的此代码,将其注释掉,否则无法编译成功。

图9    找到与项目同名的源文件,这里是AddPictureToWord.cpp,在图10所示位置添加下面这5行代码。

if (!AfxOleInit())
{AfxMessageBox(_T("无法初始化COM的动态链接库!"));return FALSE;
}

图10    双击图1中的“生成报告”按钮,将类向导生成的所有头文件添加到弹出的源文件中,如图11所示。 图11    在双击图1中的“生成报告”按钮弹出的源文件中添加代码,代码在本文末已给出。
   代码添加后会出现图12所示,获取路径的错误,在项目-属性-配置属性-常规-字符集中,将项目的字符集改为“使用多字节字符集”,如图13所示。则该错误得到解决。 图12 图13    之后就可以生产解决方案了,生成解决方案时可以看见,出现了如图14所示错误,在项目-属性-配置属性-C/C++-预处理器-预处理器定义中,添加“_CRT_SECURE_NO_WARNINGS”即可,如图15所示。 图14 图15    在生成得到的解决方案文件夹中有.exe、.ilk和.pdb三个文件,在该文件夹中放入Word模板“Template.dot”和欲添加到模板中的图片(此处图片放在Result文件夹中),如图16所示。

图16    此时进行启动调试则可在上述文件夹中得到添加了图片的Word文档,调试结果如图17和图18所示。

图17

图18    void CAddPictureToWordDlg::OnBnClickedButton1()中的代码如下:  

// 获取应用当前Debug路径
char fileName[MAX_PATH];
GetModuleFileName(NULL, fileName, MAX_PATH);
char dir[260];
char dirver[100];
_splitpath(fileName, dirver, dir, NULL, NULL);
CString strAppPath = dirver;
strAppPath += dir;
//CString strAppPath = _T("D:\\");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_active; // 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.0docxs = wordApp.get_Documents();     // 得到docxsdocx = docxs.Add(covOptional, covOptional, covOptional, covOptional);  // 添加一个docxCComVariant tpl(strAppPath + _T("\\Template.dot")), Visble, DocxType(0), NewTemplate(false);docx = docxs.Add(&tpl, &NewTemplate, &DocxType, &Visble);if (NULL == docx.m_lpDispatch)return;CSelection wordSelection = wordApp.get_Selection();// 声明一个CSelection对象,并实例化// 定义table和cell变量CTable0 table;CTables0 tables;CCell cell;//填写表格wordSelection = wordApp.get_Selection();  //获取光标位置,一般在文首wordSelection.MoveDown(COleVariant((short)5), COleVariant((short)2), COleVariant((short)0));tables = docx.get_Tables();table = tables.Item(tables.get_Count());//插入图片//wordSelection.TypeParagraph();   // 另起一段cell = table.Cell(1, 1);cell.Select(); //选中该单元CString strPicture1 = strAppPath + _T("\\Result\\潘春春.jpg");CnlineShapes nLineShapes1 = wordSelection.get_InlineShapes();CnlineShape nLineshape1 = nLineShapes1.AddPicture(strPicture1, covFalse, covTrue, covOptional);nLineshape1.put_Height(478);nLineshape1.put_Width(550);//wordApp.put_Visible(TRUE);// Word程序可见,显示报告// 保存word文档CString strSavePath = strAppPath;strSavePath += _T("\\Word.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("生成成功!"));
}

本文对应的资源已上传至https://download.csdn.net/download/fei_12138/13033821

C++、MFC往Word模板中添加图片相关推荐

  1. word模板中添加图片

    http://www.iteye.com/problems/72865 1.打开word文件 Java代码   /** * 打开一个已存在的文档 * * @param docPath */ publi ...

  2. Java替换Word模板中的文字、图片、表格、水印

    前言 由于业务需求,要求开发一个工具类,需要对Word模板中的内容进行替换,并且支持插入图片.根据业务生成自定义表格,以及对处理后的文件增加水印,处理完的文件支持保存doc.docx.pdf格式 1. ...

  3. 爱思唯尔(Elsevier)论文模板中添加作者简介和图片(biography)

    Elsever论文模板的论文模板中没有biography的模板,如何手动添加? 1. 现有方案举例(不完美) CSDN上也有不少解决方法,例如这里的: \documentclass{article} ...

  4. java使用poi在word模板中替换柱状图、折线图、饼图、表格、文本、图片

    介绍 java使用poi在word模板中替换柱状图.折线图.饼图.表格.文本.图片 软件架构 安装教程 环境搭建:jdk1.8.0_291.maven1.8.0_291 IDEA工具:IntelliJ ...

  5. java向Word模板中替换书签数据,插入图片,插入复选框,插入Word中表格的行数据,删除表格行数据

    java向Word模板中替换书签数据,插入图片,插入复选框,插入Word中表格的行数据,删除表格行数据 使用插件:spire.doc 创建工具类,上代码: import com.spire.doc.D ...

  6. Word中添加图片时自动添加图片名

    Word中添加图片时自动添加图片名 1.打开Word中"查看宏" 2.新建宏 3.运行宏 当Word中需要添加大量图片时,并要显示图片名称时可以采用以下编辑宏进行快速插入,下边讲述 ...

  7. Java导出数据到Word模板中

    Java导出数据到Word模板. 前言 网上的方案 需求介绍 模板 简介 使用体验 poi-tl Freemarker 操作步骤 总结 前言 相信很多人都会遇到Java导出的业务,Java导出主要有导 ...

  8. Java使用Spire.Doc实现Word文档添加图片水印

    通过本文你将学到: Spire.Doc是什么? 如何在项目中引入Spire.Doc依赖? 项目中基于Spire.Doc封装工具类实现Word文档添加图片水印? 一.Spire.Doc是什么? 1.Sp ...

  9. 初次使用Android Studio问题,Android Studio往项目中添加图片

    2019独角兽企业重金招聘Python工程师标准>>> 习惯了iOS往项目中直接拖拽的图片的习性,第一次往Android Studio中添加图片为难了,怎么也拖拽不进去,为难了,研究 ...

  10. java 图片动画_java在窗口中添加图片做动画,怎么一闪一闪的?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 视频来自:优酷 在java中添加图片做动画效果,怎么一闪一闪的运动啊?怎样才能让它不闪的连续运动呢? 下面是代码,代码项目project里有两个类,一个是 ...

最新文章

  1. 深度解析机器学习中的置信区间(附代码)
  2. Round Robin 算法
  3. 拼图游戏_我最喜欢的Java拼图2 + 1 = 4
  4. ES6 中 Promise 详解
  5. java.awt.action 命令模式_java设计模式之命令模式
  6. Mybatis-Generator(MBG)教程与Idea的MBG插件
  7. 工作总结6:token问题
  8. php与数据库的连接用法 (签到一)
  9. 【云栖大会】与马云一起开启“飞天·进化”之旅
  10. mysql复合语句声明开始于_mysql8 参考手册--BEGIN ... END复合语句
  11. tensorflow之conv2d
  12. numpy教程:数组操作
  13. integer是值传递还是引用传递_188W+程序员都关注的问题:Java到底是值传递还是引用传递?
  14. HTML:H5新增表单type属性
  15. DB2 DatabaseMetadata类的使用
  16. bay——RAC 表空间时数据文件误放置到本地文件系统-介质恢复.txt
  17. 使用逻辑回归对信用卡诈骗分析
  18. 解决VirtualBox配置静态ip和连外网的问题
  19. Spring注解开发配置
  20. android 通知图标大小,android – 通知栏显示大图标和小图标

热门文章

  1. 如何在ppt中生成柱状图_PPT幻灯片中怎么插入柱形图数据图表?
  2. apache common-chain 简单使用
  3. unity 阳光插件_PR插件LUT Mixer2.1.1安装教程
  4. Flutter 旋转动画
  5. SteamVR Unity工具包(三):控制器交互
  6. 2021-7-20 Cityscape 数据集从19分类到4分类BiSeNetv1-v2训练验证和测试一条龙
  7. excel如何取消合并单元格并自动填充
  8. 工业以太网通讯Profinet协议详解
  9. 在word中插入参考文献角标
  10. C语言问题,if条件里面按位取反