亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        通過VC程序操縱Word的實現(xiàn)方法

        2017-06-10 03:18:26張雪詠馬紅濤趙建峰
        電子技術(shù)與軟件工程 2017年11期
        關(guān)鍵詞:記事本測試用例調(diào)用

        張雪詠++馬紅濤++趙建峰

        摘 要本文介紹了通過Visual C++操縱Word的思想,通過實例演示了具體的方法和步驟,實現(xiàn)了將記事本格式的文件通過VC軟件自動寫入Word文檔,可以顯著提高工作效率。

        【關(guān)鍵詞】VC 操縱Word

        我們在做保護(hù)裝置功能測試時,程序根據(jù)測試用例生成的測試結(jié)果是記事本格式,而我們要提交的報告是Word文檔。以前我們在寫測試報告時,總是手工將測試用例及結(jié)果輸入到Word表格中,因為測試用例可能比較多,而且正式報告中的要求的表格格式和程序生成的記事本文檔中的測試結(jié)果格式不太一致, 這樣做有兩個缺點:1、浪費時間。2、容易出錯。鑒于此,開發(fā)了一個轉(zhuǎn)換程序,這個轉(zhuǎn)換程序可以對記事本文檔中的測試結(jié)果進(jìn)行分析,再將其自動輸入到Word中去。

        1 實現(xiàn)基礎(chǔ)

        Word本身是一個實現(xiàn)了自動化的COM(Component Object Model)組件,它提供給我們很多接口,我們可以通過它對外提供的編程接口來訪問和操作Word文檔,為我們通過VC等軟件編寫的程序服務(wù)。

        我們可以通過兩種方式來在VC中操縱Word:

        (1)使用Office自帶的類型庫。

        (2)使用COM的Automation技術(shù)。

        我們做的該轉(zhuǎn)換程序用第一種方法在VC中操縱Word,即使用Office自帶的類型庫。下面簡單介紹一下類型庫:

        Word本身提供了一個文件,叫做對象庫(Object library)或類型庫(Type library),里邊包含了有關(guān)的對象、屬性、方法和事件,以及應(yīng)用程序的常量信息。我們可以通過對象瀏覽器(Object Browser或 OLEView)工具來在此文件中查看信息,以及瀏覽它所描述的對象。我們可以通過導(dǎo)出Word對象庫,在自己編寫的程序中調(diào)用。

        2 Office層次結(jié)構(gòu)

        為了邏輯更清晰,層次更清楚的操作Office,微軟將Office按邏輯功能劃分為如下所示的屬性結(jié)構(gòu):

        Application(以WORD 為例,只列出一部分示意)

        Documents(所有的文檔)

        Document(單個的文檔)

        ......

        Templates(所有的模板)

        Template(單個的模板)

        ......

        Windows(所有的窗口)

        Window(單個窗口)

        Selection(編輯對象)

        View(視圖)

        Selection(編輯對象)

        Font(字體)

        Style(格式)

        Range(范圍)

        ......

        ......

        熟悉邏輯層次之后,就可以正確操作Office了。舉一個簡單的例子,如果給出的VB腳本語句(該語句可通過錄制宏獲?。椋?/p>

        application.ActiveDocument.SaveAs "D:\test.doc"

        從這個語句我們可以看出該操作過程分以下步驟:

        (1)獲取Application對象;

        (2)從Application對象中取得ActiveDocument活動文檔屬性;

        (3)調(diào)用Document的“另存為”函數(shù)SaveAs,參數(shù)為字符串類型的文件名稱。

        下面簡單介紹一下“宏”,因為“宏”在完成這個轉(zhuǎn)換程序過程中起到了很大的作用。在WORD中(以O(shè)ffice2010為例),調(diào)出菜單“視圖\宏\錄制宏(R)”,這時候它將開始記錄你在 WORD 中所有菜單和鍵盤的操作,把所有的操作過程保存起來。這些宏是VB腳本程序,將其轉(zhuǎn)換為VC代碼,便可在VC程序中實現(xiàn)對Word的操作,如圖1所示。

        3 基本操作步驟

        (1)通過VC應(yīng)用程序向?qū)?chuàng)建一個 MFC 的程序工程。

        (2)使用Ctrl+W快捷鍵打開ClassWizard類向?qū)А?/p>

        (3)點擊”Add Class...”,從下拉菜單中選擇”From a type Library...”,在 Office安裝目錄中找到需要使用的類型庫。

        (4)選擇類型庫文件后,在彈出的對話窗中繼續(xù)按照功能選擇需要添加的類。也可以不考慮,全部添加進(jìn)去。

        (5)對COM進(jìn)行初始化。第一種方法,找到應(yīng)用程序?qū)ο驛pp的InitInstance()函數(shù),在其中調(diào)用 AfxOleInit()初始化函數(shù);第二種方法,在需要調(diào)用COM功能的程序入口地方使用CoInitialize(NULL),調(diào)用結(jié)束后使用CoUninitialize()。

        (6)在需要調(diào)用 Office 功能函數(shù)的 cpp實現(xiàn)文件中包含相關(guān)頭文件

        #include //為方便操作 VARIANT類型的變量,需使用CComVariant模板類

        #include "XXX.h" //具體頭文件名稱,由裝載類型庫的文件名決定。

        //如使用 msword.olb類型庫,頭文件為msword.h(實現(xiàn)在一doc文件中插入另一個word文件)

        (7)開始在VC程序中調(diào)用Word的功能。

        4 舉例說明

        4.1 通過接口函數(shù)對Word進(jìn)行操作時使用的數(shù)據(jù)類型

        轉(zhuǎn)換程序通過接口對Word進(jìn)行操作(即通過接口使用組件)時,應(yīng)使用的數(shù)據(jù)類型說明如下:

        Word是一個實現(xiàn)了自動化的COM組件。COM產(chǎn)生的目的之一就是跨語言,它使用的數(shù)據(jù)類型應(yīng)該具有跨語言的特性,而VARIANT數(shù)據(jù)類型正具有這種特性。從C語言的角度講,VARIANT其實是一個結(jié)構(gòu),結(jié)構(gòu)中用一個域表示該變量是什么類型的數(shù)據(jù),同時真正的數(shù)據(jù)存在Union空間中。舉例說明如下:

        (1)用VARIANT表示一個4字節(jié)長的整數(shù)

        VARIANT vtest1; vtest1.vt=VT_I4; vtest1.Val=100;

        (2)用 VARIANT 表示布爾值“真”

        VARIANT vtest2; vtest2.vt=VT_BOOL; vtest2.boolVal=VARIANT_TRUE;

        (3)用VARIANT表示字符串

        VARIANT vtest3; vtest3.vt=VT_BSTR; vtest3.bstrVal=SysAllocString(L"Hello,Word已經(jīng)打開了");

        上面的操作過程看起來很麻煩,我們可以使用已有的包裝類CComVariant、COleVariant、_variant_t。上面幾個問題可以書寫成這樣:

        CComVariant vtest1(100),vtest2(true),vtest3("Hello, Word已經(jīng)打開了");

        在該轉(zhuǎn)換程序中,通過接口使用組件時,就是用的包裝類CComVariant。

        4.2 實現(xiàn)中的技巧

        在書寫調(diào)用Office函數(shù)的過程中,函數(shù)的參數(shù)較難確定,通常參數(shù)均為VARIANT變體類型指針,具體應(yīng)如何確定呢?推薦兩種方法:第一種是查閱有關(guān)VBA相關(guān)書籍;第二種是查看Office自帶“宏”功能,本文推薦采用第二種方法,將需要實現(xiàn)的功能,在Office環(huán)境中操作,通過宏錄制下來,分析錄制后的函數(shù)和參數(shù),就可以在VC程序中進(jìn)行使用了。舉一個簡單例子:

        以下是在Word2010中錄制的另存文件的宏:

        ActiveDocument.SaveAs2 FileName:="test.docx", FileFormat:= _wdFormatXMLDocument, LockComments:=False, Password:="", AddToRecentFiles _:=True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts _:=False, SaveNativePictureFormat:=False, SaveFormsData:=False, _SaveAsAOCELetter:=False, CompatibilityMode:=14

        該宏在VC程序中對應(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, VARIANT* Encoding, VARIANT* InsertLineBreaks, VARIANT* AllowSubstitutions, VARIANT* LineEnding, VARIANT* AddBiDiMarks)

        將以上內(nèi)容對照分析后,我們可以看出來,第一個參數(shù) FileName是字符串類型 VARIANT(VT_BSTR), 第二個參數(shù) FileFormat:= _wdFormatXMLDocument為表示保存時指定文件類型的常量,是 DWORD 雙字類型VARIANT(VT_I4),常量的數(shù)值可寫成一個宏,通過調(diào)用函數(shù)AfxMessageBox顯示就能夠知道,第三個參數(shù)LockComments是布爾類型VARIANT(VT_BOOL)等等。

        5 程序?qū)崿F(xiàn)

        此轉(zhuǎn)換程序分為兩個模塊:

        5.1 數(shù)據(jù)準(zhǔn)備模塊,此模塊提供了準(zhǔn)備向Word輸入的數(shù)據(jù)

        為了將記事本文件中的測試用例轉(zhuǎn)化為預(yù)期格式,必須通過分析記事本中測試用例數(shù)據(jù)獲得以下信息:

        (1)測試用例名稱----保存在類成員變量TestName中。

        (2)結(jié)果文件名稱----保存在類成員變量strFileName中。

        (3)被測模塊參數(shù)個數(shù)----保存在類成員變量paraNum中。

        (4)被測模塊輸出結(jié)果個數(shù)----保存在類成員變量resulAnticipated中。

        (5)測試用例長度----保存在類成員變量caseLength中。

        (6)測試用例數(shù)目----保存在類成員變量caseNum中。

        (7)正常測試用例個數(shù)----保存在類成員變量NormalTestNum中。

        (8)邊界測試用例個數(shù)----保存在類成員變量BorderTestNum中。

        (9)異常測試用例個數(shù)----保存在類成員變量ExcepTestNum中。

        (10)測試用例數(shù)據(jù)----保存在類成員變量TestCase字符串?dāng)?shù)組中。

        5.2 Word操作模塊,此模塊用準(zhǔn)備好的數(shù)據(jù)對Word進(jìn)行操作

        //打開模版

        CComVariant FileName(lpBuffer);

        CComVariant ConfirmConversions(false), ReadOnly(false), AddToRecentFiles(false), PasswordDocument(_T("")),

        PasswordTemplate(_T("")),Revert(false), WritePasswordDocument(_T("")), WritePasswordTemplate(_T("")),F(xiàn)ormat(0),Encoding,Visible,OpenAndRepair(0),DocumentDirection,NoEncodingDialog,XMLTransform(_T(""));

        docs.Open(&FileName,&ConfirmConversions,&ReadOnly,&AddToRecentFiles,&PasswordDocument,&PasswordTemplate,&Revert,&WritePasswordDocument,&WritePasswordTemplate,&Format,&Encoding,&Visible,&OpenAndRepair,&DocumentDirection,&NoEncodingDialog,&XMLTransform);

        //替換模塊名稱

        CComVariant FindText3(moduluName);

        CComVariant ReplaceWith3(TestName);

        CComVariant MatchCase3(false), MatchWholeWord3(false), MatchWildcards3(false),MatchSoundsLike3(false), MatchAllWordForms3(false), Forward3(true), Wrap3(1), Format3(false), Replace3(2), MatchKashida3,MatchDiacritics3,MatchAlefHamza3, MatchControl3;

        find3.Execute(&FindText3,&MatchCase3,&MatchWholeWord3,&MatchWildcards3,&MatchSoundsLike3,&MatchAllWordForms3,&Forward3,&Wrap3,&Format3,&ReplaceWith3,&Replace3,&MatchKashida3,&MatchDiacritics3,&MatchAlefHamza3,&MatchControl3);

        //保存測試報告

        CComVariant FileName6(lpBuffer);

        CComVariant FFormat6(0); CcomVariant LComments6(false),PW6(_T(""));

        CComVariant AddToRecentFiles6(true),WritePW6(_T(""));

        CComVariant ReadOnlyRecommended6(false),EmbedTrueTypeFonts6(false);

        CComVariant SaveNPictureFormat6(false),SaveFormData6(false);

        CComVariant SaveAsAOCEL6(false);

        CComVariant Encoding6, InsertLBreaks6, AllowSub6, LineEnding6, AddBiDiMarks6;

        saveDoc.SaveAs(&FileName6,&FFormat6,&LComments6,&PW6,&AddToRecentFiles6,&WritePW6,&ReadOnlyRecommended6,

        &EmbedTrueTypeFonts6,&SaveNPictureFormat6,&SaveFormData6,&SaveAsAOCEL6,&Encoding6,&InsertLBreaks6,&AllowSub6,&LineEnding6,&AddBiDiMarks6);

        CComVariant SaveCHG(false),ORGFormat,RDocument;

        saveDoc.Close(&SaveCHG, &ORGFormat, &RDocument);

        如圖2、3所示。

        6 結(jié)束語

        本文通過VC對Word的操縱,實現(xiàn)了將記事本格式內(nèi)容自動寫入Word格式文件中,簡化了報告的填寫過程,極大的提高了工作效率。

        參考文獻(xiàn)

        [1]朱敏,沈同圣,王學(xué)偉,周曉東.VC++與VBA結(jié)合實現(xiàn)復(fù)雜報表[J].計算機(jī)應(yīng)用與軟件,2005(02).

        [2]熊瑜容,柴毅,王淑娟,王嘉騏.基于VC++的Word文檔自動生成技術(shù)[J].計算機(jī)時代,2010(01).

        [3]陳特放,方斌.VC平臺下基于OLE的Word自動化操作應(yīng)用[J].計算機(jī)應(yīng)用與軟件,2009(09).

        [4]王怒濤,李大凱,李丹,王超.VC++的Word文檔中的表與圖自動生成技術(shù)[J].石油工業(yè)計算機(jī)應(yīng)用,2015(02).

        [5]岳亮.在VC中利用WORD生成圖文報告[J].電腦編程技巧與維護(hù),2002(05).

        [6]雷曉榮,雷凌云,馮宏.VC中用Word生成隨鉆測量報告的一種方法[J].微處理機(jī),2010(04).

        [7]徐格寧,馮曉蕾,陶元芳,楊瑞剛.基于COM+ VC+ Word技術(shù)的產(chǎn)品設(shè)計說明書自動化研究[J].中國工程機(jī)械學(xué)報,2009(03).

        [8]姜照林.用VC實現(xiàn)Word文檔自動化[J].嘉興學(xué)院學(xué)報,2007(03).

        [8]閆新珠,王秀芹.在VC中利用Word生成測量報告[J].地礦測繪,2006(01).

        [9]申屠浩,鮑可進(jìn).用VC++語言創(chuàng)建WORD文檔[J].計算機(jī)工程與設(shè)計,2004(06).

        [10]劉春雷,吳重光.用VC實現(xiàn)Word自動化操作的研究與應(yīng)用[J].計算機(jī)工程與設(shè)計,2004(09).

        [11]孫鑫,余安萍編著.VC++深入詳解[M].北京:電子工業(yè)出版社,2006.

        作者簡介

        張雪詠(1979-),女,大學(xué)本科學(xué)歷。工程師,主要從事繼電保護(hù)及自動化產(chǎn)品的測試技術(shù)、測試方法的研究和測試工作。

        馬紅濤(1980-),男,工程師,主要從事繼電保護(hù)及自動化產(chǎn)品的測試技術(shù)、測試方法的研究和測試工作。

        趙建峰(1981-),女,工程師,主要從事繼電保護(hù)及自動化產(chǎn)品的測試技術(shù)、測試方法的研究和測試工作。

        作者單位

        許繼電氣股份有限公司 河南省許昌市 461000

        猜你喜歡
        記事本測試用例調(diào)用
        做個樹懶記事本
        小狗記事本
        童話世界(2020年29期)2020-09-25 07:39:50
        基于SmartUnit的安全通信系統(tǒng)單元測試用例自動生成
        核電項目物項調(diào)用管理的應(yīng)用研究
        LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
        基于混合遺傳算法的回歸測試用例集最小化研究
        動物園
        基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
        土撥鼠的記事本
        基于依賴結(jié)構(gòu)的測試用例優(yōu)先級技術(shù)
        亚洲综合色自拍一区| 国产亚洲中文字幕一区| 丰满人妻一区二区三区视频| 农村欧美丰满熟妇xxxx| 欧美中文字幕在线| 亚洲精品中文字幕二区| 久久中文字幕暴力一区| 午夜福利理论片在线观看| 国产精品久久久久久久久鸭| 国产极品美女到高潮视频| 日韩精品免费在线视频一区| 亚洲欧美日韩另类精品一区| 国产色诱视频在线观看| 久久久精品2019免费观看| 人妻经典中文字幕av| 欧美四房播播| 亚洲精品国产成人AV| 成人免费视频自偷自拍| 亚洲国产综合久久天堂| 亚洲h在线播放在线观看h| 91天堂素人精品系列全集亚洲| 蜜桃色av一区二区三区麻豆 | 午夜一区二区三区福利视频| 无码aⅴ精品一区二区三区| 精品一区二区久久久久久久网站 | 高清亚洲精品一区二区三区| av影院在线免费观看不卡| 50岁熟妇大白屁股真爽| 成人亚洲欧美久久久久| 亚洲肥婆一区二区三区| 精品精品国产自在97香蕉| 国产成人无码一二三区视频| 久久精品国产亚洲一级二级| 免费国产在线视频自拍白浆| 国产亚洲av无码专区a∨麻豆| 亚洲中文字幕久爱亚洲伊人| 国产熟女白浆精品视频二| 大地资源在线观看官网第三页| 亚洲一区综合精品狠狠爱| 亚洲福利网站在线一区不卡| 无码人妻精品一区二区三区夜夜嗨|