簡體   English   中英

使用Apache POI更新Microsoft Word 2007 / xml .docx文件會附加文本而不是替換文本嗎?

[英]Updating a Microsoft Word 2007/xml .docx file with Apache POI appends text rather than replaces?

我有一個Microsoft Word 2007 / xml .docx文件,我正在嘗試使用Apache POI 3.8beta4進行編輯。 除其他事項外,該文檔包含一個表,該表包含一些單元格,這些單元格以我需要替換的$ {place.holder}格式保存占位符。 到目前為止,我所擁有的是:

    InputStream resourceAsStream =  getClass().getResourceAsStream("/path/to/templates/rma.docx");       
    try {
        XWPFDocument xwpfdoc = new XWPFDocument(resourceAsStream); 

        FileOutputStream fos = new FileOutputStream(new File("C:\\temp\\newTemplate.docx"));

        for (XWPFTable table : xwpfdoc.getTables()) {

             for (XWPFTableRow row : table.getRows()) {

                 for (XWPFTableCell cell : row.getTableCells()) {

                     String data = cell.getText();

                     if (data.contains("${rma.number}")) {
                         cell.setText("08739");
                     }

                     if (data.contains("${customer.name}")) {
                         cell.setText("Roger Swann");
                     }
                 }
             }
        }
        xwpfdoc.write(fos);
        fos.flush();
        fos.close();

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    } 

問題是cell.setText(“ replacement text”}附加到已經存在的字符串數據上而不是替換它,所以我在完成的文檔中最終得到的是字符串“ {place.holder} replacement text”。

如何替換文字而不是附加文字?

問候

快速的解決方法是獲取單元格的基礎文本,並進行更改。 這有點奇怪,但是可以做到。 您可能想調用cell.getBodyElements()並遍歷它們以查找包含文本的內容。然后,在其上更改文本,而不是嘗試直接更改單元格

較長期的做法是在POI Bugzilla中打開一個新錯誤,然后上傳失敗的單元測試。 這可能應該包括您的文件,並顯示文本的“替換”,然后保存,重新加載和閱讀。 然后可以解決此問題

cell.removeParagraph(0);
cell.setText(entrada.getValue());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM