Springboot整合poi操作word实现批量修改多文件内容
创始人
2025-05-28 10:58:49

目录

  • 一、POI是什么?
  • 二、XWPFDocument属性介绍
    • 2.1 pom.xml 文件
    • 2.2 控制层
    • 2.3 replaceWord.html文件
  • 总结


一、POI是什么?

Apache POI 是用Java编写的免费开源的跨平台的 Java API,它提供API给Java程式对Microsoft Office格式档案读和写的功能。
本文主要使用POI操作XWPFDocument对word文档的读写。

相关链接:
1、Apache POI Word(docx)的简短示例教程http://deepoove.com/poi-tl/apache-poi-guide.html

2、poi-tl在生成的文档中会完美保留模板中的样式,还可以为标签设置样式,标签的样式会被应用到替换后的文本上,可以专注于模板设计。
http://deepoove.com/poi-tl/

二、XWPFDocument属性介绍

在这里插入图片描述

2.1 pom.xml 文件

代码如下(示例):


org.apache.poipoi5.0.0

org.apache.poipoi-ooxml5.0.0


org.springframework.bootspring-boot-starter-web


org.springframework.bootspring-boot-starter-thymeleaf

2.2 控制层

@Controller
public class TestController {@GetMapping("/")public String test(){return "replaceWord";}@GetMapping("/replaceWord")public String inputParam(String input,String output,String source,String target) throws IOException {File file = new File(input);File readFile;if(file.isDirectory()) {System.out.println("正在读取"+ input +"目录....");String[] list = file.list();for(int i = 0; i< Objects.requireNonNull(list).length; i++) {readFile = new File(input +"/"+list[i]);if(readFile.isDirectory()) {System.out.println("文件夹:"+list[i]);}else {System.out.println("正在读取"+ input + "/" + list[i]);FileInputStream in = new FileInputStream(readFile);XWPFDocument doc = new XWPFDocument(in);//正文段落-获取所有段落 ======== 替换段落文字List paragraphs = doc.getParagraphs();for (XWPFParagraph paragraph : paragraphs) {if(!paragraph.getParagraphText().contains(source)){continue;}//获取段落中的runsList runs = paragraph.getRuns();for (int i1 = 0; i1 < runs.size(); i1++) {XWPFRun run = runs.get(i1);String runText = run.toString();if(runText.contains(source)){runText = runText.replaceAll(source, target);// 直接调用 XWPFRun 的 setText() 方法设置文本时,在底层会重新创建一个 XWPFRun,把文本附加在当前文本后面,// 所以我们不能直接设值,需要先删除当前 run, 然后再自己手动插入一个新的 runparagraph.removeRun(i1);paragraph.insertNewRun(i1).setText(runText);}}}//获得所有的表格  ------ 替换表格文字List tables = doc.getTables();for (XWPFTable table : tables) {//一个表格包含多行List rows = table.getRows();for (XWPFTableRow row : rows) {//一行包含多列List tableCells = row.getTableCells();//一行一列,横纵坐标确定一个 XWPFTableCell//表格中的一格相当于一个没有页眉和页脚的文档for (XWPFTableCell tableCell : tableCells) {String text = tableCell.getText();if (!StringUtils.isEmpty(text) && Objects.equals(text, source)) {//setText底层是追加,所以要删除删除原来的段落tableCell.removeParagraph(0);//设置段落的样式,行间距XWPFParagraph para = tableCell.addParagraph();para.setSpacingBetween(1);//赋值tableCell.setText(target);}}}}OutputStream out = Files.newOutputStream(Paths.get(output+"/"+list[i]));// 输出doc.write(out);System.out.println("正在输出文件:" + output + "/" + list[i]);in.close();out.close();}}}else {System.out.println(input +"不是一个目录。");}return "replaceWord";}
}

2.3 replaceWord.html文件



批量修改word文字 只测试过docx





访问前端项目:
在这里插入图片描述


总结

以上案例实现了批量替换文件夹下同级的.docx文件中的内容,案例是暴露给其他用户使用所以简单写了个html,开发者可直接用main函数调用即可。

相关内容

热门资讯

廉语清风丨小惩而大诫       “小惩而大诫”语出《周易·系辞下》,意思是因小过失受到惩罚,能够使人受警诫、吸取教训。《...
杨松任京能电力总经理 转自:北京日报客户端12月26日,京能电力第八届董事会第十三次会议审议通过了《关于变更公司董事的议案...
投资者提问:请问一下董秘,截止... 投资者提问:请问一下董秘,截止到12月24日,公司的股东人数是多少?谢谢董秘回答(捷佳伟创SZ300...
盛洋科技:公司相关人员因与部分... 格隆汇12月26日|盛洋科技(603703.SH)公告称,公司相关人员叶利明、徐凤娟在公司2019年...
长春市2026年兵役登记公告 转自:长春发布依据《中华人民共和国兵役法》《中华人民共和国预备役人员法》《征兵工作条例》《兵役登记工...