我试过用VC++6.0操作word,可以成功;但用VC2005时却会出现一系列的问题,研究了好久,但还是没解决,有哪位大哥用VC2005操作过word,发个例子给我,谢谢啦!  [email protected]

解决方案 »

  1.   

    我做过的也只是VC6写入WORD,没搞过VC2005的
      

  2.   

    前几天刚讨论过一个word的问题,代码就直接拿过来用了。vs2008测试通过,2005应该也没问题为了简单起见,我没调用
    app-》Quit#import   "C:\Program Files\Common Files\Microsoft Shared\OFFICE12\MSO.DLL"   
    #import   "C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB"   
    #import   "D:\Microsoft Office\Office12\msword.olb"  rename("FindText","_FindText"), rename("ExitWindows","_ExitWindows")   
    using namespace Word;// 不要加 using namespace Office;void Test( void )
    {
    AfxOleInit();
        //////////////////////////////////////////////////////////////////////////
        COleVariant vTrue((short)TRUE),vFalse((short)FALSE),vOpt((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
        _ApplicationPtr app;    app.CreateInstance("Word.Application");
        
        app->ShowMe();
    //    app->Activate();    Word::DocumentsPtr spDocs;
        Word::_DocumentPtr _spdoc;
        Word::SelectionPtr spsel;
        TablesPtr theTables;
        RangePtr wordRange;
        TablePtr curTable;    
        CComVariant defaultBehavior(1),AutoFitBehavior(1);
        ParagraphsPtr   oParagraphs;
        ShapesPtr shapes;
        VARIANT *anchor;    RowPtr oRow;    spDocs = app->GetDocuments();//获得文档对象
        _spdoc = spDocs->Add(vOpt,vOpt,vOpt,vOpt);    spsel = app->GetSelection();
        spsel->TypeText("one");
        oParagraphs=spsel->GetParagraphs();
    //    oParagraphs->put_Alignment(1);//1=wdAlignParagraphCenter    spsel->TypeParagraph();//相当于换行
        spsel->TypeText("two");    activedoc = app->GetActiveDocument();    shapes=activedoc->GetShapes();    //shapes= spsel->GetShapeRange();    shapes->AddShape(Office::msoShapeRectangle,50,50,50,30);  // 这里指定 Office namespaceactivedoc->SaveAs(COleVariant(_T("c:\\doc1.doc")),COleVariant((short)0),vFalse,COleVariant(_T("")),vTrue,COleVariant(_T("")),vFalse,vFalse,vFalse,vFalse,vFalse,vOpt,vOpt,vOpt,vOpt,vOpt);}
      

  3.   

    VC6写入WORD,与VC2005基本没区别
      

  4.   

    有可能编码的问题,vc6默认用的是Multibyte,vc2005默认用的是不是Unicode?
      

  5.   

    vc6和vs2005操作word应该区别不大,主要是工程字符集的变化,但是不同word版本之间,倒是import comd库,以及生成的类等有一些名称变化,函数可能也有一些变化,需要改一下
      

  6.   

    2楼,其中activedoc是什么,没定义啊
      

  7.   

    定义是这个
    _DocumentPtr activedoc; //activedoc = app->GetActiveDocument(); 
      

  8.   

    谢谢你的回答!用你的方法确实可以。
    不过我有个疑问:
    #import "D:\Microsoft Office\Microsoft Office\Office12\msword.olb"  rename("FindText","_FindText"), rename("ExitWindows","_ExitWindows")
    这里D:\Microsoft Office是指Office安装路径吧,但是如果我把程序拷到其他电脑,且这台电脑的Office不是这个路径安装的,该怎么办呢?
      

  9.   

    没关系的
    #import 是把 office 的类型库信息导进你的程序里,让你的程序能识别 office 接口,同时你的程序也知道了office组件的 CLSID.
    在目标机器上,你的程序是通过 CLSID 创建 office 对象。目标系统会通过 CLSID 查找注册表找到 office 的安装路径的
      

  10.   

    你好,我想在word中添加一个BMP图片(在硬盘上),该如何操作呢?麻烦你了!
      

  11.   

    通用的思路是这样:
    你在 word 里面录制宏
    然后手动插入图片
    停止宏录制,查看一下宏的代码
    按照宏代码的逻辑,自己写vc 代码。
      

  12.   

     
    marrco2005\很厉害!!!