我试图用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()将值放置在表的右侧
1条答案
按热度按时间qjp7pelc1#
通常使用以下步骤在表中添加行,
但在您的例子中,似乎您希望在迭代docx表和java对象列表时动态添加行,
在java中,当循环集合时,您不安全或无法更改集合,因此您可能需要分两步执行,
在填充docx表之前,首先需要将行展开/添加到docx表中,首先计算java列表中有多少个对象。
当已经相应地添加了表行时,可以迭代并填充它们