XWPF POI word文档操作
运用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文档操作相关推荐
- Qt对word文档操作总结
Qt对word文档操作总结 近期在使用Qt对word进行读写操作时候遇到很多问题,对于Qt内部没有很好的库函数可以使用.office官网上的文档只有VBA的示例,没有Qt的语法例子.在这里作者介绍了一 ...
- C++实例(十)Word文档操作
Word文档操作 一.Word文档的基本操作 打开Word文档 在开发应用程序时,有时需要调用Word文档,如果让用户在磁盘中寻找文档将会很麻烦. 读取Word文档文本内容 在使用程序控制Word文档 ...
- 文档转成html在线预览,java poi Word文档转为HTML文件 实现在线预览功能
Java代码 import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; im ...
- golang转word到html,golang 解析word文档操作
baliance/gooxml gooxml是可以对整个office document提供支持的golang库,功能很强大,这里简单给出对word文档的读取案例 安装 go get baliance. ...
- 教程 | Python 实现 Word 文档操作...
本文由P"ython中文社区"编辑 本文主要讲解Python中操作word的思路. 一.Hello,world! 使用win32com需要安装pypiwin32 pip insta ...
- 【QT】word文档操作实例——根据word模板生成word报表
文章目录 引言 一.word模板准备 二.WordDemo实现 1.mainwindow.ui 2.mainwindow.h 3.mainwindow.cpp 三.实现效果 引言 在QT5.3中,在. ...
- java access ole word,利用OLE对象实现Word文档操作
Word 是常用的字处理软件,在编程中充分利用现有的Word 文档就可以减少很多数据的处理.详细介绍了在ASP.NET 的程序中,利用数据库中的OLE 对象,实现Word文档的在线存取及预览. 1.引 ...
- 关于poi word 文档生成的那些坑坑洼洼
产品需求 近期产品提了一个需求,要求我们将查询出来的数据以表格的形式保存在excel和word文档中,excel的单元格有强大的适应性和扩展性,基本无难度,但是word,嗯,要兼容wps word和M ...
- poi word文档在书签处插入图片
src:docx文档路径 codePNGpath:图片路径 dest:docx写出路径 aaa:书签名 try { InputStream inputStream = new FileInputStr ...
最新文章
- 高精度模板 c++/类封装
- 重构授课班时间安排模块代码
- Mycat关键特性,什么是MYCAT,MYCAT监控,版本架构,长期规划2.0,Mycat高可用方案
- Hook技术之Hook Activity
- qq流浏览器网页版_如何使QQ浏览器浏览简洁
- C++ Primer 第五版 第6章 6.2——函数参数传递阅读笔记
- freemarker ftl模板_Web开发人员必会的模板引擎技术之Freemarker
- 求栈中元素个数算法_Algorithm 大家都会的去除有序数组中重复元素的三种算法...
- 学生成绩管理系统源码
- 跟兄弟连学PHP PDF 分享
- android图片添加文字,Android给图片加文字和图片水印
- PHPExcel导出出现白页
- 使用stp制造广播风暴!
- 计算机信息加工是指什么作用,信息加工是什么?
- 蕉下招股书里提了26次的DTC,到底是啥?
- 静一静,做好人生的减法
- html内容被背景图片遮住怎么办_完美实现文字置于图片之上且背景半透明
- 条件随机场(CRF)原理和实现
- 有了方差为什么需要标准差?
- 术业有专攻·蛛网时代的BI“野心”