• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Visual C++ 中操縱 MS Word 123

            使用VC編程來(lái)操縱Office。你可以實(shí)現(xiàn)諸如:Word文件打印、傳送數(shù)據(jù)到Word文檔、發(fā)送E-MAIL、自動(dòng)產(chǎn)生表格、Excel數(shù)據(jù)統(tǒng)計(jì)、圓餅圖,直方圖顯示、自動(dòng)報(bào)表生成、播放幻燈、doc,txt,HTML,rtf文件轉(zhuǎn)換、中文簡(jiǎn)繁體轉(zhuǎn)換、拼音或筆畫(huà)排序......只要是Office能夠?qū)崿F(xiàn)的功能,都可以在你寫(xiě)的程序中調(diào)用。仔細(xì)閱讀下面的說(shuō)明,并下載源文件進(jìn)行參考,你就可以一步一步地掌握這個(gè)技術(shù)。祝朋友們學(xué)習(xí)快樂(lè)。

            一、概念
              Microsoft 的 Office 產(chǎn)品中,都提供了OLE Automation 自動(dòng)化程序的接口。如果你使用VB,VBA 和 Script 腳本調(diào)用 Office 功能的話(huà),其實(shí)比使用 VC 調(diào)用要簡(jiǎn)單的多。比如在 WORD 中,調(diào)出菜單“工具(T)\宏(M)\錄制新宏(R)”,這時(shí)候它開(kāi)始記錄你在 WORD 中任何菜單和鍵盤(pán)的操作,把你的操作過(guò)程保存起來(lái),以便再次重復(fù)調(diào)用。而保存這些操作的記錄,其實(shí)就是使用了 VBA 程序(Visual Basic for Application)。而我們下面要實(shí)現(xiàn)的功能,也同樣要參考 VBA 的方法。

            二、結(jié)構(gòu)層次
              為了更有邏輯,更有層次地操作 Office,Microsoft 把應(yīng)用(Application)按邏輯功能劃分為如下的樹(shù)形結(jié)構(gòu)

            Application(WORD 為例,只列出一部分)
              Documents(所有的文檔)
                    Document(一個(gè)文檔)
                        ......
              Templates(所有模板)
                    Template(一個(gè)模板)
                        ......
              Windows(所有窗口)
                    Window
                    Selection
                    View
              Selection(編輯對(duì)象)
                    Font
                    Style
                    Range
                    ......
              ......

            只有了解了邏輯層次,我們才能正確的操縱 Office。舉例來(lái)講,如果給出一個(gè)VBScript語(yǔ)句是:
                  application.ActiveDocument.SaveAs "c:\abc.doc"
            那么,我們就知道了,這個(gè)操作的過(guò)程是:第一步,取得Application;第二步,從Application中取得ActiveDocument;第三步,調(diào)用 Document 的函數(shù) SaveAs,參數(shù)是一個(gè)字符串型的文件名。

            三、基本步驟
            (1)創(chuàng)建(或打開(kāi)已有的)一個(gè) MFC 的程序工程
            (2)Ctrl+W 執(zhí)行 ClassWizard(本文按照 VC6 操作,例子程序也是在VC6 下編寫(xiě)測(cè)試的)
            (3)Add Class...\From a type Library... 在 Office 目錄中,找到你想使用的類(lèi)型庫(kù)。(我使用的是 Office2000,其Word 的類(lèi)型庫(kù)文件,保存在 C:\Program Files\Microsoft Office\Office\MSWORD9.OLB)根據(jù)你 Office 的版本,可以使用下表列出的類(lèi)型庫(kù)文件

            Office 版本和類(lèi)型

            類(lèi)型庫(kù)文件

            Office 版本和類(lèi)型

            類(lèi)型庫(kù)文件

            Access 97 Msacc8.olb PowerPoint 2000 Msppt9.olb
            Jet Database 3.5 DAO350.dll Word 2000 Msword9.olb
            Binder 97 Msbdr8.olb Access 2002 Msacc.olb
            Excel 97 Excel8.olb Excel 2002 Excel.exe
            Graph 97 Graph8.olb Graph 2002 Graph.exe
            Office 97 Mso97.dll Office 2002 MSO.dll
            Outlook 97 Msoutl97.olb Outlook 2002 MSOutl.olb
            PowerPoint 97 Msppt8.olb PowerPoint 2002 MSPpt.olb
            Word 97 Msword8.olb Word 2002 MSWord.olb
            Access 2000 Msacc9.olb Office Access 2003 Msacc.olb
            Jet Database 3.51 DAO360.dll Office Excel 2003 Excel.exe
            Binder 2000 Msbdr9.olb Graph 2003 Graph.exe
            Excel 2000 Excel9.olb Office 2003 MSO.dll
            Graph 2000 Graph9.olb Office Outlook 2003 MSOutl.olb
            Office 2000 Mso9.dll Office PowerPoint 2003 MSPpt.olb
            Outlook 2000 Msoutl9.olb Office Word 2003 MSWord.olb

            (4)選擇類(lèi)型庫(kù)文件后,在彈出的對(duì)話(huà)窗中繼續(xù)選擇要添加的類(lèi)。具體選擇什么類(lèi),要看你將來(lái)在程序中打算調(diào)用什么功能。當(dāng)然,你也可以不用考慮這么多,用鼠標(biāo)和Shift鍵配合,全部選擇也可以。
            (5)初始化COM。方法一,找到App的InitInstance()函數(shù),在其中添加 AfxOleInit()函數(shù)的調(diào)用;方法二,在需要調(diào)用COM功能的地方 CoInitialize(NULL),調(diào)用完畢后 CoUninitialize()。
            (6)在你需要調(diào)用 Office 功能函數(shù)的 cpp 文件中
                 #include <atlbase.h>  // 為了方便操作 VARIANT 類(lèi)型變量,使用 CComVariant 模板類(lèi)
                 #include "頭文件.h"   // 具體的頭文件名,是由裝載類(lèi)型庫(kù)的文件名決定的。(鼠標(biāo)雙點(diǎn)包裝類(lèi)的文件,就可以看到)
                                       // 比如使用 msword9.olb類(lèi)型庫(kù),那么頭文件是 msword9.h
            (7)好了,現(xiàn)在開(kāi)始寫(xiě)程序吧。另外要說(shuō)明的是,步驟3和4,其實(shí)也可以使用 #import 方式引入類(lèi)型庫(kù)。

            四、實(shí)現(xiàn)技巧
                在書(shū)寫(xiě)調(diào)用 Office 函數(shù)的過(guò)程中,最困難的是確定函數(shù)的參數(shù),一般情況下,參數(shù)都是 VARIANT 類(lèi)型的變量指針。那么到底具體我們應(yīng)該怎么寫(xiě)那?推薦兩個(gè)方法,其一是閱讀有關(guān) VBA 的書(shū)籍;其二,是使用 Office 中自帶的“宏”功能。強(qiáng)烈推薦大家使用第二個(gè)方法,把你要完成的功能,在 Office 的操作環(huán)境中,用宏錄制下來(lái),然后觀察分析錄制后的函數(shù)和參數(shù),就可以在 VC 中使用了。舉一個(gè)例子:

                  ActiveDocument.SaveAs FileName:="Hello.doc", FileFormat:=wdFormatDocument _
            , LockComments:=False, Password:="", AddToRecentFiles:=True, _
            WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _
            SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= _
            False
            以上是在 Word 中錄制的一個(gè)保存文件的宏,而在 VC 中對(duì)應(yīng)的函數(shù)原型為
                  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)
            分析對(duì)照后,我們就能看出,參數(shù) FileName 是字符串 VARIANT(VT_BSTR),參數(shù) LockComments 是布爾VARIANT(VT_BOOL),等等。參數(shù) FileFormat := wdFormatDocument 是什么類(lèi)型那?其實(shí)這是一個(gè)表示保存的時(shí)候指定文件類(lèi)型的常量,而且顯然是 DWORD 類(lèi)型VARIANT(VT_I4)。那么常量的數(shù)值又是多少那?很簡(jiǎn)單,寫(xiě)一個(gè)宏,調(diào)用函數(shù) MsgBox 顯示一下不就都知道啦?!

            五、步步為營(yíng)
              特別提示一:編譯執(zhí)行前,一定要先關(guān)閉 KV 實(shí)時(shí)監(jiān)視病毒的功能(KV 的程序會(huì)干擾我們的調(diào)用,瑞星的則沒(méi)關(guān)系)。
               特別提示二:在例子程序中,為了表現(xiàn)程序的關(guān)鍵部分,沒(méi)有或很少使用了條件判斷。為了實(shí)現(xiàn)你程序的健壯性,請(qǐng)自己加上條件判斷和異常處理。

            Step1:如何啟動(dòng)和關(guān)閉 WORD,及 VARIANT 的最基本的使用方法
            Step2:和 Step1 同樣功能,用 CComVariant 改進(jìn)了 VARIANT 的使用方式
            Step3:在 Step2 的基礎(chǔ)上,新建一個(gè) WORD 文檔,并從程序中傳送一些字符到 WORD
            Step4:在 Step3 的基礎(chǔ)上,保存 WORD 文檔
            Step5:一個(gè)小應(yīng)用舉例,把輸入的漢字按照“筆畫(huà)”排序
            Step6:一個(gè)小應(yīng)用舉例,盜竊正在使用的 WORD 文檔
              以上這6個(gè)小程序中,都有詳細(xì)的注釋。大家閱讀后慢慢體會(huì)并實(shí)驗(yàn),你就可以自由地操縱任何一個(gè) Office 啦。

            posted on 2008-04-27 15:28 wrh 閱讀(253) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            導(dǎo)航

            <2009年3月>
            22232425262728
            1234567
            891011121314
            15161718192021
            22232425262728
            2930311234

            統(tǒng)計(jì)

            常用鏈接

            留言簿(19)

            隨筆檔案

            文章檔案

            收藏夾

            搜索

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            久久国产免费观看精品| 无码任你躁久久久久久久| 久久久久亚洲AV无码网站| 精品久久久久久国产| 久久久久18| 亚洲色大成网站WWW久久九九| 色婷婷综合久久久久中文 | 久久精品亚洲中文字幕无码麻豆| 97久久精品无码一区二区| 久久最新精品国产| 免费精品久久天干天干| 久久综合狠狠色综合伊人| 久久久精品人妻一区二区三区蜜桃| 97久久精品无码一区二区天美| 久久人人爽人人爽人人片AV麻豆| 久久人人爽人人爽人人AV东京热| 久久激情五月丁香伊人| 久久久久久午夜成人影院| 亚洲欧美日韩精品久久亚洲区| 精品久久一区二区| 无码人妻久久一区二区三区蜜桃 | 狠色狠色狠狠色综合久久| 色8激情欧美成人久久综合电| 精品久久久久久国产| 成人午夜精品无码区久久| 亚洲国产天堂久久久久久| 超级碰久久免费公开视频| 国产精品视频久久久| 久久综合亚洲欧美成人| 久久久久高潮综合影院| 久久大香萑太香蕉av| 色狠狠久久综合网| 亚洲国产成人久久综合野外| 久久精品国产福利国产琪琪| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区 | 女同久久| 亚洲国产日韩欧美久久| 一级a性色生活片久久无| 久久久这里有精品| 欧美黑人激情性久久| 99蜜桃臀久久久欧美精品网站 |