国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C# 利用WORD模板和標簽(bookmark) 批量生成WORD

2019-11-17 02:50:07
字體:
來源:轉載
供稿:網友
C# 利用Word模板和標簽(bookmark) 批量生成WORD

前言:

由于對C#操作WORD不熟悉,也就留下這么一篇水文,別吐糟...=_=|||

利用Microsoft.Office.Interop.Word (2003版也就11版)——因為部分客戶端還是用Office2003,所以保險起見應該引入低一點的版本

我的需求很簡單,從DataTable里面循環取數據批量生成Word文檔,解決方案是利用Word模板.dot插入書簽并保存為程序使用的模板,

用C#打開word模板修改書簽的值并批量生成Word.

遇到的問題:

我的思路是打開模板,然后循環修改書簽內容,每循環一次生成一個.doc,實際上遇到的問題是當第二次給書簽賦值(比如bookMark.Range.Text="2013-4-24")發現是+=的操作,也就是循環第二次書簽的值是"2013-4-242013-4-24",我的理解是因為模板沒有關閉,所以對書簽實際上是進行了兩次【插入】的操作,而非我們理解的【賦值】,一個可以實現的做法是先關閉dot再打開重新進行一次賦值,但是由于耗時超長所以我毫不猶豫拋棄這種做法,平均下來幾乎一秒鐘才生成一個WORD,當然Win764bit效率要低一點。——因為我后來才發現生成的軟件在32bit 的xp運行效率比62bit 的WIN7高不少,而我在虛擬機運行的效率竟然比32bit 的宿主xp更快,可能虛擬機只裝了office2003和framework2.0的緣故,即便如此,在xp下效率還是很低。問題回到如何不關閉模板文件的情況下,循環插入生成WORD。

解決方案:

[csharp]view plaincopy
  1. object[]oBookMark=newobject[8];
  2. oBookMark[0]="Date";//省略賦值用來記錄書簽名稱
  3. Word.Range[]rng=newWord.Range[8];
  4. string[]bookMarkName=newstring[8];
  5. for(inti=0;i<8;i++)
  6. {
  7. rng[i]=oDoc.Bookmarks.get_Item(refoBookMark[i]).Range;//獲取書簽對象賦值給我們已經定義的數組用來下面循環體的插入
  8. bookMarkName[i]=oDoc.Bookmarks.get_Item(refoBookMark[i]).Name;//獲取書簽名稱好書簽對象賦值給我已經定義好的rng和oBookMark
  9. }
  10. //循環體
  11. for(inti=dt.Rows.Count-1;i>=0;i--)
  12. {
  13. rng[0].Text=dt.Rows[i]["日期"].ToString();//賦值多個書簽0~8
  14. for(intj=0;j<8;j++)
  15. {
  16. oDoc.Bookmarks.Add(bookMarkName[j],rng[j]);//此處直接插入即可,替代了原來的書簽,位置不變...囧
  17. //也就是說Add操作實際上并不是隨意插入書簽,而是替代了原有書簽,這樣子每次就可以重新賦值了
  18. }
  19. //這里保存oDoc用Save方法
  20. }

思路獲取書簽對象和書簽名稱賦值給我們已經定義的oBook和rng,然后做一個插入的操作,而非修改文檔本身的書簽值

這個方法跟剛剛搜到的文章《如何利用書簽向word文檔讀取或寫入數據[C#]》提及的“由于附值以后書簽自動消除,為了以后便于修改,需要把書簽再自動生成一個”

似乎是一樣的實現,也懶得細想,另外我還利用Selection.InsertFile方法把生成的文檔合并為一個文件(由于這個方法只能附加文件而不能從doc對象中提取頁面進行附加,所以又有了大量的打開Word操作,兩個Word.exe在后臺進行,看著也蛋疼,果不其然的使程序更加耗時間),但是一個文件多個頁面還是比多個單頁的文檔討人喜歡。還是歡迎吐糟吧。。=_=||||


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 江口县| 长乐市| 望都县| 轮台县| 海阳市| 大埔区| 金塔县| 南通市| 墨玉县| 灵丘县| 乐清市| 五莲县| 苏州市| 安图县| 浑源县| 周口市| 宁远县| 九台市| 朔州市| 济源市| 顺平县| 梧州市| 承德市| 金溪县| 安多县| 长兴县| 北宁市| 辉县市| 三亚市| 偏关县| 卓资县| 佛坪县| 石景山区| 桓台县| 杭州市| 南宁市| 九台市| 嵊泗县| 崇明县| 江门市| 建昌县|