基于VSTO自動批量生成WORD文檔的設(shè)計與實(shí)現(xiàn)_第1頁
基于VSTO自動批量生成WORD文檔的設(shè)計與實(shí)現(xiàn)_第2頁
基于VSTO自動批量生成WORD文檔的設(shè)計與實(shí)現(xiàn)_第3頁
基于VSTO自動批量生成WORD文檔的設(shè)計與實(shí)現(xiàn)_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、基于VSTO自動批量生成WORD文檔的設(shè)計與實(shí)現(xiàn)摘要:批量制作統(tǒng)一格式的Word文檔在教育和商務(wù)活動中使用得很廣泛,利用.NET和VSTO技術(shù),在用戶自定義格式的Word文檔中嵌入數(shù)據(jù)庫字段變量,并實(shí)現(xiàn)自動批量生成Word文檔。關(guān)鍵詞: VSTO,.NET,Word, Office, 批量 引言在日常的生活工作中,常常需要制作大量的信函、請柬、證書等等統(tǒng)一格式的Word文檔,這是一項(xiàng)重復(fù)而繁瑣的工作。通常完成這些工作的方法有兩種:一是首先制作一個文檔模板,然后通過重復(fù)的復(fù)制粘貼來手工完成任務(wù),這種方法耗時費(fèi)力,不適合制作大量的文檔;另一種是使用Word提供的一項(xiàng)“郵件合并”的數(shù)據(jù)管理功能,該功

2、能可以在固定內(nèi)容的文檔中合并一些數(shù)據(jù)源資料,從而批量生成需要的文檔,但是數(shù)據(jù)源是一些手工制作的數(shù)據(jù)表或Excel表,記錄比較多時容易出錯并且工作量較大。本文使用.NET和VSTO技術(shù),開發(fā)了一個Word的外接程序(見下圖1),該程序可以讀取已有數(shù)據(jù)庫中所需要的數(shù)據(jù)字段,然后通過拖拽的方式把數(shù)據(jù)源放到自定義格式的Word文檔中,完成文檔定制后還可以自動的生成批量的Word文檔。圖1 系統(tǒng)運(yùn)行效果1、 主要技術(shù)VSTO(Visual Studio Tools for Office)是Microsoft公司推出的專門用來開發(fā)Office應(yīng)用程序的可視化工具,它集成在Visual Studio .NE

3、T中并可以利用.NET Framework的所有特性和能力去定制Office。以下是本文主要使用的.NET和VSTO技術(shù):(1)Word Add In:是Word的外接插件,開發(fā)好的插件程序嵌入到Word當(dāng)中,可以應(yīng)用于所有的Word文檔。(2)Ribbon:是全新的固定式工具欄界面,它是繼下拉式菜單后新的標(biāo)準(zhǔn)用戶界面,在Office 2007和Windows 7中已經(jīng)開始大規(guī)模被使用。在VSTO當(dāng)中,可以很方便的對Ribbon功能區(qū)進(jìn)行定制。(3)Custom Task Pane:稱為任務(wù)窗格,是一種附加到Word或Excel上的Windows窗體控件,在VSTO中,可以像開發(fā)Windows

4、窗體應(yīng)用程序一樣定制各種各樣的窗體和應(yīng)用程序。(4)讀寫Word文檔:Word文檔包括了文檔內(nèi)容和文檔格式,VSTO可以用多種方式讀取Word文檔中的內(nèi)容和格式,另外.NET也提供了很多編輯和生成Word文檔的類。(5)LINQ: 稱為語言集成查詢(Language Integrated Query),是 Visual Studio 2008 和 .NET Framework 3.5 版中一項(xiàng)創(chuàng)新,它在對象領(lǐng)域和數(shù)據(jù)領(lǐng)域之間架起了一座橋梁,通過LINQ可以使用一種類似SQL的語法來查詢?nèi)魏涡问降臄?shù)據(jù)。2、 方案設(shè)計2.1、設(shè)計思路系統(tǒng)任務(wù)是要批量生成信函、請柬、證書等等統(tǒng)一格式的Word文檔,

