Apache POI – 创build单元格,在单个命令中设置单元格值和单元格样式
我正在尝试创build一个单元格,为其分配预先存在的样式并为该单元格设置值。 这可以通过使用以下3行代码正常完成:
HSSFRow row = sheetBenefits.createRow(rowNoPB+i); HSSFCell cell0 = row.createCell(1); cell0.setCellStyle(style); cell0.setCellValue(new String("Survey "+i));
但是,单元格的创build和赋值可以简化为一行,如下所示:
row.createCell(1).setCellValue(new String("Survey "+i));
我无法将此行的样式设置为:
row.createCell(1).setCellValue(new String("Survey"+i)).setCellStyle(style);
它给我的错误是“不能在原始typesvoid”上调用setCellValue(String)。 这种情况下的错误是什么? 我如何在一行代码中实现所有3个目标?
row.createCell
方法返回一个row.createCell
types的对象,所以你可以调用另一个方法。 你通过调用setCellValue
方法setCellValue
。
但是这个方法返回void
– 它不返回任何东西。 所以你不能在其上调用更多的方法。
更糟糕的是,你没有将row.createCell
的结果存储在任何地方,所以你已经失去了你创build的引用。 您需要从row
再次检索,或者更好 – 您需要首先将其存储在(本地)variables中。
你正在寻找的是一个“stream体界面”,就像由StringBuilder
或其他build设者实现的那样。 但是,Apache POI没有devisestream畅的界面,所以你不能这样做。
你将不得不使用你写的第一段代码。
setCellValue
方法的返回types是void
,因此在调用setCellValue
之后放置setCellStyle
方法是无效的。
另一方面,你可以考虑写一个静态的方法来为你做这个工作。
public static Cell addCell(Row row, int columnIndex, CellStyle cellStyle, String value) { Cell cell = row.createCell(columnIndex); cell.setStyle(cellStyle); cell.setValue(value); return cell; }
添加一个单元格只需调用静态方法:
addCell(row, 1, cellStyle, "Hell World");