MFC操作word 配置环境 生成简单报表

一、为MFC配置操作word的环境

  两种方式:1、将msword.h和msword.cpp添加到工程中(自己下,资源多),完成后会增加很多类。在实现文件上添加#include "msword.h"即可。

  2、从类型库MSWORD.OLB导入相关类,具体参见:点击打开链接(一些细节解释参见点击打开链接 使用VS2010操作EXECL),实际测试中将CApplication.h中自动生成的类似#import "C:\\Program Files\\Microsoft Office\\OFFICE11\\MSWORD.OLB" no_namespace 注释掉后,只添加了前两行代码,然后为某些自动生成.h里个别漏void返回值的成员函数添加了void即编译通过(也不清楚为何会漏)。此外甚至有的不需要添加额外的代码即通过,如点击打开链接Automating Word 2016 using Visual C++ MFC in Visual Studio 2015(CodeProject上的开源工程,挺详尽)。可以看出该方法挺繁杂,多种情况,但也有只添加需要的类,更规范优点。

  其实第一种方式的两个文件是VC6.0导入类型库后自动生成的,无奈VS2010及以后的版本却更不好使了。。。。


好的资源:1、点击打开链接 stackoverflow: How to read MS Word documents using MFC?

2、C++ app automates Word官方示例,3种方式,mfc竟没讲。。。

3、VS2010通过OLE操作Excel2010

4、【MFC/C++操作word】Word篇封装了操作word的类,挺详尽

5、Microsoft.Office.Interop.Word Namespace msdn


二、MFC生成word报表

工程下有时需要生成报表,网页上介绍的基本上都是新建空白文档,然后表格,文字,样式啦一点点加,太费劲啦!我想的是有一个word报表的模板,生成时只需以它为模板新建文档,并填表即可。

MFC操作word 配置环境 生成简单报表_第1张图片

图1 报表模板


MFC操作word 配置环境 生成简单报表_第2张图片

图2 自动生成的

我是按上述第一种方式配置环境的

	//Word应用程序 
	_Application app;
	Documents docs;
	_Document doc;
	Tables tabs;
	Table tab;
	//获得报表模板路径
	CString path;
	GetCurrentDirectoryW(MAX_PATH, path.GetBuffer(MAX_PATH));
	path.ReleaseBuffer();
	path += "\\检测报表.doc";
	//按模板创建新文档
	app.CreateDispatch(L"Word.Application");
	CComVariant templ(path), newTem(false), type(0), visib(true);
	docs.AttachDispatch(app.GetDocuments());
	doc.AttachDispatch(docs.Add(&templ, &newTem, &type, &visib));
	//在第三行写当前日期
	Selection sel = app.GetSelection();//初始为文首
	sel.MoveDown(COleVariant((short)5), COleVariant((short)2),
		COleVariant((short)0));//5为wdLine,按行下移;2为移两行;0为wdMove,只移动光标不选中(1为wdExtend还要选中)
	COleDateTime dt = COleDateTime::GetCurrentTime();
	CString strDT = dt.Format(_T("%Y-%m-%d"));
	sel.TypeText(strDT);
	//填表
	tabs = doc.GetTables();
	tab = tabs.Item(1);
	for (int i = 2; i <= 3; ++i)
		for (int j = 2; j <= 6; ++j)
		{
			Cell ce;
			CString str;
			ce = tab.Cell(i, j);
			ce.Select(); //选中该单元
			str.Format(L"%d, %d", i, j);
			sel.TypeText(str);
		}
	//显示
	app.SetVisible(true);
	//释放环境
	doc.ReleaseDispatch();
	docs.ReleaseDispatch();
	app.ReleaseDispatch();


你可能感兴趣的:(mfc)