我正在尝试创建一个单元格,为其指定一个预先存在的样式并设置该单元格的值。这通常可以通过使用以下3行代码来完成:
HSSFRow row = sheetBenefits.createRow(rowNoPB+i);
HSSFCell cell0 = row.createCell(1);
cell0.setCellStyle(style);
cell0.setCellValue(new String("Survey "+i));
但是,单元格创建和分配值可以减少到一行,如下所示:
row.createCell(1).setCellValue(new String("Survey "+i));
我无法将此行中的样式设置为:
row.createCell(1).setCellValue(new String("Survey"+i)).setCellStyle(style);
它给我的错误是"无法在原始类型void"上调用setCellValue(String)。这种情况下的错误是什么?如何在一行代码中实现所有3个目标?
答案 0 :(得分:1)
方法row.createCell
返回类型为HSSFCell
的对象,因此您可以在其上调用另一个方法。您通过调用方法setCellValue
来执行此操作。
但是这个方法会返回void
- 它不会返回任何内容。因此,您无法在其上调用更多方法。
更糟糕的是,您没有将row.createCell
的结果存储在任何地方,因此您丢失了您创建的引用。您需要从row
再次检索它,或者更好 - 您需要首先将其存储在(本地)变量中。
您正在寻找的是一个流畅的界面",就像StringBuilder
或其他建设者所实现的那样。但是,Apache POI没有设计流畅的界面,所以你不能这样做。
您必须使用您编写的第一段代码。
答案 1 :(得分:1)
setCellValue
方法的返回类型为void
,因此在调用setCellStyle
后放置setCellValue
方法无效。
另一方面,您可以考虑编写静态方法来为您完成工作。
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");