原文連接:http://www.cnblogs.com/birchlee/archive/2013/05/23/3094632.html
1.建立word模版,
使用MergeFeild
綁定數據
新建一個Word文檔,命名爲Template.doc
注意:這裏並非輸入"《」和「》」就能夠了,而是必須在菜單的"插入→文檔部件→域」找到MergeField並輸入相應的域名
2.使用數組提供數據源
string tempPath = Server.MapPath("~/Docs/Temp/Template.doc");
string outputPath = Server.MapPath("~/Docs/Output/Template.doc");
//載入模板
var doc = new Document(tempPath);
//提供數據源
String[] fieldNames = new String[] {"UserName", "Gender", "BirthDay", "Address"};
Object[] fieldValues = new Object[] {"張三", "男", "1988-09-02", "陝西咸陽"};
//合併模版,至關於頁面的渲染
doc.MailMerge.Execute(fieldNames, fieldValues);
//保存合併後的文檔
doc.Save(outputPath);
//在WebForm中,保存文檔到流中,使用Response. BinaryWrite輸出該文件
var docStream = new MemoryStream();
doc.Save(docStream, SaveOptions.CreateSaveOptions(SaveFormat.Doc));
Response.ContentType = "application/msword";
Response.AddHeader("content-disposition", "attachment; filename=Template.doc");
Response.BinaryWrite(docStream.ToArray());
Response.End();
//在MVC中採用,保存文檔到流中,使用base.File輸出該文件
var docStream = new MemoryStream();
doc.Save(docStream, SaveOptions.CreateSaveOptions(SaveFormat.Doc));
return base.File(docStream.ToArray(), "application/msword","Template.doc");
3.
建立循環數據的模版,這裏的循環數據相似頁面的for結構,不拘泥於形式table
«TableStart:UserList»html
姓名:«UserName»數組
«TableEnd:UserList»app
4.使用DataTable提供數據源ui
//建立名稱爲UserList的DataTablespa
DataTable table=new DataTable("UserList");orm
table.Columns.Add("UserName");htm
table.Columns.Add("Gender");對象
table.Columns.Add("BirthDay");blog
table.Columns.Add("Address");排序
//----------------------------------------------------------------------------------------------------
//載入模板
var doc = new Document(tempPath);
//提供數據源
var datatable= GetDataTable();
//合併模版,至關於頁面的渲染
doc.MailMerge.ExecuteWithRegions(datatable);
var docStream = new MemoryStream();
doc.Save(docStream, SaveOptions.CreateSaveOptions(SaveFormat.Doc));
return base.File(docStream.ToArray(), "application/msword","Template.doc");
5.綁定帶有子循環數據模版
6.使用DataSet提供數據源
//用戶表結構
DataTable table = new DataTable("UserList");
table.Columns.Add(new DataColumn("Id", typeof(int)));
table.Columns.Add("UserName");
table.Columns.Add("Gender");
table.Columns.Add("BirthDay");
table.Columns.Add("Address");
//分數表結構
DataTable table = new DataTable("ScoreList");
table.Columns.Add(new DataColumn("UserId", typeof(int)));
table.Columns.Add("Name");
table.Columns.Add("Score");
//----------------------------------------------------------------------------------------------------
//載入模板
var doc = new Document(tempPath);
//提供數據源
DataSet dataSet = new DataSet();
var userTable= GetUserDataTable();
var userScoreTable= GetUserScoreDataTable();
dataSet.Tables.Add(userTable);
dataSet.Tables.Add(userScoreTable);
dataSet.Relations.Add(new DataRelation("ScoreListForUser",userTable.Columns["Id"], userScoreTable.Columns["UserId"]));
//合併模版,至關於頁面的渲染
doc.MailMerge.ExecuteWithRegions(dataSet);
var docStream = new MemoryStream();
doc.Save(docStream, SaveOptions.CreateSaveOptions(SaveFormat.Doc));
return base.File(docStream.ToArray(), "application/msword","Template.doc");
7.模版上使用書籤,插入標記位置
選中文檔中的文字,在菜單的"插入→書籤」指定書籤的名稱,排序依據選定爲位置,添加一個新書籤。選中的文字爲書籤的Text屬性,這裏是爲了方便查看。也能夠直接插入一個書籤並指定位置,只是不明顯。
8.在書籤位置插入另外一個文檔的內容
//載入模板
var doc = new Document(tempPath);
var doc1 = new Document(tempPath1);//新文檔
//找到名稱爲PositionFlag的書籤
var bookmark= doc.Range.Bookmarks["PositionFlag"];
//清空書籤的文本
bookmark.Text = "";
//使用DocumentBuilder對象插入一些文檔對象,如插入書籤,插入文本框,插入複選框,插入一個段落,插入空白頁,追加或另外一個word文件的內容等。
var builder = new DocumentBuilder(doc);
//定位到指定位置進行插入操做
builder.MoveToBookmark("PositionFlag");
//在PositionFlag書籤對應的位置,插入另外一個文檔的內容。
InsertDocument(bookmark.BookmarkStart.ParentNode, doc1);