运用Poi的XWPF操作word文档


Word文档基础知识的简介

word文档包括 页眉、页脚、脚注、批注、链接、正文部分,在XWPF中都有与之对应的类:
.docx文件的文档的根 XWPFDocument
页眉 XWPFHeader
页脚 XWPFFooter
脚注 XWPFFootnote
批注 XWPFComment
链接 XWPFHyperlink
内容主体
页眉,页脚,脚注,内容主体部分由 段落(XWPFParagraph)、表格(XWPFTable)、图片(XWPFPicture)部分组成.每个类都有相应丰富的方法。了解了这些结构,对于掌握XWPF有很大帮助。每一个XWPF类型,都有与之对应的CT*,个人认为CT*更接近底层操作.

XWPFParagraph 文档、表格、标题等中的段落

CTP ctp = para.getCTP();段落可以设置对齐方式,字体,设置标签等操作。

//遍历段落
XWPFParagraph para = ...;
//通过ctp直接获取相应的段落
XWPFParagraph paraOther = document.getParagraph(ctp)
List <XWPFRun> runs = para.getRuns(); for (XWPFRun run : runs) {CTR ctr = run.getCTR();System.out.println(run.getText(0));
}
//删除段落
para.getDocument().removeBodyElement(para.getDocument().getPosOfParagraph(para));

XWPFRun 相同属性设置的文本区域

CTR ctr = run.getCTR(); XWPFRun是组成XWPFParagraph等元素,对于文本的操作更细致化的在这一个类,区分段落中的XWPFRun非常不容易,因为每个XWPFRun不同体现在很多因素。

XWPFRun run = ..
XWPFRun runOther = para.getRun(ctr);
run.setText(value, pos);
run.getText(0)
//删除
para.removeRun(index)

XWPFTable 文档中的表格

CTTbl ct = table.getCTTbl();表格存在行(XWPFTableRow), 每行存在单元格(XWPFTableCell), 每个单元格有段落(XWPFParagraph) 遍历表格:

List<XWPFTableRow> rows = table.getRows();CTTbl ct = table.getCTTbl();System.out.println("table text\t" + table.getText());System.out.println("Table rowBandSize:\t" + table.getRowBandSize());for (XWPFTableRow row : rows) {CTRow ctrow = row.getCtRow();XWPFTableRow rowother = table.getRow(ctrow);List<ICell> cells = row.getTableICells();List<XWPFTableCell> xcells = row.getTableCells();for (XWPFTableCell cell: xcells) {CTTc cttc = cell.getCTTc();XWPFTableCell otherCell = row.getTableCell(cttc);System.out.println("cell text\t" + cell.getText());}
}

合并单元格

//跨行跨列合并
public void mergeCells(XWPFTable table, int fromrow, int endrow, int fromcell, int endcell) {//先合并行for (int rowindex = fromrow; rowindex <= endrow; rowindex++) {XWPFTableRow row = table.getRow(rowindex);if (rowindex == fromrow) {          row.getCell(fromcell).getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART);} else {row.getCell(fromcell).getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE);}}//合并列for (int rowindex = fromrow; rowindex <= endrow; rowindex++) {for (int cellindex = fromcell; cellindex <= endcell; cellindex++) {XWPFTableCell cell = table.getRow(rowindex).getCell(cellindex);if (cellindex == fromcell) {cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);} else {cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);}}}
}//跨列合并
public void mergeCellsByCol(XWPFTable table, int rowindex, int fromcell, int endcell) {for (int cellindex = fromcell; cellindex <= endcell; cellindex++) {XWPFTableCell cell = table.getRow(rowindex).getCell(cellindex);if (cellindex == fromcell) {cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);} else {cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);}}
}//跨行合并
public void mergeCellByRow(XWPFTable table,  int cellindex, int fromrow, int endrow) {for (int rowindex = fromrow; rowindex <= endrow; rowindex++) {XWPFTableRow row = table.getRow(rowindex);if (rowindex == fromrow) {row.getCell(cellindex).getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART);} else {row.getCell(cellindex).getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE);}}
}

XWPFPictureData 文档中的图片

List<XWPFPictureData> pictureDatas = document.getAllPictures();
public void watchPicture(XWPFPictureData pdata) {System.out.println("图片名称:\t" + pdata.getFileName());System.out.println("图片类型:\t" + pdata.getPictureType());byte[] data = pdata.getData();
}

word转HTML

