类别:.NET / 日期:2019-12-01 / 浏览:434 / 评论:0

项目须要集成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列

(四) 垂直兼并列单位格

List<XWPFTableRow> 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文档(根据模板)的细致内容,更多请关注ki4网别的相干文章!

打赏

感谢您的赞助~

打开支付宝扫一扫,即可进行扫码打赏哦~

版权声明 : 本文未使用任何知识共享协议授权,您可以任何形式自由转载或使用。

 可能感兴趣的文章

评论区

发表评论 / 取消回复

必填

选填

选填

◎欢迎讨论,请在这里发表您的看法及观点。