【发布时间】: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();
}
}
}
【问题讨论】:
标签: java templates data-binding apache-poi docx