VC++操作Word

來源:互聯網
上載者:User

工具: vc++6.0 。

關鍵字: c++ , MFC 。

要求:系統安裝 MS OFFICE 2003 。

過程:

準備工作:

1.       建立一個 MFC(EXE) 工程: MFC AppWizard ( exe ),工程為對話方塊形式(測試用)。

2.       在 CLASS VIEW 頁面建立一個類:類名為: CWordOffice ,類的類型為: Class type : Generic Class 。

3.       在工具列中找到 view -> class wizard -> Automation -> add class -> from a tye library ,然後選中 offfice 安裝的目錄中的 MSWORD.OLB ,然後選中所有列出的類名,點 OK 完成。

4. 最後,這裡給出一個操作word的最簡單的程式源碼wordApp.rar(XP + VC6 + Word2010)

 

 

準備工作完成,下面貼出相關部分的代碼:

CWordOffice.h 中的手動寫入的代碼如下(自動產生的沒有加入): #include "atlbase.h"#include "msword.h"class CWordOffice {private:    _Application m_wdApp;    Documents m_wdDocs;    _Document m_wdDoc;    Selection m_wdSel;    Range     m_wdRange;    InlineShapes m_wdInlineShapes;     InlineShape m_wdInlineShape;public:    CWordOffice();    virtual ~CWordOffice();public:    //操作    //**********************建立新文檔*******************************************    BOOL CreateApp();                    //建立一個新的WORD應用程式    BOOL CreateDocuments();                //建立一個新的Word文檔集合    BOOL CreateDocument();                //建立一個新的Word文檔    BOOL Create();                        //建立新的WORD應用程式並建立一個新的文檔    void ShowApp();                        //顯示WORD文檔    void HideApp();                        //隱藏word文檔    //**********************開啟文檔*********************************************    BOOL OpenDocument(CString fileName);//開啟已經存在的文檔。    BOOL Open(CString fileName);        //建立新的WORD應用程式並開啟一個已經存在的文檔。    BOOL SetActiveDocument(short i);    //設定當前啟用的文檔。    //**********************儲存文檔*********************************************    BOOL SaveDocument();                //文檔是以開啟形式,儲存。    BOOL SaveDocumentAs(CString fileName);//文檔以建立形式,儲存。    BOOL CloseDocument();    void CloseApp();     //**********************文本書寫操作*****************************************    void WriteText(CString szText);        //當前游標處寫文本    void WriteNewLineText(CString szText, int nLineCount = 1); //換N行寫字    void WriteEndLine(CString szText);    //文檔結尾處寫文本    void WholeStory();                    //全選文檔內容    void Copy();                        //複製常值內容到剪貼簿    void InsertFile(CString fileName);    //將本地的檔案全部內容寫入到當前文檔的游標處。        //**********************圖片插入操作*****************************************    void InsertShapes(CString fileName);//在當前游標的位置插入圖片        //**********************超連結插入操作*****************************************    void InsertHyperlink(CString fileLink);//超級連結地址,可以是相對路徑。};CWordOffice.cpp中的手寫代碼如下:CWordOffice::CWordOffice(){}CWordOffice::~CWordOffice(){    COleVariant vTrue((short)TRUE),                    vFalse((short)FALSE),                vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);    //m_wdDoc.Save();    m_wdApp.Quit(vFalse,    // SaveChanges.             vTrue,            // OriginalFormat.             vFalse            // RouteDocument.             );    //釋放記憶體申請資源    m_wdInlineShape.ReleaseDispatch();    m_wdInlineShapes.ReleaseDispatch();    //m_wdTb.ReleaseDispatch();    m_wdRange.ReleaseDispatch();    m_wdSel.ReleaseDispatch();    //m_wdFt.ReleaseDispatch();    m_wdDoc.ReleaseDispatch();    m_wdDocs.ReleaseDispatch();    m_wdApp.ReleaseDispatch();}//操作BOOL CWordOffice::CreateApp(){    if (FALSE == m_wdApp.CreateDispatch("Word.Application"))    {        AfxMessageBox("Application建立失敗,請確保安裝了word 2000或以上版本!", MB_OK|MB_ICONWARNING);        return FALSE;    }    return TRUE;}BOOL CWordOffice::CreateDocuments(){    if (FALSE == CreateApp())     {        return FALSE;    }    m_wdDocs.AttachDispatch(m_wdApp.GetDocuments());    if (!m_wdDocs.m_lpDispatch)     {        AfxMessageBox("Documents建立失敗!", MB_OK|MB_ICONWARNING);        return FALSE;    }    return TRUE;}BOOL CWordOffice::CreateDocument(){    if (!m_wdDocs.m_lpDispatch)     {        AfxMessageBox("Documents為空白!", MB_OK|MB_ICONWARNING);        return FALSE;    }    COleVariant varTrue(short(1),VT_BOOL),vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);    CComVariant Template(_T(""));    //沒有使用WORD的文件範本    CComVariant NewTemplate(false),DocumentType(0),Visible;    m_wdDocs.Add(&Template,&NewTemplate,&DocumentType,&Visible);        //得到document變數    m_wdDoc = m_wdApp.GetActiveDocument();    if (!m_wdDoc.m_lpDispatch)     {        AfxMessageBox("Document擷取失敗!", MB_OK|MB_ICONWARNING);        return FALSE;    }    //得到selection變數    m_wdSel = m_wdApp.GetSelection();    if (!m_wdSel.m_lpDispatch)     {        AfxMessageBox("Select擷取失敗!", MB_OK|MB_ICONWARNING);        return FALSE;    }    //得到Range變數    m_wdRange = m_wdDoc.Range(vOptional,vOptional);    if(!m_wdRange.m_lpDispatch)    {        AfxMessageBox("Range擷取失敗!", MB_OK|MB_ICONWARNING);        return FALSE;    }    return TRUE;}BOOL CWordOffice::Create(){    if (FALSE == CreateDocuments())     {        return FALSE;    }    return CreateDocument();}void CWordOffice::ShowApp(){    m_wdApp.SetVisible(TRUE);}void CWordOffice::HideApp(){    m_wdApp.SetVisible(FALSE);}BOOL CWordOffice::OpenDocument(CString fileName){    if (!m_wdDocs.m_lpDispatch)     {        AfxMessageBox("Documents為空白!", MB_OK|MB_ICONWARNING);        return FALSE;    }    COleVariant vTrue((short)TRUE),                    vFalse((short)FALSE),                vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR),                vZ((short)0);    COleVariant     vFileName(_T(fileName));        //得到document變數    m_wdDoc.AttachDispatch(m_wdDocs.Open(                                vFileName,        // FileName                                vTrue,            // Confirm Conversion.                                vFalse,            // ReadOnly.                                vFalse,            // AddToRecentFiles.                                vOptional,        // PasswordDocument.                                vOptional,        // PasswordTemplate.                                vOptional,        // Revert.                                vOptional,        // WritePasswordDocument.                                vOptional,        // WritePasswordTemplate.                                vOptional,        // Format. // Last argument for Word 97                                vOptional,        // Encoding // New for Word 2000/2002                                vOptional,        // Visible                                //如下4個是word2003需要的參數。本版本是word2000。                                vOptional,    // OpenAndRepair                                vZ,            // DocumentDirection wdDocumentDirection LeftToRight                                vOptional,    // NoEncodingDialog                                vOptional                                                                )                // Close Open parameters                            );                    // Close AttachDispatch        if (!m_wdDoc.m_lpDispatch)     {        AfxMessageBox("Document擷取失敗!", MB_OK|MB_ICONWARNING);        return FALSE;    }    //得到selection變數    m_wdSel = m_wdApp.GetSelection();    if (!m_wdSel.m_lpDispatch)     {        AfxMessageBox("Select擷取失敗!", MB_OK|MB_ICONWARNING);        return FALSE;    }    //得到全部DOC的Range變數    m_wdRange = m_wdDoc.Range(vOptional,vOptional);    if(!m_wdRange.m_lpDispatch)    {        AfxMessageBox("Range擷取失敗!", MB_OK|MB_ICONWARNING);        return FALSE;    }    return TRUE;}BOOL CWordOffice::Open(CString fileName){    if (FALSE == CreateDocuments())     {        return FALSE;    }    return OpenDocument(fileName);}BOOL CWordOffice::SetActiveDocument(short i){    COleVariant     vIndex(_T(i)),vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);    m_wdDoc.AttachDispatch(m_wdDocs.Item(vIndex));    m_wdDoc.Activate();    if (!m_wdDoc.m_lpDispatch)     {        AfxMessageBox("Document擷取失敗!", MB_OK|MB_ICONWARNING);        return FALSE;    }    //得到selection變數    m_wdSel = m_wdApp.GetSelection();    if (!m_wdSel.m_lpDispatch)     {        AfxMessageBox("Select擷取失敗!", MB_OK|MB_ICONWARNING);        return FALSE;    }    //得到全部DOC的Range變數    m_wdRange = m_wdDoc.Range(vOptional,vOptional);    if(!m_wdRange.m_lpDispatch)    {        AfxMessageBox("Range擷取失敗!", MB_OK|MB_ICONWARNING);        return FALSE;    }    HideApp();    return TRUE;}BOOL CWordOffice::SaveDocument(){    if (!m_wdDoc.m_lpDispatch)     {        AfxMessageBox("Document擷取失敗!", MB_OK|MB_ICONWARNING);        return FALSE;    }    m_wdDoc.Save();    return TRUE;}BOOL CWordOffice::SaveDocumentAs(CString fileName){    if (!m_wdDoc.m_lpDispatch)     {        AfxMessageBox("Document擷取失敗!", MB_OK|MB_ICONWARNING);        return FALSE;    }    COleVariant vTrue((short)TRUE),                    vFalse((short)FALSE),                vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);    COleVariant vFileName(_T(fileName));    m_wdDoc.SaveAs(                vFileName,    //VARIANT* FileName                vOptional,    //VARIANT* FileFormat                vOptional,    //VARIANT* LockComments                vOptional,    //VARIANT* Password                vOptional,    //VARIANT* AddToRecentFiles                vOptional,    //VARIANT* WritePassword                vOptional,    //VARIANT* ReadOnlyRecommended                vOptional,    //VARIANT* EmbedTrueTypeFonts                vOptional,    //VARIANT* SaveNativePictureFormat                vOptional,    //VARIANT* SaveFormsData                vOptional,    //VARIANT* SaveAsAOCELetter                vOptional,                vOptional,                vOptional,                vOptional,                vOptional                );    return    TRUE;}BOOL CWordOffice::CloseDocument(){    COleVariant vTrue((short)TRUE),                    vFalse((short)FALSE),                vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);    m_wdDoc.Close(vFalse,    // SaveChanges.             vTrue,            // OriginalFormat.             vFalse            // RouteDocument.             );    m_wdDoc.AttachDispatch(m_wdApp.GetActiveDocument());    if (!m_wdDoc.m_lpDispatch)     {        AfxMessageBox("Document擷取失敗!", MB_OK|MB_ICONWARNING);        return FALSE;    }    //得到selection變數    m_wdSel = m_wdApp.GetSelection();    if (!m_wdSel.m_lpDispatch)     {        AfxMessageBox("Select擷取失敗!", MB_OK|MB_ICONWARNING);        return FALSE;    }    //得到全部DOC的Range變數    m_wdRange = m_wdDoc.Range(vOptional,vOptional);    if(!m_wdRange.m_lpDispatch)    {        AfxMessageBox("Range擷取失敗!", MB_OK|MB_ICONWARNING);        return FALSE;    }    return TRUE;}void CWordOffice::CloseApp(){    COleVariant vTrue((short)TRUE),                    vFalse((short)FALSE),                vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);    m_wdDoc.Save();    m_wdApp.Quit(vFalse,    // SaveChanges.             vTrue,            // OriginalFormat.             vFalse            // RouteDocument.             );    //釋放記憶體申請資源    m_wdInlineShape.ReleaseDispatch();    m_wdInlineShapes.ReleaseDispatch();    //m_wdTb.ReleaseDispatch();    m_wdRange.ReleaseDispatch();    m_wdSel.ReleaseDispatch();    //m_wdFt.ReleaseDispatch();    m_wdDoc.ReleaseDispatch();    m_wdDocs.ReleaseDispatch();    m_wdApp.ReleaseDispatch();}void CWordOffice::WriteText(CString szText){    m_wdSel.TypeText(szText);}void CWordOffice::WriteNewLineText(CString szText, int nLineCount /* = 1 */){    int i;    if (nLineCount <= 0)    {        nLineCount = 0;    }    for (i = 0; i < nLineCount; i++)    {        m_wdSel.TypeParagraph();    }    WriteText(szText);}void CWordOffice::WriteEndLine(CString szText){    m_wdRange.InsertAfter(szText);}void CWordOffice::WholeStory(){    m_wdRange.WholeStory();}void CWordOffice::Copy(){    m_wdRange.CopyAsPicture();}void CWordOffice::InsertFile(CString fileName){    COleVariant     vFileName(fileName),                 vTrue((short)TRUE),                 vFalse((short)FALSE),                 vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR),                 vNull(_T(""));    /*    void InsertFile(LPCTSTR FileName, VARIANT* Range, VARIANT* ConfirmConversions, VARIANT* Link, VARIANT* Attachment);    */    m_wdSel.InsertFile(                    fileName,                    vNull,                    vFalse,                    vFalse,                    vFalse                    );}void CWordOffice::InsertShapes(CString fileName){    COleVariant vTrue((short)TRUE),                    vFalse((short)FALSE),                vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);    m_wdInlineShapes=m_wdSel.GetInlineShapes();    m_wdInlineShape=m_wdInlineShapes.AddPicture(fileName,vFalse,vTrue,vOptional);}void CWordOffice::InsertHyperlink(CString fileLink){    COleVariant     vAddress(_T(fileLink)),vSubAddress(_T(""));    Range aRange = m_wdSel.GetRange();    Hyperlinks vHyperlinks(aRange.GetHyperlinks());    vHyperlinks.Add(                    aRange,            //Object,必需。轉換為超連結的文本或圖形。                    vAddress,         //Variant 類型,可選。指定的連結的地址。此地址可以是電子郵件地址、網際網路位址或檔案名稱。請注意,Microsoft Word 不檢查該地址的正確性。                    vSubAddress,     //Variant 類型,可選。目標檔案內的位置名,如書籤、已命名的地區或投影片編號。                    vAddress,         //Variant 類型,可選。當滑鼠指標放在指定的超連結上時顯示的可用作“工具提示”的文本。預設值為 Address。                    vAddress,         //Variant 類型,可選。指定的超連結的顯示文本。此參數的值將取代由 Anchor 指定的文本或圖形。                    vSubAddress        //Variant 類型,可選。要在其中開啟指定的超連結的架構或視窗的名字。                    );     vHyperlinks.ReleaseDispatch();}測試部分代碼如下:需要在對話方塊中添加一個按鈕,按鈕的事件方法內添加如下代碼:void CWordOperateDlg::OnButtonWord() {     AfxEnableControlContainer();        AfxOleInit();     CWordOffice wd;     wd.CreateDocuments();     wd.OpenDocument("d:\\a.doc");     wd.ShowApp(); //顯示word}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.