使用java中的对象列表填充docx表

carvr3hs  于 2021-07-11  发布在  Java
关注(0)|答案(1)|浏览(398)

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

我成功地实现了场的Map,但只针对一个对象。如何引入另一行(来自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()将值放置在表的右侧

qjp7pelc

qjp7pelc1#

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

XWPFTableRow row =tbl.createRow();

row.addNewTableCell().setText("whatever you want");

tbl.addRow(row, y);

但在您的例子中,似乎您希望在迭代docx表和java对象列表时动态添加行,
在java中,当循环集合时,您不安全或无法更改集合,因此您可能需要分两步执行,
在填充docx表之前,首先需要将行展开/添加到docx表中,首先计算java列表中有多少个对象。
当已经相应地添加了表行时,可以迭代并填充它们

相关问题