C#簡單實現動態數據生成Word文檔並保存

今天正好有人問我,怎麼生成一個報表式的Word文檔。數組

就是文字的樣式和位置相對固定不變,只是裏面的內容從數據中讀取。ui

我以爲相似這種的通常用第三方報表來作比較簡便。但既然要求了Word,只好硬着頭皮來。spa

網上的方法大多數都是從一個GridView或表中得到數據後向Word中添加一個表格。.net

目標效果

(圖1)設計

咱們使用Word模板來實現,方法以下:code

一、首先須要向工程中的「引用」加入Word類庫的引用(圖2)。我是Office 2003。其餘版本可能略有不一樣。在COM裏面orm

WORD DLL

(圖2)blog

二、用Word設計一個模板文檔(後綴名*.dot)。(圖3)教程

設計模板

(圖3)事件

三、向模板中的須要顯示動態內容的地方添加書籤。具體方法是。光標落到欲插入內容的地方,選擇菜單欄上的「插入」——〉「書籤」(圖4)

添加「備註」的書籤

(圖4)在「備註:」的後面添加一個書籤,名字叫"beizhu"。書籤名字不能以數字開頭。

四、完成所有書籤的添加,依次應該是:

 

位置 書籤名
備註右側 beizhu
姓名右側單元格 name
性別右側單元格 sex
生日右側單元格 birthday
籍貫右側單元格 hometown

五、保存這個已完成的模板到任意路徑,例如 X:/template.dot

六、在工程的窗體的類中添加引用的命名空間

七、爲了省事,直接在窗體的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 }

 

八、運行後直接彈出保存文件對話框(由於寫在了Load事件裏)。保存爲Doc文檔,打開發現效果以下(圖5)

最後效果

(圖5)

至此,大功告成,文檔中的內容正是咱們所設定的。一個簡單而又快捷的固定格式Word文檔輸出就完成了。

 

但願對須要的朋友有幫助。

 

以上完整教程爲我的勞動成果,轉載請註明出處。謝謝。

相關文章
相關標籤/搜索