前言:
由於對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在後台進行,看著也蛋疼,果不其然的使程序更加耗時間),但是一個文件多個頁面還是比多個單頁的文檔討人喜歡。還是歡迎吐糟吧。。=_=||||
這是結構體指針中的一個符號,給你寫個程序解釋一下吧,例如:
#include<stdio.h>
struct STU //定義一個結構體
{
int num;
}stu;
int main()
{
struct STU *p; //定義一個結構體指針
p=stu; //p指向stu這個結構體變量
stu.num=100; //給結構體成員num附個初值
printf("%d",p->num); //輸出stu中的num的值
return;
}
看到了吧,->的作法就是在引用結構體中的變量!!
形式如:p->結構體成員(如p->num)
他的作用相當於stu.num或(*p).num
不知道這樣解釋你明不明白、、、、、不懂了call我,O(∩_∩)O~
望采納。
這是結構體指針中的一個符號,給你寫個程序解釋一下吧,例如:
#include<stdio.h>
struct STU //定義一個結構體
{
int num;
}stu;
int main()
{
struct STU *p; //定義一個結構體指針
p=stu; //p指向stu這個結構體變量
stu.num=100; //給結構體成員num附個初值
printf("%d",p->num); //輸出stu中的num的值
return;
}
看到了吧,->的作法就是在引用結構體中的變量!!
形式如:p->結構體成員(如p->num)
他的作用相當於stu.num或(*p).num
不知道這樣解釋你明不明白、、、、、不懂了call我,O(∩_∩)O~
望采納。