NPOI操作WORD

发布时间:2020-05-07 14:54:44来源:本站阅读(958)

    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