VS2012下C++操作word(整理)

参考:http://bbs.csdn.net/topics/300141389

            http://blog.csdn.net/hhhh63/article/details/7652696

            最近做的东西要用C++来操作office word,生成一个表格,找资料找了好久才弄明白,记一下~~

            1.建一个基于对话框的MFC,可以参考( http://blog.csdn.net/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.csdn.net/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.csdn.net/detail/anqier0468/9405961




      

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值