最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Springboot整合poi實(shí)現(xiàn)批量修改word文件內(nèi)容

 更新時(shí)間:2026年05月08日 08:41:11   作者:無敵小肥007  
Apache?POI?是用Java編寫的免費(fèi)開源的跨平臺(tái)的?Java?API,它提供API給Java程式對(duì)Microsoft?Office格式檔案讀和寫的功能,下面我們就來看看如何使用POI操作XWPFDocument對(duì)word文檔的讀寫吧

一、POI是什么?

Apache POI 是用Java編寫的免費(fèi)開源的跨平臺(tái)的 Java API,它提供API給Java程式對(duì)Microsoft Office格式檔案讀和寫的功能。

本文主要使用POI操作XWPFDocument對(duì)word文檔的讀寫。

二、XWPFDocument屬性介紹

2.1 pom.xml 文件

代碼如下(示例):

<!--poi依賴-->
<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi</artifactId>
	<version>5.0.0</version>
</dependency>
<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi-ooxml</artifactId>
	<version>5.0.0</version>
</dependency>
<!-- web項(xiàng)目 -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--thymeleaf模板引擎-->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

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<XWPFParagraph> paragraphs = doc.getParagraphs();
                    for (XWPFParagraph paragraph : paragraphs) {
                        if(!paragraph.getParagraphText().contains(source)){
                            continue;
                        }
                        //獲取段落中的runs
                        List<XWPFRun> 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);
                                // 直接調(diào)用 XWPFRun 的 setText() 方法設(shè)置文本時(shí),在底層會(huì)重新創(chuàng)建一個(gè) XWPFRun,把文本附加在當(dāng)前文本后面,
                                // 所以我們不能直接設(shè)值,需要先刪除當(dāng)前 run, 然后再自己手動(dòng)插入一個(gè)新的 run
                                paragraph.removeRun(i1);
                                paragraph.insertNewRun(i1).setText(runText);
                            }
                        }
                    }
                    //獲得所有的表格  ------ 替換表格文字
                    List<XWPFTable> tables = doc.getTables();
                    for (XWPFTable table : tables) {
                        //一個(gè)表格包含多行
                        List<XWPFTableRow> rows = table.getRows();
                        for (XWPFTableRow row : rows) {
                            //一行包含多列
                            List<XWPFTableCell> tableCells = row.getTableCells();
                            //一行一列,橫縱坐標(biāo)確定一個(gè) XWPFTableCell
                            //表格中的一格相當(dāng)于一個(gè)沒有頁(yè)眉和頁(yè)腳的文檔
                            for (XWPFTableCell tableCell : tableCells) {
                                String text = tableCell.getText();
                                if (!StringUtils.isEmpty(text) && Objects.equals(text, source)) {
                                    //setText底層是追加,所以要?jiǎng)h除刪除原來的段落
                                    tableCell.removeParagraph(0);
                                    //設(shè)置段落的樣式,行間距
                                    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 +"不是一個(gè)目錄。");
        }
        return "replaceWord";
    }
}

2.3 replaceWord.html文件

<!DOCTYPE html>
<html lang="en" xmlns:th="https://www.thymeleaf.org/">
<head>
    <meta charset="UTF-8">
    <title>批量修改word文字 只測(cè)試過docx</title>
</head>
<body>
    <form method="get" action="/replaceWord">
        <label>
            選擇導(dǎo)入文件夾:
            <input type="text" th:name="input" required>
        </label>
        <label>
            選擇輸出文件夾:
            <input type="text" th:name="output" required>
        </label>
        <label>
            需要修改的內(nèi)容:
        <input type="text" th:name="source" required>
        </label>
        <label>
            修改為什么內(nèi)容:
            <input type="text" th:name="target" required>
        </label>
        <button type="submit">進(jìn)行替換</button>
    </form>
</body>
</html>

訪問前端項(xiàng)目:

總結(jié)

