使用jxl库将注释添加到使用Java的Excel文件中的单元格

我正在尝试向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 。 尽pipe许多尝试,我无法修复它。 帮助将不胜感激。 谢谢。

– 编辑 –
这是修改后的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 } 

你以前在那个地方加过一个单元吗? 问题是你不能在EmptyCell上设置单元格的特性,它总是会返回null作为单元格的特性。

如果您先添加一个单元格,它会起作用(为了清晰起见,省略了try / catch),如下面的代码所示。 请注意,它也首先在新的Label单元格上设置一个WritableCellFeatures ,因为最初单元格的特征总是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中使用这个方法:

我修改了这个方法来返回创build的(和添加!) 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; } 

从评论和:

我做的 :

 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); } }