发布时间:2020-05-07 14:54:44来源:本站阅读(1053)
NPOI导出WORD功能。
先做WORD模板,模板里做好标记,把标记替换成想要的内容。然后保存。大致就这么个套路。
我的功能中WORD里是有表格的,想的做表格有点复杂 ,就直接把表格在模板中做好,然后表格内容用标签替换。
先上代码
/// <summary>
/// 操作WORD
/// </summary>
/// <param name="wordModelPath"></param>
/// <param name="wordSavePath"></param>
/// <param name="replaceContent"></param>
public static void WordReplaceValue(string wordModelPath,string wordSavePath, List<Tuple<string,string>> replaceContent)
{
var fs = new FileStream(wordModelPath, FileMode.OpenOrCreate, FileAccess.ReadWrite);
var docx = new XWPFDocument(fs);//打开97-03版本的doc文件报错,打开docx正常
#region 遍历word中的段落
foreach (var para in docx.Paragraphs)
{
if (replaceContent.Any())
{
foreach (var rc in replaceContent)
{
var txt = para.ParagraphText;
if (!txt.Contains(rc.Item1)) continue;
var nTxt = txt.Replace(rc.Item1, rc.Item2);
para.ReplaceText(txt,nTxt);
}
}
}
#endregion
#region 遍历表格
foreach (var table in docx.Tables)
{
foreach (var row in table.Rows)
{
foreach (var cell in row.GetTableCells())
{
foreach (var para in cell.Paragraphs)
{
if (replaceContent.Any())
{
foreach (var rc in replaceContent)
{
var txt = para.ParagraphText;
if (!txt.Contains(rc.Item1)) continue;
var nTxt = txt.Replace(rc.Item1, rc.Item2);
para.ReplaceText(txt, nTxt);
}
}
}
}
}
}
#endregion
var fsOut = new FileStream(wordSavePath, FileMode.Create,FileAccess.Write);
docx.Write(fsOut);
fs.Close();
fs.Dispose();
fsOut.Close();
fsOut.Dispose();
}
说下参数,wordModelPath是模板路径,wordSavePath是替换好内容后的保存路径,replaceContent 是替换的内容。Tuple的ITEM1是标签,ITEM2是替换内容。
看起来循环嵌套有点多哈,先用的哇,对性能要求不高,以实现为主。
这是我模板的内容。
使用代码
var rc=new List<Tuple<string,string>>();
rc.Add(new Tuple<string, string>("{title}","万岁"));
rc.Add(new Tuple<string, string>("{foot}", "大笑啊hahahaha"));
NPOIHelper.WordReplaceValue(HttpContext.Server.MapPath("/WordModel/001.docx"), HttpContext.Server.MapPath("/Export/001.docx"),rc);
这是执行后导出的效果
关键字: NPOI
上一篇: nginx配置反向代理
1563
1402
1564
1591
1385
1415
956
1373
862
1618
9593
5996
5523
5116
4567
4274
3415
3336
3335
3269