今天正好有人問我,怎么生成一個報表式的Word文檔。
就是文字的樣式和位置相對固定不變,只是里面的內(nèi)容從數(shù)據(jù)中讀取。
我覺得類似這種的一般用第三方報表來做比較簡便。但既然要求了Word,只好硬著頭皮來。
網(wǎng)上的方法大多數(shù)都是從一個GridView或表中獲得數(shù)據(jù)后向Word中添加一個表格。
(圖1)
我們使用Word模板來實現(xiàn),方法如下:
1、首先需要向工程中的“引用”加入Word類庫的引用(圖2)。我是Office 2003。其他版本可能略有不同。在COM里面
(圖2)
2、用Word設(shè)計一個模板文檔(后綴名*.dot)。(圖3)
(圖3)
3、向模板中的需要顯示動態(tài)內(nèi)容的地方添加書簽。具體方法是。光標落到欲插入內(nèi)容的地方,選擇菜單欄上的“插入”——〉“書簽”(圖4)
(圖4)在“備注:”的后面添加一個書簽,名字叫"beizhu"。書簽名字不能以數(shù)字開頭。
4、完成全部書簽的添加,依次應(yīng)該是:
位置 | 書簽名 |
備注右側(cè) | beizhu |
姓名右側(cè)單元格 | name |
性別右側(cè)單元格 | sex |
生日右側(cè)單元格 | birthday |
籍貫右側(cè)單元格 | hometown |
5、保存這個已完成的模板到任意路徑,例如 X:/template.dot
6、在工程的窗體的類中添加引用的命名空間
7、為了省事,直接在窗體的Load事件中加入以下代碼。
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Windows.Forms; 9 using Microsoft.Office.Interop.Word;10 11 namespace 生成word文檔12 {13 public partial class Form1 : Form14 {15 public Form1()16 {17 InitializeComponent();18 Load += Form1_Load;19 }20 21 void Form1_Load(object sender, EventArgs e)22 {23 //**********************************************24 //來自博客http://blog.csdn.net/fujie72425 //**********************************************26 object oMissing = System.Reflection.Missing.Value;27 //創(chuàng)建一個Word應(yīng)用程序?qū)嵗?/span>28 Microsoft.Office.Interop.Word._application oWord = new Microsoft.Office.Interop.Word.Application();29 //設(shè)置為不可見30 oWord.Visible = false;31 //模板文件地址,這里假設(shè)在X盤根目錄32 object oTemplate = "d://template.dotx";33 //以模板為基礎(chǔ)生成文檔34 Microsoft.Office.Interop.Word._Document oDoc = oWord.Documents.Add(ref oTemplate, ref oMissing, ref oMissing, ref oMissing);35 //聲明書簽數(shù)組36 object[] oBookMark = new object[5];37 //賦值書簽名38 oBookMark[0] = "beizhu";39 oBookMark[1] = "name";40 oBookMark[2] = "sex";41 oBookMark[3] = "birthday";42 oBookMark[4] = "hometown";43 //賦值任意數(shù)據(jù)到書簽的位置44 oDoc.Bookmarks.get_Item(ref oBookMark[0]).Range.Text = "使用模板實現(xiàn)Word生成";45 oDoc.Bookmarks.get_Item(ref oBookMark[1]).Range.Text = "李四";46 oDoc.Bookmarks.get_Item(ref oBookMark[2]).Range.Text = "女";47 oDoc.Bookmarks.get_Item(ref oBookMark[3]).Range.Text = "1987.06.07";48 oDoc.Bookmarks.get_Item(ref oBookMark[4]).Range.Text = "賀州";49 //彈出保存文件對話框,保存生成的Word50 SaveFileDialog sfd = new SaveFileDialog();51 sfd.Filter = "Word Document(*.doc)|*.doc";52 sfd.DefaultExt = "Word Document(*.doc)|*.doc";53 if (sfd.ShowDialog() == DialogResult.OK)54 {55 object filename = sfd.FileName;56 57 oDoc.SaveAs(ref filename, ref oMissing, ref oMissing, ref oMissing,58 ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,59 ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,60 ref oMissing, ref oMissing);61 oDoc.Close(ref oMissing, ref oMissing, ref oMissing);62 //關(guān)閉word63 oWord.Quit(ref oMissing, ref oMissing, ref oMissing);64 }65 }66 }67 }
8、運行后直接彈出保存文件對話框(因為寫在了Load事件里)。保存為Doc文檔,打開發(fā)現(xiàn)效果如下(圖5)
(圖5)
至此,大功告成,文檔中的內(nèi)容正是我們所設(shè)定的。一個簡單而又快捷的固定格式Word文檔輸出就完成了。
希望對需要的朋友有幫助。
以上完整教程為個人勞動成果,轉(zhuǎn)載請注明出處。謝謝。
新聞熱點
疑難解答