【C++簡單寫Word】(四) 整理及反思

在學習用代碼操作Word的時候真是遇到了許許多多的困難啊,不過好歹一一克服了。
我要將我這段時間的所學整理成筆記。
在如何初始化Word或者Excel上,網絡上有很多詳細的教程我就不在囉嗦了。

不過如果無法初始化Application時,問題一般出在忘記添加

    if (!AfxOleInit())
    {
        AfxMessageBox(_T("初始化OLE出錯"));
        return;
    }

無論是寫VBA或者寫調用的時候有許許多多的函數,我們並不太清楚這個函數的作用,這個時候我們可以參考MSDN或者看WPS表格功能樹


傳遞的參數有兩種寫法

一
    CComVariant Template(_T(""));
    CComVariant NewTemplate(false);
    CComVariant DocumentType(0);
    CComVariant的構造參數會自動識別傳遞類型
    傳遞該引用即可,如 &Template
二
    COleVariant((short)10);
    COleVariant(_T(""));
    使用這種方法時需要加入該類型

在寫VBA時有許多可選參數,而在代碼部分可選參數也是必須填上的,這個時候可以使用

COleVariant VarOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);  // 默認參數

向傳遞VarOpt這個值即可,在我們不太清楚函數要調用的是什麼參數的時候也可以傳遞該參數。


有些參數需要特殊化處理,比如

LPDISPATCH AddOLEObject(VARIANT * ClassType, VARIANT * FileName, VARIANT * LinkToFile, VARIANT * DisplayAsIcon, VARIANT * IconFileName, VARIANT * IconIndex, VARIANT * IconLabel, VARIANT * Range)
該函數的最後一項是要求傳入一個Range的指針進去,如果我們希望當我們輸出時是按照先輸出一段文字,再輸出表格或者圖表的話,Range就需要特殊化處理。
Range.SetRange(Selection.get_End(), Selection.get_End());
CComVariant range(Range);
最後傳遞&range

當我們使用Document.SaveAs(VARIANT * FileName,……)該函數保存的時候保存的文件格式只能是.doc,如果是.ocx程序就會崩潰,這個我不太理解是爲什麼,如果有知道的希望能告訴我下。


如果要在寫Word的時候輸出圖表,那麼久需要加入Excel的支持文件,就是把生成圖表之後的指針交給Excel中的workbook,這樣就可以直接寫數據了

    Range.SetRange(Selection.get_End(), Selection.get_End());
    CComVariant range(Range);
    Shape = Shapes.AddOLEObject(COleVariant(L"Excel.Chart"), VarOpt, VarOpt, VarOpt, VarOpt, VarOpt, VarOpt, &range);
    OLEFormat = Shape.get_OLEFormat();
    CWorkbook workbook = OLEFormat.get_Object();

大概就是這些了,如果有什麼問題歡迎大家和我討論。如果哪塊有問題,我也希望大家能幫我指正出來,我會一一改正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章