C#使用NPOI生成Word文档的方法

在此我们介绍以模板载入内容导出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完成;doc就是我们获取到的模板的所有内容。

FileStream file = new FileStream("生成文件新路径+文件名", FileMode.Create, FileAccess.Write);
doc.Write(file);
file.Close();

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)并且进行文本替换

四、插入图表

图表插入暂时未研究,欢迎各位大神指教补充。

posted @ 2023-03-09 15:25  你去了龙城我留了姑苏  阅读(792)  评论(0编辑  收藏  举报