参考:http://bbs.youkuaiyun.com/topics/300141389
http://blog.youkuaiyun.com/hhhh63/article/details/7652696
最近做的东西要用C++来操作office word,生成一个表格,找资料找了好久才弄明白,记一下~~
1.建一个基于对话框的MFC,可以参考( http://blog.youkuaiyun.com/hhhh63/article/details/7652696)
2.添加类库 C:\Program Files\Microsoft Office\OFFICE11\msword.olb ;
3. 注释掉新生成的.h文件里边有//#import "C:\\Program Files\\Microsoft Office\\OFFICE11\\MSWORD.OLB" no_namespace
并添加代码#include<afxdisp.h>且放在所有Include的最前面
4.然后就可以用相应函数操作word了,我是添加了一个button,添加点击事件,操作word.
(以下代码来自http://bbs.youkuaiyun.com/topics/300141389)
void CMFCApplication2Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
//CApplication TestWordDoc; //定义一个WORD的应用对象
CApplication TestWordDoc;
if(!TestWordDoc.CreateDispatch(_T("Word.Application"))) //启动WORD
{
AfxMessageBox(_T("居然你连OFFICE都没有安装吗?"));
return;
}
AfxMessageBox(_T("WORD 已经运行启动啦,你可以用Ctrl+Alt+Del查看"));
TestWordDoc.put_Visible(VARIANT_TRUE); //设置word可见,对应office2003的msword.olb
//TestWordDoc.SetVisible(TRUE); //设置WORD可见。对应老版本msword.olb
//当然,如果你想要悄悄地调用WORD的功能,则注释掉这条语句
AfxMessageBox(_T("看好了,就要新建一个空白文档了"));
//通过WORD宏可以知道,由于要使用Documents,于是我们定义一个并从TestWordDoc中取得
CDocuments docs=TestWordDoc.get_Documents();
//准备调用Documents::Add函数了,需要定义4个参数。
//从WORD宏可以看出来3个参数的类型为:
//Template字符,NewTemplate布尔,DocumentType数值
//但Add函数还需要一个参数是Visible,傻子也能看出来这个值表示是否显示出新文档
//并且可以给默认值(VT_EMPTY)
CComVariant Template(_T("")); //为了简单,没有使用WORD的文档模板
CComVariant NewTemplate(false),DocumentType(0),Visible;
docs.Add(&Template,&NewTemplate,&DocumentType,&Visible);
AfxMessageBox(_T("下面,程序要向WORD发送字符啦"));
//通过WORD宏可以知道,由于要使用Selection,于是我们定义一个并从app中取得
//Selection表示输入点,即光标闪烁的那个地方
CSelection sel=TestWordDoc.get_Selection();
//调用函数Selection::TypeText 向WORD发送字符
sel.TypeText(_T("HELLO\r\n大家好呀"));
sel.TypeParagraph();
sel.TypeParagraph();
sel.TypeText(TEXT("lasdflj"));
AfxMessageBox(_T("WORD准备要退出啦"));
//以下一段是不用#include <AtlBase.h>时退出要做的。如果用#include <AtlBase.h>就不用了。
//VARIANT SaveChanges,OriginalFormat,RouteDocument; //定义调用QUIT时使用的参数
//SaveChanges.vt=VT_BOOL; //设置退出WORD时候的保存参数
//SaveChanges.boolVal=VARIANT_FALSE; //为不保存任何文档,模板及设置
//::VariantInit(&OriginalFormat); //清空变量
//RouteDocument.vt=VT_EMPTY; //清空变量的另一种方法
//准备调用_Application::Quit函数了,需要定义3个参数。
//但是,这次我们使用CComVariant,这是一个模板类。
//在定义的时候直接调用带参数的构造函数,比VARIANT使用简单多了吧
CComVariant SaveChanges(false),OriginalFormat,RouteDocument;
//使用 CComVariant 的不带参数的构造函数,默认就是使用VT_EMPTY,设置为空类型
//另外,除了CComVariant,你还可以使用COleVariant和_variant_t,但我个人最喜欢前者
//调用Quit退出WORD应用程序。当然不调用也可以,那样的话WORD还在运行着那
TestWordDoc.Quit(&SaveChanges,&OriginalFormat,&RouteDocument);
TestWordDoc.ReleaseDispatch(); //释放对象指针。切记,必须调用
}
整个工程已上传http://download.youkuaiyun.com/detail/anqier0468/9405961