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

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

时间:2020-08-08 14:54:09

相关推荐

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

后端开发|C#.Net教程

c#,NPOI

后端开发-C#.Net教程

心理测试源码,vscode m1芯片,ubuntu 编译apk,tomcat空启报错,华为商城爬虫,php 无法 mssql,营销型seo推广技术公司,移动端购物网站模版,织梦模板恢复数据后wap访问不lzw

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

家政平台源码,ubuntu dd 查看,tomcat部署不同项目,java爬虫影响,php cmdb,搜索引擎优化是SEO吗lzw

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

易语言 后台按键 源码,vscode内容辅助快捷键,vnc连ubuntu,tomcat5 jdk,爬虫打印乱码,php如何做框架,seo网络营销流程图,网站后台程序和数据库开发lzw

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

VS、右键解决方案,管理NuGet程序包,搜索并为项目安装NPOI程序包,并引用:

using NPOI.XWPF.UserModel;

本编使用NPOI版本为2.3.0

下面进入正题··

A、 获取模板(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文档。

B、 文本处理(XWPFParagraph para)

doc.Paragraphs 获取到文档里的所有的段落对象;

para.ParagraphText 获取段落的文本数据;

para.ReplaceText(要被替换的文本,替换文本) 替换段落的文本(模板能实现的关键)

XWPFParagraph的官方参考文档

C、 表格处理(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;//垂直}

D、 图片处理

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 = ""+ "" + " " + " " + " " + " " + " " + " " + " " + "" + " " + " " + " " + " " + "" + "" + " " + " " + "" + " " + " " + "";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;}

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

使用C/C++编写PHP Extension

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

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