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

java?poi之XWPFDocument如何讀取word內(nèi)容并創(chuàng)建新的word

 更新時(shí)間:2025年04月19日 11:31:21   作者:L-960  
這篇文章主要介紹了java?poi之XWPFDocument如何讀取word內(nèi)容并創(chuàng)建新的word問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Poi的Word文檔結(jié)構(gòu)介紹

1、poi之word文檔結(jié)構(gòu)介紹之正文段落

一個(gè)文檔包含多個(gè)段落,一個(gè)段落包含多個(gè)Runs,一個(gè)Runs包含多個(gè)Run,Run是文檔的最小單元

  • 獲取所有段落:List paragraphs = word.getParagraphs();
  • 獲取一個(gè)段落中的所有Runs:List xwpfRuns = xwpfParagraph.getRuns();
  • 獲取一個(gè)Runs中的一個(gè)Run:XWPFRun run = xwpfRuns.get(index);

2、poi之word文檔結(jié)構(gòu)介紹之正文表格

一個(gè)文檔包含多個(gè)表格,一個(gè)表格包含多行,一行包含多列(格),每一格的內(nèi)容相當(dāng)于一個(gè)完整的文檔

  • 獲取所有表格:List xwpfTables = doc.getTables();
  • 獲取一個(gè)表格中的所有行:List xwpfTableRows = xwpfTable.getRows();
  • 獲取一行中的所有列:List xwpfTableCells = xwpfTableRow.getTableCells();
  • 獲取一格里的內(nèi)容:List paragraphs = xwpfTableCell.getParagraphs();

之后和正文段落一樣

注:

  • 表格的一格相當(dāng)于一個(gè)完整的docx文檔,只是沒有頁(yè)眉和頁(yè)腳。里面可以有表格,使用xwpfTableCell.getTables()獲取,and so on
  • 在poi文檔中段落和表格是完全分開的,如果在兩個(gè)段落中有一個(gè)表格,在poi中是沒辦法確定表格在段落中間的。(當(dāng)然除非你本來知道了,這句是廢話)。只有文檔的格式固定,才能正確的得到文檔的結(jié)構(gòu)

3、poi之word文檔結(jié)構(gòu)介紹之頁(yè)眉

一個(gè)文檔可以有多個(gè)頁(yè)眉(不知道怎么會(huì)有多個(gè)頁(yè)眉。。。),頁(yè)眉里面可以包含段落和表格

  • 獲取文檔的頁(yè)眉:List headerList = doc.getHeaderList();
  • 獲取頁(yè)眉里的所有段落:List paras = header.getParagraphs();
  • 獲取頁(yè)眉里的所有表格:List tables = header.getTables();

之后就一樣了

4、poi之word文檔結(jié)構(gòu)介紹之頁(yè)腳

頁(yè)腳和頁(yè)眉基本類似,可以獲取表示頁(yè)數(shù)的角標(biāo)

  • IBodyElement-------------------迭代器(段落和表格)
  • XWPFComment -------------------評(píng)論(個(gè)人理解應(yīng)該是批注)
  • XWPFSDT
  • XWPFFooter -------------------頁(yè)腳
  • XWPFFootnotes -------------------腳注
  • XWPFHeader -------------------頁(yè)眉
  • XWPFHyperlink -------------------超鏈接
  • XWPFNumbering -------------------編號(hào)
  • XWPFParagraph -------------------段落
  • XWPFPictureData -------------------圖片
  • XWPFStyles -------------------樣式(設(shè)置多級(jí)標(biāo)題的時(shí)候用)
  • XWPFTable -------------------表格

pom依賴

<dependencies>
       <!--解析doc文檔HWPFDocument-->
       <dependency>
           <groupId>org.apache.poi</groupId>
           <artifactId>poi-scratchpad</artifactId>
           <version>4.1.2</version>
       </dependency>
       <dependency>
           <groupId>org.apache.poi</groupId>
           <artifactId>poi</artifactId>
           <version>4.1.2</version>
       </dependency>
       <dependency>
           <groupId>org.apache.poi</groupId>
           <artifactId>poi-ooxml</artifactId>
           <version>4.1.2</version>
       </dependency>

       <dependency>
           <groupId>springframework</groupId>
           <artifactId>spring-core</artifactId>
           <version>1.2.6</version>
       </dependency>
   </dependencies>

