本帖最后由 ijwddd 于 2019-10-11 11:00 编辑
Word文档表格序号填充
最近我需要搞一些弄一些卡,是通过word文档里面的表格来打印成一张a4纸后再切割。
所以需要填写word文档里面的序号,而表格数量有点多,手动输入的话太浪费时间,所以写了个自动填充word文档表格的小工具,是使用java写的。
类似这种表格
实现思路:
1.读取word文档
使用的是poi读写word文档,word文档分为doc和docx后缀的文档,由于doc太老了点,我就只弄docx文档
读取docx文档有2种方式;
- 通过XWDFDocument对象读取
- 通过XWPFWordExtractor对象读取
而XWPFWordExtractor的本质上也是通过XWDFDocument对象来读取数据的,所以我直接用XWDFDocument来读取了。
2.写word文档
docx文档可以直接new一个空白的XWPFDocment文件开始写入内容,最后写入到输出流中。
从读取word文档的数据中判断对应的条件,我的文档都是前一个表格是标题,后一个表格填入对应的内容的。
代码
/**
* 自动填充功能
* 参数:
* String docx_url 文件模板
* ,String file_url 输出路径
* ,String prefix 填充序号的前缀
* ,Long num 填充的序号
*/
public static void autoFillWorld(String docx_url,String file_url,String prefix,Long num,String select,int autoNum) throws Exception {
InputStream is = new FileInputStream(docx_url);
//读取文档
XWPFDocument doc = new XWPFDocument(is);
//使用迭代器,获取文档里的表格
Iterator<XWPFTable> iterator = doc.getTablesIterator();
XWPFTable table;
List<XWPFTableCell> cells;
List<XWPFTableRow> rows;
String text = null;
//遍历表格
while (iterator.hasNext()) {
table = iterator.next();
rows = table.getRows();
for (XWPFTableRow row : rows) {
cells = row.getTableCells();
//遍历每一个表格,并判断符合条件的表格
for (int i = 0; i < cells.size(); i++) {
String text1 = cells.get(i).getText();
if (select.equals(text1)) {
String text2 = prefix+num;
//在表格中添加内容,并没有覆盖
cells.get(i+1).setText(text2);
num=num+autoNum;
}
}
}
}
//操作完毕后输出文档
OutputStream os = new FileOutputStream(file_url);
doc.write(os);
os.close();
is.close();
}
![软件图片](https://attach.52pojie.cn//forum/201910/11/004324qh7geqyubgqbd557.jpg?l)
下载地址:
有jdk环境的下jar包,没有就下压缩包
https://www.lanzouj.com/b00n4l0cb
|