摘 要:信息管理系統(tǒng)中的報表有大量的打印需求,而報表直接進(jìn)行打印存在著諸多限制,本文就在Visual Studio.NET環(huán)境下,使用C#動態(tài)生成報表對應(yīng)的word文檔,實現(xiàn)報表打印進(jìn)行了介紹。
關(guān)鍵詞:Visual Studio.NET;Oracle;Word;C#;報表;打印
中圖分類號:TP311.52 文獻(xiàn)標(biāo)識碼:A 文章編號:1674-7712 (2014) 12-0000-01
信息管理系統(tǒng)中各種信息的體現(xiàn)主要依靠各種報表,報表時常需要打印,但報表直接進(jìn)行打印,效果往往不理想,而Office辦公軟件中的Word具有強(qiáng)大的打印功能,并且.NET環(huán)境也能與Office辦公軟件很好的結(jié)合起來,可以把報表動態(tài)生成為Word文檔后再打印。
一、開發(fā)環(huán)境
后臺數(shù)據(jù)庫使用Oracle Database 11g R2,前臺開發(fā)工具使用Visual C#.NET 2010,調(diào)用的Word文檔版本為Microsoft Office Word 2010。
二、配置Word
首先需要對Word進(jìn)行一些權(quán)限的配置,這是必需的。配置方法如下:
(一)配置DCOMCNFG
1.單擊“開始”|“運(yùn)行”,打開“運(yùn)行”對話框,輸入DCOMCNFG,單擊“確定”,打開“分布式COM配置屬性”對話框。在該對話框中,定位到“應(yīng)用程序”選項卡。
2.選中“Microsoft Word文檔”,單擊“屬性”,打開“Microsoft Word文檔屬性”對話框,定位到“安全性”選項卡,選擇“使用默認(rèn)的訪問權(quán)限”和“使用默認(rèn)的啟動權(quán)限”;然后定位到“身份標(biāo)識”選項卡,在“要使用哪個用戶帳戶來運(yùn)行該應(yīng)用程序?”下選中“交互式用戶”,單擊“確定”;回到“分布式COM配置屬性”對話框,“默認(rèn)安全機(jī)制”選項卡,單擊“默認(rèn)訪問權(quán)限”下的“編輯默認(rèn)值”按鈕,打開“注冊表值的權(quán)限”對話框,添加下列用戶:
SYSTEM
INTERACTIVE
Everyone
Administrators
IUSR_
IWAM_
每個用戶的訪問類型必須為“允許訪問”。單擊“確定”按鈕,完成該“注冊表值的權(quán)限”的設(shè)置。
3.單擊“默認(rèn)啟動權(quán)限”下的“編輯默認(rèn)值”添加相同的用戶。每個用戶的訪問類型必須為“允許訪問”。最后單擊“確定”按鈕,完成“分布式COM配置屬性”的配置。
(二)添加服務(wù)器的用戶ASP.NET到Administrators組
右擊“我的電腦”|“管理”|“本地用戶和組”|“用戶”,選中“ASPNET”,右擊打開“ASPNET屬性”對話框,定位到“隸屬于”選項卡,在“隸屬于”中加入“ADMINISTRATOR”。
(三)web.config設(shè)置
web.config文件需要加入
三、報表動態(tài)生成Word文檔
報表信息全部存儲在Oracle數(shù)據(jù)表中,頁面展示的報表是從數(shù)據(jù)表中讀取的。把報表生成其對應(yīng)的Word文檔,也就是創(chuàng)建一個Word文檔,把報表信息按相應(yīng)的格式顯示在Word文檔里,其實質(zhì)是創(chuàng)建一個Word文檔,從數(shù)據(jù)表中讀取報表信息后以報表形式顯示在Word文檔中。
(1)定義word文檔的表頭及形參;
(2)取得Word文件保存路徑并以系統(tǒng)時間命名Word文檔;
object dstFileName=@”d:\”+newname+”.docx”;
(3)定義一個名為wa的組件對象;
Word.ApplicationClass wa=1;
if(wa==1)
wa=new Word.ApplicationClass();
if(wa!=1)
wa.Visible=true;
(4)創(chuàng)建一個名為wordDoc的文檔對象:
missing=System.Reflection.Missing.Value;
Word.Document wordDoc=wa.Documents.Add(ref missing,ref missing,ref missing,ref missing);
(5)定義表頭及表格格式。格式的定義比較自由,例如可以定義表頭字體為“隸書”、字號為“18”、字體顏色為“藍(lán)色”、表格位置為“居中”等等。
(6)根據(jù)報表格式添加表格。此時可根據(jù)報表格式在Word文檔中規(guī)定生成相同行數(shù)和列數(shù)的表格,同時進(jìn)行單元格的合并。
Word.Table table=wordDoc.Tables.Add(wordDoc.Range(ref start,ref end),5,2,ref missing,ref missing);
table.Cell(2,2).Merge(table.Cell(2,3));
(7)取得當(dāng)前要打印報表的ID號鏈接數(shù)據(jù)庫,讀取數(shù)據(jù)表信息后顯示在相應(yīng)的位置;
(8)將wordDoc文檔對象的內(nèi)容保存為DOCX文檔;
(9)關(guān)閉wordDoc文檔對象;
(10)關(guān)閉wa組件對象。
本文提出的方法,實現(xiàn)了將一般的報表信息生成其對應(yīng)word文檔并自動保存,從而方便了報表信息的打印。該方法的靈活性和擴(kuò)展性都很強(qiáng),可以根據(jù)實際需要進(jìn)行相應(yīng)的修改以達(dá)到目的。
參考文獻(xiàn):
[1]馮慶東,楊麗.C#項目開發(fā)全程實錄(第3版)[M].北京:清華大學(xué)出版社,2013.
[2]何明.Oracle數(shù)據(jù)庫管理與開發(fā)[M].北京:清華大學(xué)出版社,2013.
[3](美)蘭多夫.Visual Studio 2010高級編程[M].任鴻,譯.北京:清華大學(xué)出版社,2012.
[作者簡介]李曉葉(1981-),女,河北藁城人,就職于石家莊機(jī)械化步兵學(xué)院計算機(jī)組,碩士研究生,講師,研究方向:計算機(jī)。