5、分析這些文檔可以得出任務(wù)需要完成以下功能:(1)這些文檔包括了兩部分:不變部分和變化部分,不變部分是指生成的所有Word文檔中具有相同內(nèi)容和格式的部分;變化部分是指生成的文檔中不相同的部分,例如: 批量生成信封,寄信人信息是不變部分,而收信人信息是變化部分。不變部分是由用戶在Word中自由定制和編寫,為了提高效率,變化部分則是來自于相關(guān)的數(shù)據(jù)源,這部分也是任務(wù)處理的重點(diǎn)。(2)定制完文檔的不變和變化部分后,還要批量的生成所有的Word文檔。這部分也涉及兩個問題:一個是如何讀取定制文檔的不變部分和變化部分;二是在批量寫Word文檔時,如何把變化部分(數(shù)據(jù)源的數(shù)據(jù))和不變部分合并成一個文檔。根據(jù)上

6、面的分析,制定了以下的方案:開發(fā)一個Word的外接插件程序,可以在Word中Ribbon工具欄中打開該程序,程序運(yùn)行時,在Word工作區(qū)的右側(cè)將會出現(xiàn)任務(wù)窗格,在上面可以根據(jù)用戶的需要選擇不同的數(shù)據(jù)庫、數(shù)據(jù)表和數(shù)據(jù)字段,通過拖拽的方式把數(shù)據(jù)字段拖到自定義文檔的相應(yīng)位置中,完成定制文檔后,就可以點(diǎn)擊任務(wù)窗格中的批量生成按鈕來自動的生成所有的Word文檔。2.2、系統(tǒng)架構(gòu)系統(tǒng)設(shè)計的架構(gòu)如圖1所示,由以下幾部分組成:(1)Word Document:分為不變部分和變化部分,不變部分可以在Office Word里正常定制格式和編寫內(nèi)容,變化部分可以從任務(wù)窗格中列出的數(shù)據(jù)字段中按需要拖過來。(2)Wor

7、d Add In:集成了所有的程序控制代碼,包括了生成Ribbon工具欄界面、任務(wù)窗格等等,它一方面通過LINQ讀取后臺數(shù)據(jù)庫,另一方面接受用戶的拖拽數(shù)據(jù)字段的動作,最后還能自動生成所有的Word文檔。(3)Database:是Word文檔中變化部分的數(shù)據(jù)來源,一般是已有系統(tǒng)的數(shù)據(jù)庫,例如:批量生成畢業(yè)證,那么畢業(yè)證中的學(xué)生姓名、系部、專業(yè)等變化部分的數(shù)據(jù)源就可以從教務(wù)系統(tǒng)的后臺數(shù)據(jù)庫中讀取。圖1 系統(tǒng)結(jié)構(gòu)圖3、 技術(shù)實(shí)現(xiàn)3.1、定制Ribbon功能區(qū)為了使用戶很方便的調(diào)用到外接插件程序,本系統(tǒng)需要在Office Word的工具欄區(qū)添加一個Ribbon功能區(qū),功能區(qū)內(nèi)設(shè)置了一個調(diào)用程序任務(wù)窗格

8、的按鈕。在VSTO中添加Ribbon功能區(qū)有兩種辦法:一是通過可視化設(shè)計器設(shè)計,另一種是用XML進(jìn)行編寫,下面的XML是本系統(tǒng)的Ribbon功能區(qū)設(shè)計代碼,其中btCreateDoc是按鈕名稱,btCreateDoc_Click是按鈕所觸發(fā)的事件。 3.2、添加任務(wù)窗格任務(wù)窗格是實(shí)現(xiàn)系統(tǒng)功能的主要控件,并負(fù)責(zé)和用戶進(jìn)行交互,它是由Ribbon功能區(qū)的按鈕所觸發(fā)。添加任務(wù)窗格有兩個步驟:(1)設(shè)計用戶控件在.NET中,用戶控件就是可以查看的類,可以通過用戶控件設(shè)計器來設(shè)計,這種設(shè)計類似于窗體設(shè)計,以可視化的方式完成用戶控件外觀和行為的屬性的設(shè)置。(2)把用戶控件添加到任務(wù)窗格并在Word中顯示出

