• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    在VC中調用WORD(顯示,修改,存盤,運行宏)

    發布: 2007-7-14 21:11 | 作者: 佚名    | 來源: 網絡轉載     | 查看: 34次 | 進入軟件測試論壇討論

    領測軟件測試網 ZHENG017    原作  

    (1)使用AppWizard創建一個新的MFC AppWizard(EXE)工程,命名為"office"  
    (2)選擇單文檔視圖(SDI)結構,在第3步中需要選中Container,以提供容器支持,并且選中active document container 其它都為默認

    (3)在View菜單中,選ClassWizard,選Automation選項卡,選Add Class,選擇From a TypeLibrary, 在Office目錄中選中Microsoft Word 97/2000 類型庫Word8.olb或Word9.olb,選中application,document,_document。單擊ok

    (4)給COfficeCntrItem添加一方法。GetIDispatch()

    其源碼如下:

      ASSERT_VALID(this);  
    ASSERT(m_lpObject != NULL);   
    LPUNKNOWN lpUnk = m_lpObject;   
    Run();   
    LPOLELINK lpOleLink = NULL;  
    if (m_lpObject->QueryInterface(IID_IOleLink, (LPVOID FAR*)&lpOleLink) == NOERROR)   
    {   
      ASSERT(lpOleLink != NULL);   
      lpUnk = NULL;       
      if (lpOleLink->GetBoundSource(&lpUnk) != NOERROR)    
      {    
       TRACE0("Warning: Link is not connected!\n");    
       lpOleLink->Release();    
       return NULL;    
      }   
      ASSERT(lpUnk != NULL);   
    }    
    LPDISPATCH lpDispatch = NULL;  
    if (lpUnk->QueryInterface(IID_IDispatch, (LPVOID FAR*)&lpDispatch)!=NOERROR)   
    {
        TRACE0("Warning: does not support IDispatch!\n");   
      return NULL;
      
    }
    ASSERT(lpDispatch != NULL);  
    return lpDispatch;
    (5)。在officeView.h添加#include "msword8.h"

    (6)。修改void COfficeView::OnInsertObject(),源碼如下:

    BeginWaitCursor();

    COfficeCntrItem* pItem = NULL;
    TRY
    {
      // Create new item connected to this document.
      COfficeDoc* pDoc = GetDocument();
      ASSERT_VALID(pDoc);
      pItem = new COfficeCntrItem(pDoc);
      ASSERT_VALID(pItem);

      // Initialize the item from the dialog data.
    /* if (!dlg.CreateItem(pItem))
       AfxThrowMemoryException();  // any exception will do
      ASSERT_VALID(pItem);*/
       CLSID clsid; //
      if(FAILED(::CLSIDFromProgID(L"Word.document",&clsid)))
       AfxThrowMemoryException();
      
      if(!pItem->CreateNewItem(clsid))
      /*if(!pItem->CreateFromFile (filename,clsid)) */
       AfxThrowMemoryException();
      ASSERT_VALID(pItem);
      
      pItem->Activate (OLEIVERB_SHOW,this);
      


      ASSERT_VALID(pItem);
             m_pSelection = pItem;   // set selection to last inserted item
      pDoc->UpdateAllViews(NULL);
      // As an arbitrary user interface design, this sets the selection
      //  to the last item inserted.

      // TODO: reimplement selection as appropriate for your application

      m_pSelection = pItem;   // set selection to last inserted item
      pDoc->UpdateAllViews(NULL);
    }
    CATCH(CException, e)
    {
      if (pItem != NULL)
      {
       ASSERT_VALID(pItem);
       pItem->Delete();
      }
      AfxMessageBox(IDP_FAILED_TO_CREATE);
    }
    END_CATCH

    EndWaitCursor();

    (7)重載ID—FILE—SAVE,

    void COfficeView::OnFileSave()
    {
    // TODO: Add your command handler code here
      TRY{
         LPDISPATCH lpDisp;
      
      lpDisp = m_pSelection->GetIDispatch();

        Documents docs;
      
      _Application app;
      
      _Document mydoc;
      Documents my;

      mydoc.AttachDispatch (lpDisp,TRUE);
      app=mydoc.GetApplication ();
        /*   app.Run ("Macro3");*/
         mydoc.Activate ();
      BOOL password=mydoc.GetHasPassword ();
      mydoc.SetPassword ("love");
      password=mydoc.GetHasPassword ();  
      COleVariant vFalse((short)FALSE);
      mydoc.SaveAs (COleVariant("c:\\love.doc"),vFalse,vFalse, COleVariant(""),vFalse,
       COleVariant(""),vFalse,vFalse,vFalse,vFalse,vFalse);
      
    }
    CATCH(CException, e)
    {
            }
    END_CATCH
    }

    bulid,click insert object,and edit ,and save.maybe run macro.

    自己辛苦了很久加上別人的經驗總算做出來。:)

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>