基于MFC实现WORD操作生成报告(使用模板)
最近在做关于操作WORD的,之前没有用过VS,也没有操作WORD的经验,纯白痴。去网上搜索很多都是基于C#或者JAVA来做,经过一番汇总前人经验,现在把我的所感记录下来,当做笔记吧!
一、COM组件选择
选用WPS组件,原因我的电脑是WPS。
这个地方影响不大,就是引入.dll的时候WPS不太好找到,后面的程序都是一样。这个时候可以选择找到WPS的安装路径下wps.dll,在类向导那里根据文件路径选择就可以了。
【注意】网上很多说把接口全部导入,千万不要这样,太多了,用啥添啥吧。CApplication、CDocument0、CDocuments、 CSelection 这4个是最基本的。
添加.dll之后把.h文件中下面的代码注释掉,防止编译出错。
#import “C:\Program Files (x86)\Kingsoft\WPS Office\11.1.0.9584\office6\wpsapi.dll” no_namespace
二、初始化
在按钮文件中生成按钮之前就要初始化,这一句是必须的,且不要放在主函数中初始化,会导致同一个窗口只能跑一遍程序,第二遍会出错。(针对MFC,控制台程序只要在实例化之前初始化就行)
/*if (!AfxOleInit())
{
printf("注册COM出错!");
return false;
}
*/
三、参数类型问题
这个我自己还没搞明白,暂不赘述。
小技巧:工程属性常规中字符集修改成多字节字符集可以解决部分问题。
四、调试问题
1.编译提示错误: error C4996: ‘strcpy’: This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
打开工程属性C/C++预处理器中预处理器定义添加 _CRT_SECURE_NO_WARNINGS即可
其实报错里都有讲啦。
2.使用bks = Doc.get_Bookmarks()取得书签集合之后判断文档中是否存在该书签可使用下面函数判断优化。
if (bks.Exists(_T(“reporttime”)))
3.接收命令行参数调试时候打开属性调试命令参数处输入自己需要的参数即可,多个参数空格隔开。一般第一个参数是.exe文件名。
4.如果WORD文档标签和配置文件(我的项目需要)键值匹配但缺少对应实际图片值时候程序会出错。(针对插入的是图片信息,文本好像不影响)
5.若在控制台输出又需要MFC支持,在stdfax.h文件中加入下面程序(实际上建立支持MFC的工程会轻松很多):
#include "targetver.h"
#ifndef VC_EXTRALEAN
#define VC_EXTRALEAN // 从 Windows 头中排除极少使用的资料
#endif
#include "targetver.h"
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // 某些 CString 构造函数将是显式的
// 关闭 MFC 对某些常见但经常可放心忽略的警告消息的隐藏
#define _AFX_ALL_WARNINGS
#include <afxwin.h> // MFC 核心组件和标准组件
#include <afxext.h> // MFC 扩展
还有很多调试问题都不记得了