由于学习C++操作word文档是临时需要,所以有些东西也只是知其然不知其所以然,有些代码也是抄了人家的,拿来应需。
C++操作word听说有两种方法,一种是COM、一种是ATL,这里用的是COM。有些函数不知道参数是什么意思时,可以找到函数原型帮助理解。Word的预定义枚举类型都是Wd开头,如WdSeekView::wdSeekMainDocument表示文字视图,WdSeekView::wdSeekCurrentPageHeader表示页眉视图,使用这些枚举类型,可以帮助参数的设置。
这里给出了两个昨天写的例子,能运行的。环境是VS2008和Office2003。第一个例子介绍了创建新文档、插入表格、输入文字、字体设置、设置表格边框、合并单元格、设置页眉页脚、插入图片、保存文件等功能的方法。第二个例子生成了一个完整的报告,包括页边距、段落对齐等。
具体步骤:
1.新建MFC工程,project - add class,选择file。找到Office安装目录下的MSWORD.OLB文件,如C:\\Program Files\\Microsoft Office\\OFFICE11\\MSWORD.OLB
2.加入需要的接口,下面例子中,C开头的类都是此处加入的接口
3.VS2008会为工程添加相应头文件,此时需要把头文件里的
#import "C:\\Program Files\\Microsoft Office\\OFFICE11\\MSWORD.OLB" no_namespace
改成
#import "C:\\Program Files\\Microsoft Office\\OFFICE11\\MSWORD.OLB" no_namespace raw_interfaces_only \
rename("FindText","_FindText") \
rename("Rectangle","_Rectangle") \
rename("ExitWindows","_ExitWindows")
注意,“\”字符后面不能加空格
3.#include // 为了方便操作 VARIANT 类型变量,使用 CComVariant 模板类
4.好了,可以编程了
//例子1
void CMyWordDlg::OnBnClickedButton1()
{
CoInitialize(NULL);//初始化COM,与最后一行CoUninitialize对应
//CPageSetup pagesetup=doc.get_PageSetup();//页面设置相关,没用到
CApplication app;
if(!app.CreateDispatch(_T("word.application"))) //启动WORD
{
AfxMessageBox(_T("居然你连OFFICE都没有安装吗?"));
return;
}
AfxMessageBox(_T("WORD 已经运行启动啦,你可以用Ctrl+Alt+Del查看"));
app.put_Visible(TRUE); //设置WORD可见。
CDocuments docs = app.get_Documents();
docs.Add(new CComVariant(_T("")),new CComVariant(FALSE),new CComVariant(0),new CComVariant());//创建新文档
AfxMessageBox(_T("下面,程序要向WORD发送字符啦"));
CSelection sel=app.get_Selection();/