999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

通過VC程序操縱Word的實現方法

2017-06-10 03:18:26張雪詠馬紅濤趙建峰
電子技術與軟件工程 2017年11期
關鍵詞:程序

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

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

【關鍵詞】VC 操縱Word

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

1 實現基礎

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

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

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

(2)使用COM的Automation技術。

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

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

2 Office層次結構

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

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

Documents(所有的文檔)

Document(單個的文檔)

......

Templates(所有的模板)

Template(單個的模板)

......

Windows(所有的窗口)

Window(單個窗口)

Selection(編輯對象)

View(視圖)

Selection(編輯對象)

Font(字體)

Style(格式)

Range(范圍)

......

......

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

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

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

(1)獲取Application對象;

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

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

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

3 基本操作步驟

(1)通過VC應用程序向導創建一個 MFC 的程序工程。

(2)使用Ctrl+W快捷鍵打開ClassWizard類向導。

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

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

(5)對COM進行初始化。第一種方法,找到應用程序對象App的InitInstance()函數,在其中調用 AfxOleInit()初始化函數;第二種方法,在需要調用COM功能的程序入口地方使用CoInitialize(NULL),調用結束后使用CoUninitialize()。

(6)在需要調用 Office 功能函數的 cpp實現文件中包含相關頭文件

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

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

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

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

4 舉例說明

4.1 通過接口函數對Word進行操作時使用的數據類型

轉換程序通過接口對Word進行操作(即通過接口使用組件)時,應使用的數據類型說明如下:

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

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

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已經打開了");

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

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

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

4.2 實現中的技巧

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

以下是在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程序中對應函數原型為:

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)

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

5 程序實現

此轉換程序分為兩個模塊:

5.1 數據準備模塊,此模塊提供了準備向Word輸入的數據

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

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

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

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

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

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

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

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

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

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

(10)測試用例數據----保存在類成員變量TestCase字符串數組中。

5.2 Word操作模塊,此模塊用準備好的數據對Word進行操作

//打開模版

CComVariant FileName(lpBuffer);

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

PasswordTemplate(_T("")),Revert(false), WritePasswordDocument(_T("")), WritePasswordTemplate(_T("")),Format(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 結束語

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

參考文獻

[1]朱敏,沈同圣,王學偉,周曉東.VC++與VBA結合實現復雜報表[J].計算機應用與軟件,2005(02).

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

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

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

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

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

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

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

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

[9]申屠浩,鮑可進.用VC++語言創建WORD文檔[J].計算機工程與設計,2004(06).

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

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

作者簡介

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

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

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

作者單位

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

猜你喜歡
程序
給Windows添加程序快速切換欄
電腦愛好者(2020年6期)2020-05-26 09:27:33
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
失能的信仰——走向衰亡的民事訴訟程序
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
基于VMM的程序行為異常檢測
偵查實驗批準程序初探
我國刑事速裁程序的構建
創衛暗訪程序有待改進
中國衛生(2015年3期)2015-11-19 02:53:32
恐怖犯罪刑事訴訟程序的完善
主站蜘蛛池模板: 亚洲国产黄色| 国产日韩欧美在线视频免费观看| 国产在线小视频| 一级毛片免费不卡在线视频| 91美女视频在线| 久久免费视频6| 免费国产高清精品一区在线| 久久这里只有精品免费| 欧美有码在线| 999国内精品视频免费| 亚洲欧美在线综合一区二区三区| 六月婷婷综合| 久久亚洲高清国产| 超碰aⅴ人人做人人爽欧美| 在线99视频| 日韩AV无码一区| av在线人妻熟妇| 永久免费无码成人网站| 国产91麻豆免费观看| 91黄色在线观看| 国禁国产you女视频网站| 亚洲欧洲日韩久久狠狠爱| 亚洲性色永久网址| 亚洲首页国产精品丝袜| 成人一级黄色毛片| v天堂中文在线| 亚洲一区国色天香| 日韩一二三区视频精品| 日本三级欧美三级| 国产 在线视频无码| 18禁黄无遮挡免费动漫网站| 欧美在线精品怡红院 | 色悠久久久| 毛片网站观看| 亚洲av日韩av制服丝袜| 免费看av在线网站网址| 四虎AV麻豆| 欧美激情视频一区| 五月婷婷亚洲综合| 综合色88| 久久不卡国产精品无码| 最新加勒比隔壁人妻| 一区二区无码在线视频| 午夜日本永久乱码免费播放片| 福利在线不卡| 久久人妻系列无码一区| 亚洲三级色| 亚洲妓女综合网995久久| 国产欧美又粗又猛又爽老| 成人无码一区二区三区视频在线观看 | 五月婷婷综合网| 国产精品性| 久久一色本道亚洲| 亚洲精品午夜无码电影网| 日本国产在线| AV不卡在线永久免费观看| 免费一级毛片在线播放傲雪网| 亚洲最猛黑人xxxx黑人猛交 | 色哟哟精品无码网站在线播放视频| 国产精选自拍| 成人一级黄色毛片| 在线免费看片a| av在线无码浏览| 2020极品精品国产| 波多野结衣中文字幕一区| 男女男精品视频| 9cao视频精品| 成年人久久黄色网站| 欧美国产日韩在线观看| 国产91在线|日本| 玖玖精品视频在线观看| 亚洲精品色AV无码看| 免费看a毛片| 亚洲精品视频网| 日日噜噜夜夜狠狠视频| 亚洲制服丝袜第一页| 亚洲色图综合在线| 呦视频在线一区二区三区| 亚洲综合婷婷激情| www中文字幕在线观看| 国产成人啪视频一区二区三区| 国产91成人|