public void wordToHtml() throws XWPFConverterException, IOException {//图片存储File imageFolderFile = new File("d:/test/media");XHTMLOptions options = XHTMLOptions.create().URIResolver(new FileURIResolver(imageFolderFile));options.setExtractor(new FileImageExtractor(imageFolderFile));OutputStream out = new FileOutputStream("E:/test/wth.html");XHTMLConverter.getInstance().convert(document, out, options);out.close();
}

XWPF POI word文档操作相关推荐

  1. Qt对word文档操作总结

    Qt对word文档操作总结 近期在使用Qt对word进行读写操作时候遇到很多问题,对于Qt内部没有很好的库函数可以使用.office官网上的文档只有VBA的示例,没有Qt的语法例子.在这里作者介绍了一 ...

  2. C++实例(十)Word文档操作

    Word文档操作 一.Word文档的基本操作 打开Word文档 在开发应用程序时,有时需要调用Word文档,如果让用户在磁盘中寻找文档将会很麻烦. 读取Word文档文本内容 在使用程序控制Word文档 ...

  3. 文档转成html在线预览,java poi Word文档转为HTML文件 实现在线预览功能

    Java代码 import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; im ...

  4. golang转word到html,golang 解析word文档操作

    baliance/gooxml gooxml是可以对整个office document提供支持的golang库,功能很强大,这里简单给出对word文档的读取案例 安装 go get baliance. ...

  5. 教程 | Python 实现 Word 文档操作...

    本文由P"ython中文社区"编辑 本文主要讲解Python中操作word的思路. 一.Hello,world! 使用win32com需要安装pypiwin32 pip insta ...

  6. 【QT】word文档操作实例——根据word模板生成word报表

    文章目录 引言 一.word模板准备 二.WordDemo实现 1.mainwindow.ui 2.mainwindow.h 3.mainwindow.cpp 三.实现效果 引言 在QT5.3中,在. ...

  7. java access ole word,利用OLE对象实现Word文档操作

    Word 是常用的字处理软件,在编程中充分利用现有的Word 文档就可以减少很多数据的处理.详细介绍了在ASP.NET 的程序中,利用数据库中的OLE 对象,实现Word文档的在线存取及预览. 1.引 ...

  8. 关于poi word 文档生成的那些坑坑洼洼

    产品需求 近期产品提了一个需求,要求我们将查询出来的数据以表格的形式保存在excel和word文档中,excel的单元格有强大的适应性和扩展性,基本无难度,但是word,嗯,要兼容wps word和M ...

  9. poi word文档在书签处插入图片

    src:docx文档路径 codePNGpath:图片路径 dest:docx写出路径 aaa:书签名 try { InputStream inputStream = new FileInputStr ...

最新文章

  1. 高精度模板 c++/类封装
  2. 重构授课班时间安排模块代码
  3. Mycat关键特性,什么是MYCAT,MYCAT监控,版本架构,长期规划2.0,Mycat高可用方案
  4. Hook技术之Hook Activity
  5. qq流浏览器网页版_如何使QQ浏览器浏览简洁
  6. C++ Primer 第五版 第6章 6.2——函数参数传递阅读笔记
  7. freemarker ftl模板_Web开发人员必会的模板引擎技术之Freemarker
  8. 求栈中元素个数算法_Algorithm 大家都会的去除有序数组中重复元素的三种算法...
  9. 学生成绩管理系统源码
  10. 跟兄弟连学PHP PDF 分享
  11. android图片添加文字,Android给图片加文字和图片水印
  12. PHPExcel导出出现白页
  13. 使用stp制造广播风暴!
  14. 计算机信息加工是指什么作用,信息加工是什么?
  15. 蕉下招股书里提了26次的DTC,到底是啥?
  16. 静一静,做好人生的减法
  17. html内容被背景图片遮住怎么办_完美实现文字置于图片之上且背景半透明
  18. 条件随机场(CRF)原理和实现
  19. 有了方差为什么需要标准差?
  20. 术业有专攻·蛛网时代的BI“野心”

热门文章

  1. android 原生混编 flutter 并使用 flutter_boost进行跳转的步骤以及注意事项
  2. 【数据标准】人力资源域的数据治理及标准化建设思路
  3. [Android]仿微信开关按钮:)扁平化简洁风
  4. RK3568平台开发系列讲解(Logger篇)什么是Android EventLog
  5. 开发者必备工具-掘金Chrome插件
  6. 教你高效搭建自己的电商平台系统快来看
  7. 启益电商:无货源店铺怎么做
  8. fedora 26添加163源
  9. Revit插件建模助手和蜘蛛侠,两款插件功能介绍!
  10. 讯飞声纹识别(简单基础)