首页后端开发ASP.NETC# 使用NPOI生成Word文档(按照模板)

C# 使用NPOI生成Word文档(按照模板)

时间2024-01-30 23:08:02发布访客分类ASP.NET浏览704
导读:收集整理的这篇文章主要介绍了C# 使用NPOI生成Word文档(按照模板),觉得挺不错的,现在分享给大家,也给大家做个参考。项目需要集成word导出,做的时候网上文档资源不是很多,也比较杂乱,所以查了查,整理了整理,做个记录,也顺便把NP...
收集整理的这篇文章主要介绍了C# 使用NPOI生成Word文档(按照模板),觉得挺不错的,现在分享给大家,也给大家做个参考。

项目需要集成word导出,做的时候网上文档资源不是很多,也比较杂乱,所以查了查,整理了整理,做个记录,也顺便把NPOI操作Word文档的一些基本操作分享给有需要的朋友。

本篇包括生成Word对word文本的操作,表格的操作,以及图片的操作,都为生成word基础的一些操作。

以下只是我的个人理解所得,大家有什么更好的想法欢迎补充。

VS2017、右键解决方案,管理NuGet程序包,搜索并为项目安装NPOI程序包,并引用:
using NPOI.XWPF.UserModel;
本编使用NPOI版本为2.3.0
下面进入正题··
一、 获取模板(XWPFDocument doc)
使用模板,首先获取模板,然后把获取的模板实例化为NPOI的文档对象进行编辑操作:
using (FileStream stream = File.OPEnRead(“模板文件地址”)){
XWPFDocument doc = new XWPFDocument(stream);
//处理doc,代码控制编辑文档。
}
处理doc后,生成新的文件,写入doc ,生成word完成。
FileStream file = new FileStream(生成文件路径+文件名, FileMode.Create, FileAccess.WrITe);
doc.Write(file);
file.Close();
doc就是我们获取到的模板的所有内容。
还有一点本编使用模板均为docx后缀文件,doc修改docx读取报错,需要另存为doxc文档。
二、 文本处理(XWPFParagraph para)
doc.Paragraphs 获取到文档里的所有的段落对象;
para.ParagraphText 获取段落的文本数据;
para.ReplaceText(要被替换的文本,替换文本) 替换段落的文本(模板能实现的关键)

XWPFParagraph的官方参考文档

三、 表格处理(XWPFTable table)
doc.Tables 获取文档里的所有的表格对象;
这里有必要多一嘴,doc.Tables获取的只是Word中最外层的表格,不包含嵌套内层的。
获取嵌套单元格可使用cell.Tables;
(一) 表格行处理(XWPFTableRow row)
row.Rows 获取表格所有行;
(二) 表格单元格处理(XWPFTableCell cell)
row.GetTableiCells() ; 获取表格行的所有单元格;
获取到单元格之后就可以获取单元格里的文本段落(Paragraphs)并且进行文本替换
(三) 水平合并行单元格

CT_Tc cttcofRowThird = cell.GetCTTc();
    CT_TcPR ctProfRowThird = cttcofRowThird.AddNewTcPr();
    ctProfRowThird.gridSpan = new CT_DecimalNumber();
    ctProfRowThird.gridSpan.val = num.ToString();
    //合并num列

(四) 垂直合并列单元格

