【问题标题】:Populate docx table using List of Objects in java使用 java 中的对象列表填充 docx 表
【发布时间】:2020-11-18 11:06:56
【问题描述】:

我正在尝试使用来自 java 对象的数据填充 docx 文件中的表。更准确地说,每一行代表一个对象,我的模式从一行开始。我想知道如何在列表中有多个对象的情况下引入新行。请参见下面的示例: Docx 表如下所示:

我成功地实现了与字段的映射,但仅针对一个对象。我如何引入另一行(来自 Java)为另一个对象腾出空间?对于这个实现,我使用的是 org.apache.poi.xwpf.usermodel.XWPFDocument;


public class DocMagic {

    public static XWPFDocument replaceTextFor(XWPFDocument doc, String findText, String replaceText) {
        replaceTextFor(doc.getParagraphs(),findText,replaceText);

        doc.getTables().forEach(p -> {
            p.getRows().forEach(row -> {
                row.getTableCells().forEach(cell -> {
                    replaceTextFor(cell.getParagraphs(), findText, replaceText);
                });
            });

        });
        return doc;
    }

    private static void replaceTextFor(List<XWPFParagraph> paragraphs, String findText, String replaceText) {
        paragraphs.forEach(p -> {
            p.getRuns().forEach(run -> {
                String text = run.text();
                if (text.contains(findText)) {
                    run.setText(text.replace(findText, replaceText), 0);
                }
            });
        });
    }

    public static void saveWord(String filePath, XWPFDocument doc) throws FileNotFoundException, IOException {
        FileOutputStream out = null;
        try {
            out = new FileOutputStream(filePath);
            doc.write(out);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            out.close();
        }
    }
}

编辑:使用 addNewTableCell().setText() 将值放在表格的右侧

【问题讨论】:

    标签: java templates data-binding apache-poi docx


    【解决方案1】:

    通常您使用以下步骤在表格中添加行,

    XWPFTableRow row =tbl.createRow();
    
    row.addNewTableCell().setText("whatever you want");
    
    tbl.addRow(row, y);
    

    但在您的情况下,您似乎想在迭代 docx 表和 Java 对象列表时动态添加行,

    在 Java 中,您在循环时不安全或无法更改集合, 所以你可能需要分两步完成,

    1. 在填充之前,您需要先将行展开/添加到 docx 表中, 首先计算您的 java 列表中有多少个对象。
    2. 当表格行已相应添加时,您可以迭代并填充它们

    【讨论】:

      猜你喜欢
      • 2012-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-21
      • 2013-09-10
      相关资源
      最近更新 更多