Excel单元格中的多行文本

36

我正在尝试将多行文本写入Excel单元格。

cell.setCellValue("line1 \n line2");

但是当我打开这个文档时,我只看到一行文字,直到我双击它进行编辑,才变成两行。为什么会这样?谢谢


1
我完全同意你的观点,我的日期值单元格和其格式也有相同的行为。 - jaychapani
@jaychapani,你解决了这个问题吗? - Dennis
3个回答

58

你需要设置行高来容纳两行文本。

row.setHeightInPoints((2*sheet.getDefaultRowHeightInPoints()));
你需要设置wrap text = true才能换行。 尝试这个: 这里的wb是Workbook
 CellStyle cs = wb.createCellStyle();
 cs.setWrapText(true);
 cell.setCellStyle(cs);

7
不帮助。我的问题不是关于行高的。文本在一个单元格中只有一行,直到我双击该单元格。 - Timofei Davydik
4
@vikiiii 我猜wraptext会根据列宽工作。如果我强制需要下一行的文本怎么办? - jaychapani
@vikiiii 我有同样的问题,但这个解决方案对我不起作用。如果在双击单元格之前在 Excel 中按下“格式”,则不会选中“自动换行”属性。在双击后,文本会分成两行,并选中“自动换行”。 这是什么神奇操作? - Dennis
@Dennis - 你需要设置行高和文本换行样式,就像上面所述,但在添加数据后还要调整该列的宽度,例如,“sheet.autoSizeColumn(2)” 。这对我来说适用于3.15 JAR。 - Ed Norris
在设置单元格样式之前,您必须先设置单元格值。<br/> 不起作用:<br/> cell.setCellStyle(cellStyle);<br/> cell.setCellValue(new HSSFRichTextString("abc\r\ndef"));<br/> 起作用:</br> cell.setCellValue(new HSSFRichTextString("abc\r\ndef"));<br/> cell.setCellStyle(cellStyle); - Gabriel.ge

2
我发现在按照这个问题的已接受答案后,你现在必须包括第三步。你必须在添加完所有数据后自动调整列大小。
假设您关心的是第二列,

sheet.autoSizeColumn(2);

查看 Apache 的 this 示例以获得上下文。它在我使用 Java 8、poi-3.15.jar 和 Excel for Mac 时有效。

1
我不建议使用autoSizeColumn,因为它是一个缓慢的操作,相反,可以创建一个函数来设置特定列的大小。我强烈建议创建一个包装类,例如ExcelBuilder,并创建您经常用于修改Excel的函数。 - Artjom Prozorov
@ArtjomProzorov,你能否写一篇新的答案?我现在无法测试。 - Ed Norris
这确实慢得要死。 - wonsuc

0

这对我有用

cell.setCellValue(“line1 \n\r line2”);


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