1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > npoi word生成HTML C# 使用NPOI生成Word文档(按照模板)

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

时间:2020-11-04 15:25:53

相关推荐

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

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

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

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

VS、右键解决方案,管理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 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 = ""

+ " "

+ " " + "

+ "0"

+ "\" name=\"Generated\"/>"

+ " "

+ "

"

+ " "

+ "

+ id

+ "\" xmlns:r=\"/officeDocument//relationships\"/>"

+ " "

+ " "

+ " "

+ " "

+ " "

+ " "

+ " "

+ "

+ width

+ "\" cy=\""

+ height

+ "\"/>"

+ " "

+ " "

+ " "

+ " "

+ " "

+ " ";

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 = "/drawingml//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;

}

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

相关推荐:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。