最近在做一個(gè)項(xiàng)目,需要利用Word做為打印模板,不過(guò)客戶給出的報(bào)表樣式中有些數(shù)據(jù)是豎排輸出的,但大部分的文檔示例中,對(duì)此均未提及。經(jīng)過(guò)摸索發(fā)現(xiàn)豎排文字,其實(shí)與橫排文字的控制輸出是一致的,只需做設(shè)置即可。實(shí)現(xiàn)步驟如下:
1.創(chuàng)建打印模板文件(*.dot)
此為關(guān)鍵步驟,在需要豎排的地方,先文字的字體、樣式設(shè)置后,然后設(shè)置文字方向,再選擇該段文字,為其插入一個(gè)書簽(BookMark),并為該書簽命名。
2.利用C#打開(kāi),替換該書簽即可,代碼如下:
注意使用以下代碼時(shí),需要引入Word庫(kù)
Word.ApplicationClass App = null; //Word應(yīng)用程序?qū)ο?br> Word.Document doc = null; //Word文檔對(duì)象
object missing = System.Reflection.Missing.Value;
object miss=Type.Missing;
if (App==null) App = new Word.ApplicationClass();//創(chuàng)建word對(duì)象
App.Visible = false; //設(shè)置word不可見(jiàn)
//根據(jù)模板創(chuàng)建新文檔,不過(guò)這個(gè)模板文件的名稱放置在app.config文件中
object oTemplate = ConfigurationSettings.AppSettings["TemplateOfLetter"];//獲取文件名
doc = App.Documents.Add(ref oTemplate, ref missing,ref missing, ref missing);//創(chuàng)建新文檔
doc.Activate();//激活文檔
Object objBookMark = "姓名";//姓 名 創(chuàng)建書簽對(duì)象
string name="張三";
doc.Bookmarks.get_Item(ref objBookMark).Range.Text =name;//替換該書簽,可為任意值了
//打印輸出
doc.PrintOut( ref missing,ref missing,ref missing,ref missing,ref missing,ref missing,
ref missing,ref missing,ref missing,ref missing,ref missing,ref missing,ref missing,
ref missing,ref missing,ref missing,ref missing,ref missing);
//關(guān)閉新創(chuàng)建的文檔
object SaveChanges = Word.WdSaveOptions.wdDoNotSaveChanges;//創(chuàng)建關(guān)閉選項(xiàng)
if (doc!=null)
doc.Close( ref SaveChanges, ref missing, ref missing);
//退出Word
if (App!=null)
App.Application.Quit(ref miss, ref miss, ref miss);
App=null;
doc = null;
3.注意事項(xiàng)
a)在控制Word時(shí),應(yīng)注意釋放已占用的word對(duì)象,所以上述代碼最好寫在try/catch/finally中,把資源釋放代碼寫在finally中
b)如果在word中用多個(gè)文字需要豎排,最好使用表格或文本框?qū)ο?,?qiáng)烈建議使用文本框?qū)ο髞?lái)放置豎排文本,這樣不會(huì)影響頁(yè)面設(shè)置,而單純的豎排文字方向會(huì)導(dǎo)致整個(gè)頁(yè)面全部文字變成豎排,不利用其他文本的放置
c)如果需要一次性生成多個(gè)文檔并打印輸出的話,可以考慮使用多線程技術(shù),并利用進(jìn)度欄進(jìn)行進(jìn)度顯示,該部分內(nèi)容不在本主題的討論范圍。
d)關(guān)于效率問(wèn)題,操作word進(jìn)行文檔輸出,其效率并不算高,但好在word的使用范圍廣,不需要在客戶的機(jī)器上另行安裝其他報(bào)表工具,且用戶有能力對(duì)報(bào)表模板進(jìn)行樣式及不涉及數(shù)據(jù)輸出等小范圍的頁(yè)面調(diào)整,并且用戶較為熟悉,打印控制也較為方便,如果不是對(duì)效率有太高的要求,使用Word做為打印模板是比較合適,自已的程序的測(cè)試數(shù)據(jù),生成3879個(gè)文件并打印輸出,用時(shí)3223秒,基本上是0.9秒生成并輸出一個(gè),考慮到打印機(jī)的速度(目前打印機(jī),能達(dá)到30張/s的都算是很快的了),這樣的效率是完全可以接受的。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。