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();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章