NPOI读取Word模板并保存

本文章参考链接
https://www.cnblogs.com/Jerrycjc/archive/2016/05/06/5465534.html

安装组件NPOI

方法一:
在程序包管理器控制台中输入
PM> Install-Package NPOI
下载最新版本NPOI

方法二:
Tools -> NuGet Package Manager -> Manage Packages for Solution
在Browse中查找NPOI,下载安装。注意Package source选nuget.org

//----------------------------引用了NPOI-------------------------------- 
using NPOI.XWPF.UserModel;
public static void Export()
{
    string filepath = HttpContext.Current.Server.MapPath("~/simpleTable.docx");
    Test tt = new Test { name = "cjc", age = 29 };
    using (FileStream stream = File.OpenRead(filepath))
    {
        XWPFDocument doc = new XWPFDocument(stream);
        //遍历段落                  
        foreach (var para in doc.Paragraphs)
        {
            ReplaceKey(para, tt);
        }                    
        //遍历表格      
        var tables = doc.Tables;
        foreach (var table in tables)
        {
            foreach (var row in table.Rows)
            {
                foreach (var cell in row.GetTableCells())
                {
                    foreach (var para in cell.Paragraphs)
                    {
                        ReplaceKey(para, tt);
                    }
                }
            }
        }

        FileStream out1 = new FileStream(HttpContext.Current.Server.MapPath("~/simpleTable"+DateTime.Now.Ticks+".docx"), FileMode.Create);
        doc.Write(out1);
        out1.Close();
    }
}
private static void ReplaceKey(XWPFParagraph para, object model)
{
    string text = para.ParagraphText;
    var runs = para.Runs;
    string styleid = para.Style;
    for (int i = 0; i < runs.Count; i++)
    {
        var run = runs[i];
        text = run.ToString();
        Type t = model.GetType();
        PropertyInfo[] pi = t.GetProperties();
        foreach (PropertyInfo p in pi)
        {
            //$$与模板中$$对应,也可以改成其它符号,比如{$name},务必做到唯一
            if (text.Contains("$" + p.Name + "$"))
            {
                text = text.Replace("$" + p.Name + "$", p.GetValue(model, null).ToString());
            }
        }
        runs[i].SetText(text, 0);
    }
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值