利用VC操作WORD的用法

        本来是不愿意写东西的我觉的把文档存到机器上时常会不小心弄坏所以干脆放到BLOG上,又可以方便自己以后查找,8错!如果可以顺带帮助到别人就更是我的荣幸了!
        本文参考了很多大虾们的文档,如VCK上的杨老师、BLOG-Yingkou,并非有意剽窃!
        废话少说,开始吧!
        我的机器是IBM R51E,OS为XP Pro,编译器VC6.0,OFF2003。
        Let's GO
              Microsoft 的 Office 产品中,都提供了OLE Automation 自动化程序的接口。VC对WORD操作可以通过ODBC或OLE,现在我们主要采用OLE,OLE是对象链接。首先要VC->VIEW->CLASSVIEW->ADDCLASS->From a typelibrary导入OLB文件(在OFFICE安装目录中),我用的是OFF2003所以包含库MSWORD.OLB,因为采用了OLE技术,所以一般在Initinstance中要对OLE进行初始化初始化COM。方法一,找到App的InitInstance()函数,在其中添加 AfxOleInit()函数的调用;方法二,在需要调用COM功能的地方 CoInitialize(NULL),调用完  CoUninitialize()。本人比较喜欢方法一,因为不用释放,像我这样的菜鸟经常内存泄露,所以基本上有懒的方法绝不用复杂的:(。
 
二层次关系      先看一下吧 我个人理解是大盆套小盆,比较粗浅。
     Application(WORD 为例,只列出一部分)
  Documents(所有的文档)
        Document(一个文档)
            ......
  Templates(所有模板)
        Template(一个模板)
            ......
  Windows(所有窗口)
        Window
        Selection
        View
  Selection(编辑对象)
        Font
        Style
        Range

三实现技巧
    在书写调用 Office 函数的过程中,最困难的是确定函数的参数,一般情况下,参数都是 VARIANT 类型的变量指针。那么到底具体我们应该怎么写那?推荐两个方法,其一是阅读有关 VBA 的书籍;其二,是使用 Office 中自带的“宏”功能。强烈推荐大家使用第二个方法,把你要完成的功能,在 Office 的操作环境中,用宏录制下来,然后观察分析录制后的函数和参数,就可以在 VC 中使用了。由于我在最近写了一个输出WORD的DLL,所以了解了一些,深刻的体会到了录制宏的好处,里面的函数参数多的烦死人了,就采用录制宏的办法,杨老师用MSGBOX查看的参数信息,非常巧妙。我发现在宏上右键有个快速参数有时候也可以查看到参数信息,也挺好用大家自己发挥吧!
          ActiveDocument.SaveAs FileName:="Hello.doc", FileFormat:=wdFormatDocument _
        , LockComments:=False, Password:="", AddToRecentFiles:=True, _
        WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _
         SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= _
        False

   以上是在 Word 中录制的一个保存文件的宏,而在 VC 中对应的函数原型为

      void _Document::SaveAs(VARIANT* FileName, VARIANT* FileFormat, VARIANT* LockComments,
       VARIANT* Password, VARIANT* AddToRecentFiles, VARIANT* WritePassword,
       VARIANT* ReadOnlyRecommended, VARIANT* EmbedTrueTypeFonts, VARIANT* SaveNativePictureFormat,
         VARIANT* SaveFormsData, VARIANT* SaveAsAOCELetter)

   分析对照后,我们就能看出,参数 FileName 是字符串 VARIANT(VT_BSTR),参数 LockComments 是布尔
   VARIANT(VT_BOOL),等等。参数 FileFormat := wdFormatDocument 是什么类型那?
   其实这是一个表示保存的时候指定文件类型的常量,而且显然是 DWORD 类型VARIANT(VT_I4)。
   那么常量的数值又是多少那?很简单,写一个宏,调用函数 MsgBox 显示一下不就都知道啦?!

四 制作
         我的这个DLL包含创建文档、贴图、文字输出、创建表格等等,还要根据用户一些参数来设置不同的信息条目。
    _Application app;  //文档类变量
    Documents docs;    //所有文档
    _Document doc;     //一个文档
    Selection sel;
    InlineShapes shapes;

    /启动WORD
    AfxOleInit();
    if(!app.CreateDispatch(_T("Word.Application")))
    {
        AfxMessageBox("请先安装Word应用程序!");
        return;
    }       
    app.SetVisible(FALSE);     //不可见
   
    GetModulePath(path);
    strcur.Format("%s",path);   //当前程序所在路径
    CString strtmp;
    strtmp=strcur+"//PrWd.dot";
    //创建文档
    docs = app.GetDocuments();   //将Documents类对象m_Docs和Idispatch接口关联起来
    CComVariant tpl(_T(strtmp/*"E://word//project//WordInput//Debug//PrWd.dot"*/));          //新建空文档
    CComVariant    Visble,DocType(0);
    CComVariant NewTemplate(false);
    docs.Add(&tpl,&NewTemplate,&DocType,&Visble);
    app.SetVisible(TRUE);          //可见
               
    doc = app.GetActiveDocument();
    sel = app.GetSelection();

待虚……
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值