在此我们介绍以模板方式载入内容导出Word文档
一、获取模板(XWPFDocument doc)
1.首先获取模板,然后把获取的模板实例化为NPOI的文档对象进行操作:
FileStream stream = File.OpenRead("模板文件地址") //FileStream stream = new FileStream("模板文件地址", FileMode.Open, FileAccess.Read) XWPFDocument myDoc = new XWPFDocument(stream);
2.处理doc,代码控制编辑文档
//遍历段落,替换内容 foreach (var para in myDoc.Paragraphs) { //替换文字 ExtensionHelper.ExtensionHelper.ReplaceKey(实体对象, para);
//替换图片 if (para.ParagraphText.Contains("QyslPic"))//图片占位符 { para.ReplaceText(para.ParagraphText, string.Empty); XWPFRun newRrun = para.CreateRun(); using (FileStream fsImg = new FileStream("图片地址", FileMode.Open, FileAccess.Read)) { newRrun.AddPicture(fsImg, 11, "图片地址", 520 * 9525, 269 * 9525); } para.Alignment = ParagraphAlignment.CENTER; } } //遍历table,替换单元格内容 foreach (var table in myDoc.Tables) { foreach (var row in table.Rows) { foreach (var cell in row.GetTableCells()) { foreach (var para in cell.Paragraphs) { //替换文字 ExtensionHelper.ExtensionHelper.ReplaceKey(实体对象, para); } } } }
3.处理doc后,生成新的文件,写入doc ,生成word完成。
FileStream file = new FileStream("生成文件新路径+文件名", FileMode.Create, FileAccess.Write); doc.Write(file); file.Close();
doc就是我们获取到的模板的所有内容。
4.替换文字方法
/// <summary> /// word模板内容替换 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="etity">实体数据</param> /// <param name="para">段落</param> public static void ReplaceKey<T>(T etity, XWPFParagraph para) { Type entityType = typeof(T); PropertyInfo[] properties = entityType.GetProperties(); var runs = para.Runs; string text = ""; foreach (var run in runs) { text = run.ToString(); foreach (var p in properties) { string propteryName = p.Name;//Word模板中设定的需要替换的标签 object value = p.GetValue(etity); if (value == null) { value = ""; } if (text.Contains(propteryName)) { text = text.Replace(propteryName, value.ToString()); } run.SetText(text);//替换标签文本(重要) } } }
二、文本处理(XWPFParagraph para)
doc.Paragraphs 获取到文档里的所有的段落对象;
para.ParagraphText 获取段落的文本数据;
para.ReplaceText(要被替换的文本,替换文本) 替换段落的文本(模板能实现的关键)
三、表格处理
1. 获取处理(XWPFTable table)
doc.Tables:获取文档里的所有的表格对象,doc.Tables获取的只是Word中最外层的表格,不包含嵌套内层的。获取嵌套单元格可使用cell.Tables;
2. 表格行处理(XWPFTableRow row)
row.Rows:获取表格所有行;
3. 表格单元格处理(XWPFTableCell cell)
row.GetTableICells():获取表格行的所有单元格;获取到单元格之后就可以获取单元格里的文本段落(Paragraphs)并且进行文本替换
标签:Word,para,C#,doc,NPOI,获取,var,替换,模板 From: https://www.cnblogs.com/panyaoqi/p/17198602.html