Java Apache POI写入XWPFTable单元格时忽略换行符

14

希望有人能够有这方面的经验。我正在使用Apache POI 3.8b4来输出一个Word 2007格式的表格。当我做类似以下的事情时:

XWPFTableRow row = table.getRow(0);
String text = "A\nB\nC\nD";
row.getCell(i).setText(text);

我的所有换行在表格单元格中的输出都被忽略了。

A B C D

有人知道如何使其正常显示吗?

A
B
C
D
编辑: 解决方案如下:
XWPFParagraph para = row.getCell(i).getParagraphs().get(0);
for(String text : myStrings){
    XWPFRun run = para.createRun();
    run.setText(text.trim());
    run.addBreak();
}

你尝试过使用/r/n吗?或者System.properties("line.separator")吗? - John B
除非我误解了这个问题 - 你正在添加一行中的单元格,因此它们将位于4个相邻的单元格中。对于你想要做的事情,你需要为每个字符创建一个新的行。 - CoolBeans
如果您在Word中做同样的事情,它会为单元格生成什么XML?它只是做文字换行,还是像单元格中有多个段落这样的花哨操作? - Gagravarr
请澄清一下,您是要在表格中添加4个垂直单元格,还是在单个单元格中添加4行文本? - John B
@JohnB 是的,我尝试了这两种方法。我正在尝试将4行文本添加到单个单元格中。我猜添加新段落会起作用,我会试一试。@Gagravarr 查看xml,似乎软回车会添加一个带有<w: br/>元素的新运行,而crlf似乎会添加一个新段落。 - ratherOCD
5个回答

2
尝试这种方法:
XWPFParagraph paragraph = document.createParagraph();
XWPFRun run=paragraph.createRun();
run.setText("A");
run.addBreak();
run.setText("B");
run.addBreak();
run.setText("C");
document.write(OutPutFilePath);

1

试试这个:

String text = ".. ... some text with line breaks... ...";
String[] textLines = text.split(System.lineSeparator());
for(String s : textLines) {
  run.setText(s);
  run.addBreak(BreakType.TEXT_WRAPPING);
}

0

尝试这种方式:

for(String text : myStrings){
XWPFParagraph para = row.getCell(i).getParagraphs().get(0);
XWPFRun run = para.createRun();
run.setText(text.trim());
run.addBreak();

}


0
XWPFRun run=paragraph.createRun();
run.setText("StringValue".trim());
run.addBreak();
document.write(OutPutFilePath);

0

我实际上想要一个软换行,所以我需要获取现有段落,添加一个运行,然后在运行中添加一个换行符,但这基本上让我走上了正确的道路。 - ratherOCD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接