NPOI导出Word操作

近期有需求根据数据库信息导出至Word文档,之前知道NPOI可以导出Word文档,因一直没有使用过,所以具体用法未知。

经过多个前人网页的过滤,发现NPOI的资料比较少,最终发现一个网页,对NPOI对Word的导出有了实质性的突破。
感谢这个作者!

下面是自己总结的NPOI对Word导出的源码片段!

1 Nuget安装NPOI

通过Nuget管理器,安装NPOI即可

2 帮助类

WordHelper.cs
这个类并不是帮助类,只是根据自己的需求,封装了几个方法。

 public class WordHelper
    {
        //1 创建标题
        /// <summary>
        /// 创建标题       
        /// 
        /// </summary>
        /// <param name="doc"></param>
        /// <param name="title"></param>
        public void SetDocTitle(XWPFDocument doc, string title)
        {
            XWPFParagraph p0 = doc.CreateParagraph();//创建段落
            p0.Alignment = ParagraphAlignment.CENTER;//居中显示
            XWPFRun r0 = p0.CreateRun();
            //设置字体
            r0.FontFamily = "宋体";
            //设置字体大小
            r0.FontSize = 20;
            //字体是否加粗,这里加粗了
            r0.IsBold = true;
            r0.SetText(title);//写入文本
        }
        /// <summary>
        /// 创建H1
        /// </summary>
        /// <param name="doc"></param>
        /// <param name="title"></param>
        public void SetDocH1(XWPFDocument doc, string title)
        {
            XWPFParagraph p0 = doc.CreateParagraph();//创建段落
            p0.Alignment = ParagraphAlignment.LEFT;//靠左显示
            XWPFRun r0 = p0.CreateRun();
            r0.IsCapitalized = true;
            //设置字体
            r0.FontFamily = "宋体";
            //设置字体大小
            r0.FontSize = 16;
            //字体是否加粗,这里加粗了
            r0.IsBold = true;
            r0.SetText(title);//写入文本

        }

        public void SetDocH2(XWPFDocument doc, string title)
        {
            XWPFParagraph p0 = doc.CreateParagraph();//创建段落
            p0.Alignment = ParagraphAlignment.LEFT;//靠左显示
            XWPFRun r0 = p0.CreateRun();
            r0.IsCapitalized = true;
            //设置字体
            r0.FontFamily = "宋体";
            //设置字体大小
            r0.FontSize = 14;
            //字体是否加粗,这里加粗了
            r0.IsBold = true;
            r0.SetText(title);//写入文本

        }

        public void SetTableTitle(XWPFDocument doc, string title)
        {
            XWPFParagraph p1 = doc.CreateParagraph();
            p1.Alignment = ParagraphAlignment.LEFT;
            XWPFRun r1 = p1.CreateRun();
            r1.SetText(title);
            
        }

        public void SetTable(XWPFDocument doc, DataTable dt)
        {
            if (dt != null && dt.Rows.Count > 0)
            {
                int rowCount = dt.Rows.Count;
                int colCount = dt.Columns.Count;
                XWPFTable table = doc.CreateTable(rowCount + 1, colCount);
                int colWidth = 38 / colCount;
                colWidth = colWidth == 0 ? 1 : colWidth;
                //设置宽度
                for (int i = 0; i < colCount; i++)
                {
                    table.SetColumnWidth(i, (ulong)colWidth * 256);//设置列的宽度
                }
                //填写表的第一行
                for (int i = 0; i < colCount; i++)
                {
                    string colName = dt.Columns[i].ColumnName;
                    table.GetRow(0).GetCell(i).SetText(colName);
                }

                //填写表的内容
                for (int i = 0; i < rowCount; i++)
                {
                    for (int j = 0; j < colCount; j++)
                    {
                        string value = dt.Rows[i][j].ToString();
                        table.GetRow(i + 1).GetCell(j).SetText(value);
                    }
                }
            }
        }

    }

3 调用

 			XWPFDocument docx = new XWPFDocument();
            MemoryStream ms = new MemoryStream();
            WordHelper wordHelper = new WordHelper();
            //1 设置标题
            wordHelper.SetDocTitle(docx, "未注释的表");
            2 创建模块信息
            wordHelper.SetDocH1(docx, "1 模块");
            wordHelper.SetTableTitle(docx, "模块编码名称:" + moduleInfo.ModuleName);

            //3 创建表的信息
            DataTable dtTables = TableInfoBiz.GetTableInfoByModule(moduleInfo.ModuleCode);
            wordHelper.SetTable(docx, dtTables);
            docx.Write(ms);
            using (FileStream fs = new FileStream("Word/未找到注释的表.docx", FileMode.Create, FileAccess.Write))
            {
                byte[] data = ms.ToArray();
                fs.Write(data, 0, data.Length);
                fs.Flush();
            }
            ms.Close();

4 总结

  • NPOI 可以生成Word文档
  • NPOI对于Word操作的API解释很少
  • 目前尚未研究出在Word中生成对应 “标题一”,“正文” 等格式的设置。因每个人Word的设置不同,因此感觉NPOI应该没有提供该功能。
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

感谢一路走过的人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值