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.createCelltypes的对象,所以你可以调用另一个方法。 你通过调用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");