项目需要集成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文档(按照模板)相关推荐

  1. java利用Freemarker模板生成格式友好的doc或者docx文档

    之前写过一篇利用Freemarker模板生成doc的博客,不过那个博客有点缺陷,不支持生成docx格式的文档.所以,这里补充一篇,生成docx或doc格式的文档以具体的docx模板或者doc模板为主. ...

  2. Java下使用Apache POI生成具有三级联动下拉列表的Excel文档

    使用Apache POI生成具有三级联动下拉列表的Excel文档: 具体效果图与代码如下文. 先上效果图: 开始贴代码,代码中部分测试数据不影响功能. 第一部分(核心业务处理): 此部分包含几个方面: ...

  3. 利用Aspose.Word控件和Aspose.Cell控件,实现Word文档和Excel文档的模板化导出

    我们知道,一般都导出的Word文档或者Excel文档,基本上分为两类,一类是动态生成全部文档的内容方式,一种是基于固定模板化的内容输出,后者在很多场合用的比较多,这也是企业报表规范化的一个体现. 我的 ...

  4. poi-tl实现word文档按模板下载

    poi-tl是对poi很好的一个封装,用起来相对来说也更加简单,将git的地址记录一下,方便大家去看 扣扣技术分享交流群:1125844267 源码和文档 https://github.com/Say ...

  5. 删除Office Word (Excel)中Recent Document最近文档中本地和online打开文件路径已经不存在的文件记录

    上次写了一篇删除Office(Word,Excel,PowerPoint)中Recent Document最近文档地址不存在的文件,注重从注册表中删除记录,后来发现有问题,online打开文件的记录在 ...

  6. word打开wps文件乱码_Word打开WPS文档成乱码怎么办

    Word打开WPS文档成乱码怎么办 最近一位同事拿来一篇WPS做的论文,请我帮他修改后再打印出来,我的电脑中安装的字处理软件是Word XP.记得Office XP中自带了WPS文档转换器,一向没机会 ...

  7. 创建模板只有从空白html文档开始创建,word 2019如何创建空白文档和模板文档

    学习word2019文字处理的时候,我们首先要知道如何来创建word2019文档,创建word文档和ppt.excel创建文档的方式基本一致,只有创建好了文档我们才可以进行录入和修改,今天我们就来学习 ...

  8. 删除Office(Word,Excel,PowerPoint)中Recent Document最近文档地址不存在的文件

    最近碰到一个需求,删除Office(Word,Excel,PowerPoint)中Recent Document最近文档地址不存在的文件,即每次打开office(Word,Excel,PowerPoi ...

  9. C#、NPOI生成Word文档(模板)

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

  10. java接口文档生成工具_【分享】接口文档生成工具apipost

    一.为什么要写接口文档? 正规的团队合作或者是项目对接,接口文档是非常重要的,一般接口文档都是通过开发人员写的.一个工整的文档显得是非重要. 项目开发过程中前后端工程师有一个统一的文件进行沟通交流开发 ...

最新文章

  1. linux磁盘管理命令 lv,Linux磁盘管理--LVM原理及基本操作
  2. idea 弹出框中有乱码_IDEA如何自定义快捷键
  3. fusion 360安装程序的多个实例正在同时运行。_SpringMVC运行原理
  4. java执行cmd命令,返回结果中文乱码问题解决
  5. 解决IE8下父容器背景图片不显示的问题
  6. mysql数据库插入图片_向MySql数据库插入与读取图片文件
  7. java封装,继承和多态
  8. JavaScript toFixed(num) 函数
  9. 神策数据携手百丽国际,专注品牌零售行业数字化未来
  10. Ubuntu安装中文语言包
  11. 剑指offer(15)反转链表
  12. (原創) 如何在Ubuntu設定P7010的1280 x 768解析度? (OS) (Linux) (Ubuntu) (NB) (P7010)
  13. python语言数据挖掘python语言数据_Python语言数据挖掘01-环境搭建
  14. ASP.NET Razor 视图引擎编程参考
  15. android 图层绘画分析,Android绘图技巧使用详解
  16. LayaAir graphics 矢量绘图之 多边形、矩形
  17. 深圳荔枝公园没看到夜景(可能过节才有)
  18. [sklearn机器学习]线性回归模型
  19. 台式计算机没有任务栏,电脑任务栏不见了怎么恢复 电脑任务栏怎么设置并排显示...
  20. oracle数据库导出rtf,Delphi中对Oracle存取RTF文档

热门文章

  1. Emacs footnote 自动排序
  2. 语文老师之二小白的边城
  3. WIN10下没有NVIDIA控制面板的解决办法
  4. oracle修改查询结果,Oracle使用查询结果更新表的方法
  5. 对外汉语偏误语料库_对外汉语偏误汇总
  6. GPIF II designer使用说明+CYUSB3014芯片基本信息介绍——英文文档学习记录
  7. 3D游戏角色模型的简单制作流程
  8. 图床,全网最稳定的免费图床
  9. MapReduce之week2 test 分区计算结余(练习)
  10. wegame服务器维护启动游戏失败,wegame连接服务器失败