使用Apache Poi,我如何创build多值电子表格单元格,以便在MS Excel中正确显示,而不仅仅是OpenOffice

我正在使用Jakarta Poi从Java创build一个可以在Excel / Office中打开的.xlsx文件。 其中一些单元格代表多个值,最初为null,例如当我在单元格中设置'fred / u000 / tom'时,我用'\ n'replace空字符

这一切都适用于OpenOffice,它提高了这些行的高度,以适应多行。 但是我发现OpenOffice以xlsx格式和xls格式打开文件需要更长的时间,所以我投资了Microsoft Excel,并在同一行中显示了所有值。

开发办公室

MS Excel

如果你去编辑一个值然后Excel增加高度来容纳多个值,但为什么不读它。

MS Excel编辑 由于没有必要编辑电子表格,还有其他的东西可以用来代替'\ n'或者一些选项来强制Excel显示OpenOffice这样的文件

代码提取

private void addFieldValue(Session session, Worksheet sheet, Row r, int spreadsheetIndex, SongFieldNameColumnWidth sfncw, SongChanges fieldChanges, Song song) { SongFieldName songFieldName = sfncw.getSongFieldName(); String value = ""; org.apache.poi.ss.usermodel.Cell c ; c=r.createCell(spreadsheetIndex); //Chnanges have been made to this field if(fieldChanges!=null) { if (changeType == SongChangeType.ADD) { value = fieldChanges.getNewValue().replace('\u0000', '\n'); c.setCellValue(value); c.setCellStyle(fieldAddedStyle); } else if (changeType == SongChangeType.EDIT) { value = fieldChanges.getNewValue().replace('\u0000', '\n'); c.setCellValue(value); c.setCellStyle(fieldChangedStyle); //addCellComment(r, c, sheet, fieldChanges.getOriginalValue()); } else if (changeType == SongChangeType.DELETE) { c.setCellStyle(fieldDeletedStyle); } } sfncw.setColumnWidthFromValue(value); } 

从你的代码中不清楚你做错了什么,但正如在我的评论中所说的, setWrapText需要在CellStyle中设置为true,以便有行换行的单元格。

例:

 import java.io.FileOutputStream; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class CreateExcelCellWrapText { public static void main(String[] args) throws Exception { XSSFWorkbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet(); Row row = sheet.createRow(0); CellStyle cellstyle = workbook.createCellStyle(); cellstyle.setWrapText(true); Cell cell = row.createCell(0); cell.setCellValue("String cell content\nhaving line wrap."); cell.setCellStyle(cellstyle); sheet.autoSizeColumn(0); workbook.write(new FileOutputStream("CreateExcelCellWrapText.xlsx")); workbook.close(); } } 

结果:

在这里输入图像说明