以上案例實(shí)現(xiàn)了批量替換文件夾下同級(jí)的.docx文件中的內(nèi)容,案例是暴露給其他用戶使用所以簡(jiǎn)單寫了個(gè)html,開發(fā)者可直接用main函數(shù)調(diào)用即可。

到此這篇關(guān)于Springboot整合poi實(shí)現(xiàn)批量修改word文件內(nèi)容的文章就介紹到這了,更多相關(guān)Springboot修改word文件內(nèi)容內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JAVA日志框架之JUL、JDK原生日志框架詳解

    JAVA日志框架之JUL、JDK原生日志框架詳解

    Java語言的強(qiáng)大之處就是因?yàn)樗鼜?qiáng)大而且成熟的生態(tài)體系,其中包括日志框架,下面這篇文章主要給大家介紹了關(guān)于JAVA日志框架之JUL、JDK原生日志框架的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • java實(shí)現(xiàn)字符串的全排列

    java實(shí)現(xiàn)字符串的全排列

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)字符串的全排列,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • Java內(nèi)存溢出場(chǎng)景及解決方案

    Java內(nèi)存溢出場(chǎng)景及解決方案

    內(nèi)存溢出是Java應(yīng)用開發(fā)中常見的問題,但通過合理的代碼優(yōu)化、內(nèi)存管理以及JVM參數(shù)調(diào)整,我們可以有效地避免和解決這類問題,這篇文章主要介紹了Java內(nèi)存溢出場(chǎng)景及解決辦法,需要的朋友可以參考下
    2024-04-04
  • Java?C++題解eetcode940不同的子序列?II

    Java?C++題解eetcode940不同的子序列?II

    這篇文章主要為大家介紹了Java?C++題解eetcode940不同的子序列?II實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • ssm框架下web項(xiàng)目,web.xml配置文件的作用(詳解)

    ssm框架下web項(xiàng)目,web.xml配置文件的作用(詳解)

    下面小編就為大家?guī)硪黄猻sm框架下web項(xiàng)目,web.xml配置文件的作用(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • Dubbo框架線程池使用介紹

    Dubbo框架線程池使用介紹

    當(dāng)我們?cè)谑褂胐ubbo的時(shí)候,是可以通過調(diào)整線程池來達(dá)到調(diào)優(yōu)的效果,我們可以在dubbo:protocol 標(biāo)簽中使用用threadpool屬性選擇自己想要使用的線程池,通過threads屬性配置服務(wù)線程數(shù),queues屬性配置使用的隊(duì)列
    2022-09-09
  • 如何用struts調(diào)用支付寶接口

    如何用struts調(diào)用支付寶接口

    以下為大家介紹如何用struts調(diào)用支付寶接口的例子。
    2013-04-04
  • Spring Aop如何給Advice傳遞參數(shù)

    Spring Aop如何給Advice傳遞參數(shù)

    這篇文章主要介紹了Spring Aop如何給Advice傳遞參數(shù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • SpringBoot中的yaml語法及靜態(tài)資源訪問問題

    SpringBoot中的yaml語法及靜態(tài)資源訪問問題

    這篇文章主要介紹了SpringBoot中的yaml語法及靜態(tài)資源訪問問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-07-07
  • SpringMVC攔截器實(shí)現(xiàn)登錄認(rèn)證

    SpringMVC攔截器實(shí)現(xiàn)登錄認(rèn)證

    這篇文章主要介紹了SpringMVC攔截器實(shí)現(xiàn)登錄認(rèn)證的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11

最新評(píng)論

尼勒克县| 安阳县| 平南县| 扎囊县| 读书| 新营市| 沙坪坝区| 邹平县| 赣榆县| 彰武县| 广安市| 博客| 赤城县| 五华县| 苗栗市| 江门市| 中方县| 耒阳市| 凤冈县| 伊通| 晋城| 苍南县| 桃源县| 隆回县| 胶州市| 西华县| 定兴县| 额济纳旗| 晋中市| 和硕县| 南乐县| 漯河市| 高阳县| 郯城县| 葫芦岛市| 海林市| 富顺县| 鄂托克前旗| 依兰县| 潞西市| 馆陶县|