Adding a comment to a cell in an Excel file with Java using jxl library
excel, java, jxl
Solution
Have you previously added a cell at that location? The problem is that you can't set cell features on an `EmptyCell` and it will always return `null` as its cell features.
If you add a cell first, it works (try/catch omitted for clarity), as shown by the code below. Note that it also sets a `WritableCellFeatures` on the new `Label` cell first, since initially, cell features are always `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();
Using this with the method in the OP:
I modified the method to return the created (and added!) `Number` instance. If you don't want that, you could instead retrieve the same cell using `WritableWorkbook.getWritableCell()` using the same row/col.
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;
}
Problem
I am trying to add a comment to a cell in Excel. I am using jxl library to do that: ``` cell = sheet.getWritableCell(1, 2); // cols, rows WritableCellFeatures wcf = cell.getWritableCellFeatures(); wcf.setComment("comment2"); ``` The last line returns: `Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException`. Despite many attempts I can't fix it. Help will be appreciated. Thank you. --EDIT-- This is the addNumber method after modifications: ``` 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 } ```