2012-05-09 7 views
3

私は既存のExcelファイルを編集するためにjxl apiを使用しています。 しかし、私は新しい列を追加して、nullポインタの例外を示すシートを書き込もうとします。下図のように私が使用している コードは次のとおりです。jxl apiを使用して既存のExcelファイルに新しい列を挿入

File file = new File("d:\\test.xls"); 
Workbook workbook; 
WritableWorkbook copy = null; 
if (file.exists()) { 

    try { 
     workbook = Workbook.getWorkbook(file); 
     copy = Workbook.createWorkbook(new File("C:\\TEMP\\temp.xls"), 
       workbook); 
    } catch (BiffException e) { 

     e.printStackTrace(); 
    } catch (FileNotFoundException fnf) { 
     fnf.printStackTrace(); 

    } catch (IOException e) { 

     e.printStackTrace(); 
    } 

} 
WritableSheet sheet = copy.getSheet(0); 

sheet.insertColumn(2); //this statement causes error 
         //if I comment it the code works fine 

try { 
    copy.write(); 
    copy.close(); 
} 
catch(Exception e) 
{ 

    e.printStackTrace(); 
} 

この問題を解決し、新しい列を挿入するために私を助けてください。

Excelの単一セルを正常に編集してファイルを書き込むことができます。

答えて

2

あなたが使用しているAPIはおそらく最良のものではありません。私もjexcelapiをダウンロードするまで、この問題(insertcolumn行でnullpointer例外)があり、解決策が見つかりませんでした。あなただけのワークブックを読み書きすることができますJXLで

HTH

2

上記のコードはコンピュータで正常に動作します。例外情報を教えて、ここにコード全体を入れておきましょう。

+0

です。 – Jaison

1

は、我々はのinsertRow()またはinsertColumn()メソッドは何をすべきかについて、私は明確ではないですthis-

Workbook aWorkBook = Workbook.getWorkbook(new File("Originalfile.xls")); 
     WritableWorkbook aCopy = Workbook.createWorkbook(new File("Originalfile.xls"), aWorkBook); 
     WritableSheet aCopySheet = aCopy.getSheet(0);//index of the needed sheet 
     WritableCell aWritableCell = aCopySheet.getWritableCell(1,1);//no need! 
     jxl.write.Label anotherWritableCell = new jxl.write.Label(1,12 ,"SUN"); 
       //position of the new cell in column,row 
      //can be a new Label() or new Number() or new Formula 

      aCopySheet.addCell(anotherWritableCell); 

     aCopy.write(); 
     aCopy.close(); 

などの新しいセルので、新しい行/列を挿入することができます。 お手伝い願います!

+0

このソリューションは、新しいセルを書きたい場合にうまく動作します。しかし、私のファイルには既に値が入っていて、新しい列を挿入したい。つまり、現在ファイル内にあるすべての情報が次の列に移動する必要があります。 – Jaison

+0

このコードは、既存のExcelファイルにセルを書きたい場合に便利です.Uのような問題は、既存の行を最初に読み取るだけです。最後の行のデータを取り込みます。上のコードを使用して新しい行を挿入します。最後のセルのデータを持つ新しいセルを最後の行に書き込むので、すべての必要性は上記のコードにいくつかのロジックを追加することです..

0

それは(何かがあるかどうか、何か他のもの)あなたはApacheのPOIhttp://poi.apache.org/ を使用する必要があり、JXLでは不可能である

既存のものを編集しないでください。 ブックをコピーして新しく作成した編集もできます。 WritableWorkbook newWorkbook = Workbook.createWorkbook(newFile、workbookTemplate、wbSettings); しかし、私はjxlを使用していたときに私の問題であったすべてのオートフィルタを整形することをたくさん失うでしょう。

グレートの例は、ファイル内のデータフィルタを追加した後に動作するか確認してくださいあなたはfile.Plsにデータフィルタを追加するまで、それが動作ここ http://poi.apache.org/spreadsheet/quick-guide.html http://www.kodejava.org/browse/49.html