npoi word生成HTML,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列
(四) 垂直合并列单元格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=\"http://schemas.openxmlformats.org/officeDocument/2006/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 = "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;
}
今天先到这了,以后有收获再补充。
相关推荐:
npoi word生成HTML,C# 使用NPOI生成Word文档(按照模板)相关推荐
- java利用Freemarker模板生成格式友好的doc或者docx文档
之前写过一篇利用Freemarker模板生成doc的博客,不过那个博客有点缺陷,不支持生成docx格式的文档.所以,这里补充一篇,生成docx或doc格式的文档以具体的docx模板或者doc模板为主. ...
- Java下使用Apache POI生成具有三级联动下拉列表的Excel文档
使用Apache POI生成具有三级联动下拉列表的Excel文档: 具体效果图与代码如下文. 先上效果图: 开始贴代码,代码中部分测试数据不影响功能. 第一部分(核心业务处理): 此部分包含几个方面: ...
- 利用Aspose.Word控件和Aspose.Cell控件,实现Word文档和Excel文档的模板化导出
我们知道,一般都导出的Word文档或者Excel文档,基本上分为两类,一类是动态生成全部文档的内容方式,一种是基于固定模板化的内容输出,后者在很多场合用的比较多,这也是企业报表规范化的一个体现. 我的 ...
- poi-tl实现word文档按模板下载
poi-tl是对poi很好的一个封装,用起来相对来说也更加简单,将git的地址记录一下,方便大家去看 扣扣技术分享交流群:1125844267 源码和文档 https://github.com/Say ...
- 删除Office Word (Excel)中Recent Document最近文档中本地和online打开文件路径已经不存在的文件记录
上次写了一篇删除Office(Word,Excel,PowerPoint)中Recent Document最近文档地址不存在的文件,注重从注册表中删除记录,后来发现有问题,online打开文件的记录在 ...
- word打开wps文件乱码_Word打开WPS文档成乱码怎么办
Word打开WPS文档成乱码怎么办 最近一位同事拿来一篇WPS做的论文,请我帮他修改后再打印出来,我的电脑中安装的字处理软件是Word XP.记得Office XP中自带了WPS文档转换器,一向没机会 ...
- 创建模板只有从空白html文档开始创建,word 2019如何创建空白文档和模板文档
学习word2019文字处理的时候,我们首先要知道如何来创建word2019文档,创建word文档和ppt.excel创建文档的方式基本一致,只有创建好了文档我们才可以进行录入和修改,今天我们就来学习 ...
- 删除Office(Word,Excel,PowerPoint)中Recent Document最近文档地址不存在的文件
最近碰到一个需求,删除Office(Word,Excel,PowerPoint)中Recent Document最近文档地址不存在的文件,即每次打开office(Word,Excel,PowerPoi ...
- C#、NPOI生成Word文档(模板)
项目需要集成word导出,做的时候网上文档资源不是很多,也比较杂乱,所以查了查,整理了整理,做个记录,也顺便把NPOI操作Word文档的一些基本操作分享给有需要的朋友. 本篇包括生成Word对word ...
- java接口文档生成工具_【分享】接口文档生成工具apipost
一.为什么要写接口文档? 正规的团队合作或者是项目对接,接口文档是非常重要的,一般接口文档都是通过开发人员写的.一个工整的文档显得是非重要. 项目开发过程中前后端工程师有一个统一的文件进行沟通交流开发 ...
最新文章
- linux磁盘管理命令 lv,Linux磁盘管理--LVM原理及基本操作
- idea 弹出框中有乱码_IDEA如何自定义快捷键
- fusion 360安装程序的多个实例正在同时运行。_SpringMVC运行原理
- java执行cmd命令,返回结果中文乱码问题解决
- 解决IE8下父容器背景图片不显示的问题
- mysql数据库插入图片_向MySql数据库插入与读取图片文件
- java封装,继承和多态
- JavaScript toFixed(num) 函数
- 神策数据携手百丽国际,专注品牌零售行业数字化未来
- Ubuntu安装中文语言包
- 剑指offer(15)反转链表
- (原創) 如何在Ubuntu設定P7010的1280 x 768解析度? (OS) (Linux) (Ubuntu) (NB) (P7010)
- python语言数据挖掘python语言数据_Python语言数据挖掘01-环境搭建
- ASP.NET Razor 视图引擎编程参考
- android 图层绘画分析,Android绘图技巧使用详解
- LayaAir graphics 矢量绘图之 多边形、矩形
- 深圳荔枝公园没看到夜景(可能过节才有)
- [sklearn机器学习]线性回归模型
- 台式计算机没有任务栏,电脑任务栏不见了怎么恢复 电脑任务栏怎么设置并排显示...
- oracle数据库导出rtf,Delphi中对Oracle存取RTF文档