C#導出Word,Excel的方法有不少,此次由於公司的業務需求,須要導出內容豐富(文字,表格,圖片)的報告,之前的方法很差使,因此尋找新的導出方法,在網上找到了經過模板文件導出Word的方法,記錄一下過程.ide
一:模板的建立 字體
經過模板導出,確定須要先建立模板,而後顧名思義就是將模板中提早設置好的佔位符,經過程序替換爲想輸出的內容便可;spa
新建word文件(必須爲docx或者dotx文件),放在程序根目錄下,在須要位置 插入-文檔部件-域,3d
域名:MacroButton
宏名:DoFieldClick
顯示文字:這個本身設置,爲了與模板其餘文字區分,能夠用"[]"括起來.
須要多少替換內容,添加多少域便可.code
二:添加項目 對象
在解決方案中添加項目WordMLHelper,在原項目中添加對WordMLHelper的引用後能夠直接調用.
WordMLHelper代碼下載
blog
三:調用方法 索引
首先肯定模板文件位置和導出文件的生成路徑.接口
private string mubanFile = "muban.docx"; private string outputPath = @"C:\Users\zz\Desktop\test1.docx";
1.打開模板文件,獲取全部填充域圖片
1 string templatePath = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory 2 , mubanFile); 3 List<TagInfo> tagInfos = wordMLHelper.GetAllTagInfo(File.OpenRead(templatePath));
2.遍歷全部填充域,替換填充域內容
鎖定填充域的話,有兩種方法,一是根據填充域的提示文字,如"[文字]",二是根據填充域的索引,如if(tagInfos[i].Seq==2),則是找到索引爲2的填充域
1 for (int i = 0; i < tagInfos.Count; i++) 2 { 3 //填充域有兩種類型,1:段落或圖片,2:表格 4 //對填充域填充時需先判斷填充域類型 5 if (tagInfos[i].Tbl == null) 6 { 7 if (string.Equals(tagInfos[i].TagTips.Trim(), "[文字]")) 8 { 9 TxtInfo txtInfo = new TxtInfo(); 10 txtInfo.Content = "已經成功替換"; 11 txtInfo.ForeColor = "00ff00"; 12 //txtInfo.HightLight = HighlightColor.Blue; 13 tagInfos[i].AddContent(txtInfo); 14 } 15 if (string.Equals(tagInfos[i].TagTips.Trim(), "[圖片]")) 16 { 17 ImgInfo imgInfo = new ImgInfo(); 18 imgInfo.ImgPath = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory 19 , "./image/a1.jpg"); 20 imgInfo.Width = 200; 21 imgInfo.Height = 200; 22 tagInfos[i].AddContent(imgInfo); 23 } 24 } 25 else 26 { 27 TableStructureInfo tblInfo = tagInfos[i].Tbl; 28 if (tagInfos[i].Seq==2) 29 { 30 for (int j = 0; j < 3; j++) 31 { 32 RowStructureInfo row = new RowStructureInfo(); 33 34 for (int k = 0; k < 3; k++) 35 { 36 CellStructureInfo cell = new CellStructureInfo(); 37 TxtInfo txtInfo = new TxtInfo(); 38 txtInfo.Content = "第" + (j + 1) + "行,第" + (k + 1) + "列"; 39 txtInfo.Size = 25; 40 txtInfo.ForeColor = "0000ff"; 41 cell.AddContentLine(txtInfo); 42 row.AddCell(cell); 43 } 44 tblInfo.AddRow(row); 45 } 46 } 47 48 } 49 }
3.保存文件
1 if (!string.IsNullOrEmpty(outputPath)) 2 { 3 templatePath = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory 4 , mubanFile); 5 wordMLHelper.GenerateWordDocument(File.OpenRead(templatePath) 6 , outputPath 7 , tagInfos); 8 9 Assistance.RemoveAllTmpFile();// 刪除全部臨時文件 10 //Response.Redirect(Request.Url.AbsoluteUri); 11 }
四:完成
調用方法很簡單,隨着模板的修改,能夠快速生成須要格式多樣內容豐富的Word文檔,感謝您的閱讀與評論.
五:補充
引用WordMLHelper.dll。
1.調用WordMLHelper的GetAllTagInfo方法(只接受後綴爲.docx和.dotx的模板文件路徑)獲取word標準模板的填充域集合List<TagInfo>;
2.填充域對象(TagInfo)的Tbl屬性(類型爲TblStructureInfo)表示表格單元格類型的填充域對象(默認值爲null表明該填充域非表格單元格類型),可經過Tbl[rowIndex,cellIndex]的方式獲取表格的單元格,並調用單元格(CellStructureInfo)的AddContent和AddContentLine(填充內容後換行)方法填充文本和圖片;
3.Tbl屬性的TblType變量表示該表格是僅含水平表頭(HORIZONTAL_HEADER)仍是含水平和垂直表頭(HORIZONTAL_VERTICAL_HEADER)。
4.根據須要將文本(TxtInfo對象)、圖片(ImgInfo對象)和表格(TblInfo對象)經過調用填充域(TagInfo對象)的AddContent和AddContentLine(填充內容後換行)方法填充到填充域中。
5.TxtInfo、ImgInfo和TblInfo類中含高度、寬度等樣式屬性。
6.若填充內容爲不含樣式的純文本內容,則可經過WordMLHelper中的FillContentWithoutStyle方法將文本信息填充至填充域。
7.若要將不含樣式的純文本內容填充到表格單元格類型(僅含水平表頭)的填充域,則可調用WordMLHelper中的FillContentToTable(TagInfo tagInfo, DataTable dt)。
8.若要生成不含樣式的純文本內容的表格,則可調用WordMLHelper中的FillContentToTable(TagInfo tagInfo, DataTable dt)。
9.調用WordMLHelper的GenerateWordDocument方法便可生成word文檔。
接口
WordMLHelper:操做模板類 方法以下: GetAllTagInfo:獲取模板填充域及附加信息 FillContentToTable:快速填充、生成純文本表格 FillContentWithoutStyle:快速填充純文本內容到填充域 GenerateWordDocument:根據模板生成word文檔 TagInfo:填充域類 屬性以下: Seq:填充域的序號 TagTips:填充域的提示信息 Tbl:表格單元格填充域類型對象(默認爲null,表示非表格單元格填充域類型) TxtInfo:文本類型填充內容類 屬性以下: Size:字體大小 ForeColor: 字體顏色 HightLight: 背景色(高亮) FontFamily: 字體 Content: 文本內容 ImgInfo:圖片類型填充內容類 屬性以下: Width: 圖片寬度 Height: 圖片高度 ImgPath: 圖片路徑 TblInfo:表格類型填充內容類 屬性以下: Width: 表格寬度 Rows: 行集合 方法以下: AddRow: 填充行 RowInfo: 表格類型填充內容的表格行類 屬性以下: Cells: 單元格 方法以下: AddCell: 填充單元格 CellInfo: 表格類型填充內容的單元格類 屬性以下: Width: 單元格寬度 ColSpan: 列合併數(默認爲1) RowSpan: 行合併數(默認爲1) 方法以下: AddContent: 添加填充內容 AddContentLine: 添加填充內容並換行 TableStructureInfo: 表格單元格類型的填充域類 屬性以下: TblType: TblType枚舉類型,表示表格是僅含水平表頭仍是含水平和垂直表頭 Rows: 行集合 方法以下: AddRow: 填充行 RowStructureInfo: 表格單元格類型的填充域的表格行類 屬性以下: Index: 該行在模板表格中的行索引(只讀) Cells: 單元格集合 方法以下: AddCell: 添加單元格 CellStructureInfo: 表格單元格類型的填充域的單元格類 屬性以下: Index: wordML中的列索引(大於或等於該單元格實體在行實體中的索引值)(只讀) ColSpan: 合併列數目(默認爲1,便是不合並)(只讀) RowSpan: 合併行數目(默認爲1,便是不合並)(只讀) Tips: 單元格中的提示內容(只讀) IsTemplate: 該單元格是否可填寫(只讀) 方法以下: AddContent: 添加填充內容 AddContentLine: 添加填充內容並換行