• .NET使用NPOI读取Word模板并替换关键字并下载


    NPOI 是 POI 项目的 .NET 版本。POI是一个开源的java读写ExcelWord等微软OLE2组件文档的项目。

    使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写

    NPOI下载地址:http://npoi.codeplex.com/

    以下代码仅供参考,请根据实际需求进行修改。

    public MemoryStream Export()
            {
      
                    string filepath = Server.MapPath("/word/xmxx.docx");
                    using (FileStream stream = File.OpenRead(filepath))
                    {
                        XWPFDocument doc = new XWPFDocument(stream);
                        //遍历段落
                        foreach (var para in doc.Paragraphs)
                        {
                            ReplaceKey(para);
                        }
                        //遍历表格
                        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);
                                    }
                                }
                            }
                        }
                        using (MemoryStream ms = new MemoryStream())
                        {
                            doc.Write(ms);
                            return ms;
                        }
                    }
    
            }
            PRivate void ReplaceKey(XWPFParagraph para)
            {
                BLL.XmxxBLL XmxxBLL = new BLL.XmxxBLL();
                Model.Xmxx model = new Model.Xmxx();
                model = XmxxBLL.GetModel(20);
    
                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)
                    {
                        if (text.Contains("{$xmxx." + p.Name + "}"))
                        {
                            text = text.Replace("{$xmxx." + p.Name + "}", TM.Common.StringHelper.ToString(p.GetValue(model, null)));
                        }
                    }
                    runs[i].SetText(text, 0);
                }
            }
            protected void Button1_Click(object sender, EventArgs e)
            {
                using (MemoryStream ms = Export())
                {
                    Response.ContentType = "application/vnd.ms-word";
                    Response.ContentEncoding = Encoding.UTF8;
                    Response.Charset = "";
                    Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode("123.doc", Encoding.UTF8));
                    Response.BinaryWrite(Export().GetBuffer());
                    Response.End();
                }
            }
    

      

  • 相关阅读:
    MySQL数据库学习【第三篇】增删改查操作
    MySQL数据库学习【第二篇】基本操作和存储引擎
    MySQL数据库学习【第一篇】数据库安装
    python全栈开发基础【第二十七篇】IO模型
    python全栈开发基础【第二十六篇】(concurrent.futures模块、协程、Greenlet、Gevent)
    python基础之带参数装饰器和迭代器
    python基础之闭包函数与装饰器
    逻辑回归
    朴素贝叶斯
    决策树
  • 原文地址:https://www.cnblogs.com/Nigel/p/10412913.html
Copyright © 2020-2023  润新知