代碼

  • maven項(xiàng)目

import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDocument1;


import java.io.*;
import java.util.List;

public class poi3 {
    public static void main(String[] args) throws IOException {

        // 獲取文件輸入流
        FileInputStream fileInputStream = getFileInputStream("666.docx");

        dealDocx(fileInputStream, "副本.docx");

    }

    private static FileInputStream getFileInputStream(String name) throws FileNotFoundException {
        String dir = poi3.class.getResource("").getPath() + name;
        FileInputStream fileInputStream = new FileInputStream(dir);
        return fileInputStream;
    }

    private static void dealDocx(InputStream inputStream, String newFileName) throws IOException {
        // 創(chuàng)建輸出文件
        File file = new File(poi3.class.getResource("").getPath() + newFileName);

        // 獲取文件輸出流
        FileOutputStream fileOutputStream = new FileOutputStream(file);

        // 創(chuàng)建操作word的對(duì)象
        XWPFDocument wordInput = new XWPFDocument(inputStream);
        XWPFDocument wordOutput = new XWPFDocument();

        // 獲取所有段落
        List<XWPFParagraph> xwpfParagraphs = wordInput.getParagraphs();

        // 迭代每一個(gè)段落
        for (XWPFParagraph xwpfParagraph : xwpfParagraphs) {

            // 原文檔有多少個(gè)段落 我就創(chuàng)建多少個(gè)
            XWPFParagraph wordOutputParagraph = wordOutput.createParagraph();

            // 獲取當(dāng)前段落的所有run
            List<XWPFRun> runs = xwpfParagraph.getRuns();

            for (XWPFRun run : runs) {
                XWPFRun wordOutputParagraphRun = wordOutputParagraph.createRun();
                // 賦值
                //wordOutputParagraphRun.setText("哈哈哈哈~我修改過了");
                // 添加回車 硬回車
                //wordOutputParagraphRun.addCarriageReturn();
                //wordOutputParagraphRun.addBreak(); // 軟回車
                wordOutputParagraphRun.setText(run.getText(run.getCharacterSpacing()));
            }

        }

        // 獲取所有表格
        List<XWPFTable> xwpfTables = wordInput.getTables();
        for (XWPFTable xwpfTable : xwpfTables) {
            XWPFTable wordOutputTable = wordOutput.createTable();
            // 獲取一個(gè)表格中的所有行
            List<XWPFTableRow> xwpfTableRows = xwpfTable.getRows();
            System.out.println("xwpfTableRows個(gè)數(shù)"+xwpfTableRows.size());
            for (XWPFTableRow xwpfTableRow : xwpfTableRows) {

                XWPFTableRow wordOutputTableRow = wordOutputTable.createRow();
                // 獲取一行的所有列
                List<XWPFTableCell> xwpfTableCell = xwpfTableRow.getTableCells();
                System.out.println("xwpfTableCell個(gè)數(shù)"+xwpfTableCell.size());
                int index = 0;
                for (XWPFTableCell tableCell : xwpfTableCell) {
                    index++;
                    XWPFTableCell wordOutputTableRowCell = wordOutputTableRow.createCell();
                    // 獲取單個(gè)列
                    //wordOutputTableRowCell.setText("哈哈哈哈~我修改過了");
                    System.out.println(tableCell.getText());
                    wordOutputTableRowCell.setText(tableCell.getText());
                    System.out.println("index:"+index);
                }

            wordOutputTable.removeRow(0);
            }
            //wordOutputTable.removeBorders(); 虛線邊框

        }

        CTDocument1 document = wordInput.getDocument();
        System.out.println();


        wordOutput.write(fileOutputStream);
        wordInput.close();
        wordOutput.close();
        inputStream.close();
        fileOutputStream.close();
    }

}

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java 替換字符串中的回車換行符的方法

    Java 替換字符串中的回車換行符的方法

    Java 替換字符串中的回車換行符的方法,需要的朋友可以參考一下
    2013-03-03
  • java如何替換word/doc文件中的內(nèi)容

    java如何替換word/doc文件中的內(nèi)容

    docx格式的文件本質(zhì)上是一個(gè)XML文件,只要用占位符在指定的地方標(biāo)記,然后替換掉標(biāo)記出的內(nèi)容,這篇文章主要介紹了java替換word/doc文件中的內(nèi)容,需要的朋友可以參考下
    2023-06-06
  • java編寫ftp下載工具

    java編寫ftp下載工具

    本文給大家介紹的是如何一步步實(shí)現(xiàn)使用java編寫FTP下載工具,而且是在Linux環(huán)境下使用javac編譯的,在運(yùn)行和編譯上有些不同之處,有需要的小伙伴們參考下吧。
    2015-03-03
  • 在Java中將double轉(zhuǎn)換為int的操作方法

    在Java中將double轉(zhuǎn)換為int的操作方法

    這篇文章主要介紹了在Java中將double轉(zhuǎn)換為int的操作方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • 淺談log4j 不打印異常堆棧

    淺談log4j 不打印異常堆棧

    這篇文章主要介紹了淺談log4j 不打印異常堆棧,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • 使用Java編寫控制JDBC連接、執(zhí)行及關(guān)閉的工具類

    使用Java編寫控制JDBC連接、執(zhí)行及關(guān)閉的工具類

    這篇文章主要介紹了如何使用Java來編寫控制JDBC連接、執(zhí)行及關(guān)閉的程序,包括一個(gè)針對(duì)各種數(shù)據(jù)庫(kù)通用的釋放資源的工具類的寫法,需要的朋友可以參考下
    2016-03-03
  • 淺析Java中的Caffeine緩存源碼

    淺析Java中的Caffeine緩存源碼

    這篇文章主要介紹了淺析Java中的Caffeine緩存源碼,Caffeine是一個(gè)Java開發(fā)的高性能緩存庫(kù),它提供了一種簡(jiǎn)單而強(qiáng)大的方式來管理內(nèi)存中的緩存數(shù)據(jù),Caffeine的設(shè)計(jì)目標(biāo)是提供快速、高效的緩存訪問,同時(shí)保持簡(jiǎn)單易用的API,本文針對(duì)其部分源碼做出解析,需要的朋友可以參考下
    2023-10-10
  • Java實(shí)現(xiàn)角色扮演游戲的示例代碼

    Java實(shí)現(xiàn)角色扮演游戲的示例代碼

    這篇文章主要介紹了通過Java語(yǔ)言實(shí)現(xiàn)的自制的角色扮演游戲,選擇兩個(gè)角色,然后進(jìn)行PK,可用來學(xué)習(xí)JAVA的接口,繼承和多態(tài)。需要的可以參考一下
    2022-02-02
  • Java實(shí)現(xiàn)斗地主的發(fā)牌功能

    Java實(shí)現(xiàn)斗地主的發(fā)牌功能

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)斗地主的發(fā)牌功能,含按順序發(fā)牌和玩家牌排序顯示等功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Java HttpClient實(shí)現(xiàn)socks代理的示例代碼

    Java HttpClient實(shí)現(xiàn)socks代理的示例代碼

    這篇文章主要介紹了Java HttpClient 實(shí)現(xiàn) socks 代理的示例代碼,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-11-11

最新評(píng)論

明水县| 临澧县| 阿尔山市| 闻喜县| 谷城县| 旌德县| 海安县| 山东| 柳州市| 卓资县| 镇雄县| 田林县| 五莲县| 阿克苏市| 日喀则市| 调兵山市| 荣昌县| 新平| 长春市| 齐河县| 桂林市| 石柱| 安徽省| 漳平市| 龙山县| 富蕴县| 湟中县| 绍兴市| 凌源市| 吉木乃县| 绥芬河市| 景德镇市| 澄江县| 刚察县| 宜君县| 陇南市| 建湖县| 同仁县| 永嘉县| 剑河县| 晴隆县|