今天正好有人問我,怎麼生成一個報表式的Word文檔。
就是文字的樣式和位置相對固定不變,只是裡面的內容從數據中讀取。
我覺得類似這種的一般用第三方報表來做比較簡便。但既然要求了Word,只好硬著頭皮來。
網上的方法大多數都是從一個GridView或表中獲得數據後向Word中添加一個表格。
(圖1)
我們使用Word模板來實現,方法如下:
1、首先需要向工程中的“引用”加入Word類庫的引用(圖2)。我是Office 2003。其他版本可能略有不同。在COM裡面
圖2)
2、用Word設計一個模板文檔(後綴名*.dot)。(圖3)
圖3)
3、向模板中的需要顯示動態內容的地方添加書簽。具體方法是。光標落到欲插入內容的地方,選擇菜單欄上的“插入”——〉“書簽”(圖4)
圖4)在“備注:”的後面添加一個書簽,名字叫"beizhu"。書簽名字不能以數字開頭。
4、完成全部書簽的添加,依次應該是:
位置 書簽名 備注右側 beizhu 姓名右側單元格 name 性別右側單元格 sex 生日右側單元格 birthday 籍貫右側單元格 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 : Form 14 { 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/fujie724 25 //********************************************** 26 object oMissing = System.Reflection.Missing.Value; 27 //創建一個Word應用程序實例 28 Microsoft.Office.Interop.Word._Application oWord = new Microsoft.Office.Interop.Word.Application(); 29 //設置為不可見 30 oWord.Visible = false; 31 //模板文件地址,這裡假設在X盤根目錄 32 object oTemplate = "d://template.dotx"; 33 //以模板為基礎生成文檔 34 Microsoft.Office.Interop.Word._Document oDoc = oWord.Documents.Add(ref oTemplate, ref oMissing, ref oMissing, ref oMissing); 35 //聲明書簽數組 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 //賦值任意數據到書簽的位置 44 oDoc.Bookmarks.get_Item(ref oBookMark[0]).Range.Text = "使用模板實現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 //彈出保存文件對話框,保存生成的Word 50 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 //關閉word 63 oWord.Quit(ref oMissing, ref oMissing, ref oMissing); 64 } 65 } 66 } 67 }
8、運行後直接彈出保存文件對話框(因為寫在了Load事件裡)。保存為Doc文檔,打開發現效果如下(圖5)
(圖5)
至此,大功告成,文檔中的內容正是我們所設定的。一個簡單而又快捷的固定格式Word文檔輸出就完成了。
希望對需要的朋友有幫助。
以上完整教程為個人勞動成果,轉載請注明出處。謝謝。