C#通過模板導出Word(文字,表格,圖片)


  C#導出Word,Excel的方法有很多,這次因為公司的業務需求,需要導出內容豐富(文字,表格,圖片)的報告,以前的方法不好使,所以尋找新的導出方法,在網上找到了通過模板文件導出Word的方法,記錄一下過程.

一:模板的創建                               

  通過模板導出,肯定需要先創建模板,然后顧名思義就是將模板中提前設置好的占位符,通過程序替換為想輸出的內容即可;

  新建word文件(必須為docx或者dotx文件),放在程序根目錄下,在需要位置 插入-文檔部件-域,

  域名:MacroButton
  宏名:DoFieldClick
  顯示文字:這個自己設置,為了與模板其他文字區分,可以用"[]"括起來.
  需要多少替換內容,添加多少域即可.

二:添加項目                                 

 

  在解決方案中添加項目WordMLHelper,在原項目中添加對WordMLHelper的引用后可以直接調用.
  WordMLHelper代碼下載

三:調用方法                      

  首先確定模板文件位置和導出文件的生成路徑.

 

        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));
View Code

  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             }
View Code

  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             }
View Code

四:完成                                        

  調用方法很簡單,隨着模板的修改,可以快速生成需要格式多樣內容豐富的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: 添加填充內容並換行 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM