Apache POI - 创建单元格,在单个命令中设置单元格值和单元格样式

时间:2016-03-22 01:28:50

标签: java excel apache-poi

我正在尝试创建一个单元格,为其指定一个预先存在的样式并设置该单元格的值。这通常可以通过使用以下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个目标?

2 个答案:

答案 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");