前言:
由于對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思路獲取書簽對象和書簽名稱賦值給我們已經定義的oBook和rng,然后做一個插入的操作,而非修改文檔本身的書簽值
這個方法跟剛剛搜到的文章《如何利用書簽向word文檔讀取或寫入數據[C#]》提及的“由于附值以后書簽自動消除,為了以后便于修改,需要把書簽再自動生成一個”
似乎是一樣的實現,也懶得細想,另外我還利用Selection.InsertFile方法把生成的文檔合并為一個文件(由于這個方法只能附加文件而不能從doc對象中提取頁面進行附加,所以又有了大量的打開Word操作,兩個Word.exe在后臺進行,看著也蛋疼,果不其然的使程序更加耗時間),但是一個文件多個頁面還是比多個單頁的文檔討人喜歡。還是歡迎吐糟吧。。=_=||||
新聞熱點
疑難解答