2012-04-10 20 views
4

Excelのセルにコメントを追加しようとしています。私はそれを行うためにJXLライブラリを使用しています:jxlライブラリを使用してJavaでExcelファイル内のセルにコメントを追加する

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 
} 
+1

'cell.getWritableCellFeatures()'リターンヌル:

私はこれを作りましたfeaはありません確かに'WritableCellFeatures wcf = new WritableCellFeatures();を使って試してください。 wcf.setComment( "コメント"); cell.setCellFeatures(wcf); –

+1

ifステートメントで、 'cell.setCellFeatures(wcf);'を 'cell.setCellFeatures(wcf);'に置き換えることができます。 ; ' –

+0

'WritableCell cell = sheet.getWritableCell(column、row);'を追加し、 'number'を' cell'に置き換えましたが、コメントはありません – Hurdler

答えて

3

は、以前にその場所にセルを追加したことがありますか?問題は、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での方法でこれを使用する:(!、コメントを追加しました)

は、私が作成したNumberインスタンスを返すようにする方法を変更しました。それが欲しくない場合は、同じ行/ colを使用して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; 
} 
+0

あなたの答えをありがとう、ちょうどそれをチェックし、コメントが追加されました。しかし、このメソッドを使用してセルが作成されます。 'private static void addNumber(WritableSheet sheet、int column、int row、double d)throws WriteException、RowsExceededException {'明らかにコメントを上書きします。また、コメントはオプションですが、このメソッドはすべての数値を追加するために使用されます。 – Hurdler

+0

問題は何ですか? – Torious

+0

'addNumber'はおそらく新しいセル機能を設定します。 'addNumber'で追加した後、書き込み可能なセルを取得して操作を実行する必要があります。 – Torious

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

} 
関連する問題