9、來/定義任務(wù)窗格,并把用戶控件UserControlCreateMassWord添加到任務(wù)窗格CustomTaskPane ctp = CustomTaskPanes.Add(new UserControlCreateMassWord(), CreateMassWord);/在Word中顯示任務(wù)窗格ctp.Visible = true;3.3、使用LINQ 獲取數(shù)據(jù)源Word文檔中變化部分的數(shù)據(jù)是來源于后臺數(shù)據(jù)庫,本系統(tǒng)通過LINQ來讀取后臺數(shù)據(jù)庫,其中需要獲取的數(shù)據(jù)有:數(shù)據(jù)庫名、數(shù)據(jù)表名列表、數(shù)據(jù)字段名列表,其中獲取數(shù)據(jù)字段名列表的代碼如下:/獲取選定的數(shù)據(jù)表var table = (fro

10、m t in adc.Mapping.GetTables()where t.TableName=this.cbTable.SelectedItem.ToString()select t).First();/獲取選定數(shù)據(jù)表的所有字段并添加到列表框里foreach (var col in table.RowType.DataMembers) this.lbField.Items.Add(col.MappedName); 3.4、拖 拽實(shí)現(xiàn)Word文檔中變化部分是通過從任務(wù)窗格的字段列表中拖拽過來實(shí)現(xiàn)的,為了它能在批量生成Word文檔前被程序識別出來,因此需要定義變化部分的數(shù)據(jù)格式。變化部分的數(shù)據(jù)格

11、式定義為:,實(shí)現(xiàn)代碼如下:/拖拽動作觸發(fā)以下程序private void lbField_MouseDown(object sender, MouseEventArgs e) /把數(shù)據(jù)字段名封裝了定義格式后生成變化部分this.lbField.DoDragDrop(, DragDropEffects.Move);3.5、分析和讀寫Word文檔用戶完成Word文檔的定制后(包括不變部分和變化部分),系統(tǒng)首先會讀取和分析該文檔,然后經(jīng)修改后批量的寫成新的文檔,新的文檔數(shù)實(shí)際上就是所選擇數(shù)據(jù)表的行數(shù),新的文檔中把原文檔不變的內(nèi)容和格式保留下來,而變化的內(nèi)容以數(shù)據(jù)字段的實(shí)際數(shù)據(jù)來代替。其中實(shí)現(xiàn)的關(guān)鍵代

12、碼如下:/獲取文檔中每個段落的內(nèi)容string str = newDocument.Paragraphsi.Range.Text;foreach (var col in table.RowType.DataMembers) /分析文檔中是否存在著變化的部分if (str.IndexOf() = 0)/變化的部分使用對應(yīng)的字段數(shù)據(jù)來代替 str = str.Replace(, dvcol.MappedName.ToString();4、 結(jié)束語自動批量生成Word文檔系統(tǒng)的開發(fā),利用了先進(jìn)的.NET和VSTO技術(shù),把程序嵌入到Word當(dāng)中,增強(qiáng)了Word的功能,實(shí)現(xiàn)了固定格式的文檔和變化的數(shù)據(jù)庫有效的合并。實(shí)驗(yàn)表明系統(tǒng)可以大大的提高工作效率,適合于制作大批量的信函、證書、單據(jù)等等統(tǒng)一格式的Word文檔。參考文獻(xiàn):1 葉明 張諍. 基于C#

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論