ListXWPFTableRow>
     rows所有要合并的行的XWPFTableRow对象集合。XWPFTableCell cellFirstofThird = 第一行要合并的单元格对象;
    CT_Tc cttCFirstofThird = cellFirstofThird.GetCTTc();
    CT_TcPr ctPrFirstofThird = cttcFirstofThird.AddNewTcPr();
    ctPrFirstofThird.AddNewVMerge().val = ST_Merge.restart;
    //开始合并行ctPrFirstofThird.AddNewVAlign().val = ST_VerticalJc.center;
    //垂直cttcFirstofThird.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
    for (int i = 1;
     i  rows.Count;
 i++){
        XWPFTableCell cellfirstofRow = 第i行要合并的单元格对象;
        CT_Tc cttcfirstofRow = cellfirstofRow.GetCTTc();
        CT_TcPr ctPrfirstofRow = cttcfirstofRow.AddNewTcPr();
        ctPrfirstofRow.AddNewVMerge().val = ST_Merge.@continue;
    //继续合并行    ctPrfirstofRow.AddNewVAlign().val = ST_VerticalJc.center;
//垂直}
    

四、 图片处理
2.3.0版本的NPOI的图片插入没有集成XMl文件的修改所以需要手写代码编入(当然,我是拷过来的)。

using (FileStream fsimg = new FileStream(图片路径, FileMode.Open, FileAccess.Read, FileShare.None)){
    VAR picID = doc.AddPicturedata(fsImg, (int)NPOI.XWPF.UserModel.PictureType.JPEG);
    string picXML = ""+ "      pic:pic xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\" xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">
    "                    + "         pic:nvPicPr>
    " + "            pic:cNvPr id=\""                    + "0"                    + "\" name=\"Generated\"/>
    "                    + "            pic:cNvPicPr/>
    "                    + "         /pic:nvPicPr>
    "                    + "         pic:blipFill>
    "                    + "            a:blip r:embed=\""                    + id                    + "\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"/>
    "                    + "            a:stretch>
    "                    + "               a:fillRect/>
    "                    + "            /a:stretch>
    "                    + "         /pic:blipFill>
    "                    + "         pic:spPr>
    "                    + "            a:xfrm>
    "                    + "               a:off x=\"0\" y=\"0\"/>
    "                    + "               a:ext cx=\""                    + width                    + "\" cy=\""                    + height                    + "\"/>
    "                    + "            /a:xfrm>
    "                    + "            a:prstGeom prst=\"rect\">
    "                    + "               a:avLst/>
    "                    + "            /a:prstGeom>
    "                    + "         /pic:spPr>
    "                    + "      /pic:pic>
    ";
                    XWPFParagraph par = cell.AddParagraph();
    //创建段落对象(可以在doc加也可在cell加)                par.Alignment = ParagraphAlignment.CENTER;
    //居中                XWPFRun run = par.CreateRun();
                    CT_Inline inline = run.GetCTR().AddNewDrawing().AddNewInline();
                inline.graphic = new CT_GraphicalObject                {
                    graphicData = new CT_GraphicalObjectData                    {
                        uri = "http://schemas.openxmlformats.org/drawingml/2006/picture"                    }
                }
    ;
                try                {
                        inline.graphic.graphicData.AddPicElement(picXml);
                }
                catch (XmlException xe)                {
                        throw xe;
                }
                    NPOI.OpenXmlFormats.Dml.WordProcessing.CT_PositiveSize2D extent = inline.AddNewExtent();
                    extent.cx = width;
                    extent.cy = height;
                    NPOI.OpenXmlFormats.Dml.WordProcessing.CT_NonVisualDrawingProps docPr = inline.AddNewDocPr();
                    docPr.id = 1;
                    docPr.name = "Image" + id;
}
    

今天先到这了,以后有收获再补充。

相关推荐:

使用C/C++编写PHP Extension

【c#教程】C# 数据类型

以上就是C# 使用NPOI生成Word文档(按照模板)的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

上一篇: C#入门经典学习阶段小结(凌乱)下一篇:VS2015新建一个完整的c++工程详细...猜你在找的ASP.NET相关文章 C# 一些面试试题的实例教程2022-05-16.NET 6开发TodoList应用之请求日志组件HttpLogging介绍2022-04-16.NET 6中间件Http Logging使用介绍2022-04-16gojs一些实用的高级用法2022-04-16.NET6开发TodoList应用之实现查询排序2022-04-16.NET6开发TodoList应用之实现数据塑形2022-04-16.NET微服务架构CI/CD自动打包镜像2022-04-16Asp.Net Core 使用Monaco Editor 实现代码编辑器功能2022-04-16.NET微服务架构CI/CD自动构建Jenkins+Gitee2022-04-16.Net Core微服务网关Ocelot集成Consul2022-04-16 其他相关热搜词更多phpjavapython程序员loadpost-format-gallery

若转载请注明出处: C# 使用NPOI生成Word文档(按照模板)
本文地址: https://pptw.com/jishu/593160.html
jquery怎样删除第一个节点元素 怎样用C#打印一个n行的菱形?实战详解

游客 回复需填写必要信息