5

我正在尝试向 Excel 中的单元格添加注释。我正在使用 jxl 库来做到这一点:

   cell = sheet.getWritableCell(1, 2); // cols, rows
   WritableCellFeatures wcf = cell.getWritableCellFeatures();
   wcf.setComment("comment2");

最后一行返回:Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException。尽管进行了多次尝试,但我无法修复它。帮助将不胜感激。谢谢你。

--EDIT--
这是修改后的addNumber方法:

private static void addNumber(WritableSheet sheet, int column, int row,
        double d) throws WriteException, RowsExceededException {

    Number number;
    number = new Number(column, row, d, timesStandard);

    //sheet.addCell(number); // need to add the cell first

    if (user wants to add a comment) {
        WritableCellFeatures wcf = new WritableCellFeatures();
        wcf.setComment("the comment");
        number.setCellFeatures(wcf);
    }

    //sheet.addCell(number); // but may need to add the cell with comments as well
}
4

2 回答 2

3

您之前是否在该位置添加了一个单元格?问题是您不能在 an 上设置单元格特征,EmptyCell并且它将始终null作为其单元格特征返回。

如果您先添加一个单元格,它会起作用(为清楚起见,省略了 try/catch),如下面的代码所示。请注意,它还首先WritableCellFeatures在新Label单元格上设置 a,因为最初,单元格特征始终为null

            WritableWorkbook book = Workbook.createWorkbook(new File("output.xls"));
            WritableSheet sheet = book.createSheet("Some Sheet", 0);

            Label label = new Label(1, 2, "Some label"); 
            sheet.addCell(label); // add cell!

            WritableCellFeatures wcf = new WritableCellFeatures();
            wcf.setComment("Hello!");

            // set cell features!
            label.setCellFeatures(wcf);

            book.write();
            book.close();

将其与 OP 中的方法一起使用:

我修改了返回创建(并添加!)Number实例的方法。如果您不希望这样,您可以WritableWorkbook.getWritableCell()使用相同的行/列来检索相同的单元格。

public static void main(String[] args) throws IOException, RowsExceededException, WriteException {

    File file = new File("output.xls");
    WritableWorkbook workbook = Workbook.createWorkbook(file);
    WritableSheet sheet = workbook.createSheet("First Sheet", 0);

    Number number = addNumber(sheet, 3, 2, 565d);

    WritableCellFeatures wcf = number.getWritableCellFeatures();
    if (wcf == null) wcf = new WritableCellFeatures();
    wcf.setComment("the comment");
    number.setCellFeatures(wcf);

    workbook.write(); 
    workbook.close();

}

private static Number addNumber(WritableSheet sheet, int column, int row,
        double d) throws WriteException, RowsExceededException {

    Number number = new Number(column, row, d, timesStandard);
    sheet.addCell(number); // need to add the cell first
    return number;
}
于 2012-04-14T20:02:16.270 回答
2

从评论和:

我做的 :

private static void addNumber(WritableSheet sheet, int column, int row,
    double d) throws WriteException, RowsExceededException {

   Number number;
   number = new Number(column, row, d, timesStandard);

   sheet.addCell(number);

   if (user wants to add a comment) {
     WritableCell cell = sheet.getWritableCell(column, row)
     Label l = (Label) cell;
     WritableCellFeatures cellFeatures = new WritableCellFeatures();
     cellFeatures.setComment("the cell comment");
     l.setCellFeatures(cellFeatures);
     sheet.addCell(l);
  }

}
于 2012-04-14T21:32:15.597 回答