2017-01-02 17 views
0

テスト結果/データを実行時にExcelに書き込もうとしていますが、以下のコードを記述しています。私はこのコードをコンパイルしている間に何のエラーも出ませんが、結果はこれで書かれていません。誰かが私にこの問題を手伝ってもらえますか?POIを使用して実行時にExcelに書き込むことができません

public void WritetoExcel(String filepath, String OrderID) throws IOException 
    { 
     FileInputStream ExcelFile = new FileInputStream(filepath); 
     System.out.println(filepath); 
     ExcelWBook = new XSSFWorkbook(ExcelFile); 
     System.out.println("WorkBook Sucessfully"); 
     ExcelWSheet = ExcelWBook.getSheetAt(0); 
     System.out.println("Sheet Sucessfully"); 
     Iterator<Row> rowIterator= ExcelWSheet.iterator(); 
     int RowNum =0; 

     while (rowIterator.hasNext()) 
      { 
       Row row=rowIterator.next(); 
       RowNum++; 
      } 
     try 
     { 
      Row = ExcelWSheet.createRow(RowNum); 
      Iterator<Cell> cellIterator=Row.iterator(); 
      Cell = Row.getCell(0); 
      if (Cell==null) 
       { 
        Cell=Row.createCell(0); 
        Cell.setCellValue(OrderID);     
       } 
      else 
       { 
        Cell.setCellValue(OrderID); 
       } 
      FileOutputStream fileOut = new FileOutputStream(filepath); 
      ExcelWBook.write(fileOut); 
      fileOut.flush(); 
      fileOut.close(); 
     } 

     catch (Exception e) 
     { 
      throw (e); 
     } 

    } 
+1

'catch(Exception e){throw(e); } ' - 真剣に?!? 'Row = ExcelWSheet.createRow(RowNum);'これはどのようにコンパイルされますか? –

+0

コンパイルでは、エラーは表示されません。 Javaの初心者なので、構文エラーは避けてください。ガイダンスが評価される –

+0

このリンクが役立つかどうかを確認する - http://viralpatel.net/blogs/java-read-write-excel-file-apache-poi/ – Rao

答えて

1

私はこれをコメントにしようとしていましたが、長すぎます。

あなたのコードに関するいくつかのコメントがあります。

まず、シートにある行を繰り返してカウントしているようです。次に、そのインデックスに新しい行を作成します。スプレッドシートに行がない可能性があるため、これは非常に特定の種類のスプレッドシートに対してのみ機能します。つまり、欠落行がなく、常に次の空の場所に次の行を追加したい場合です。代わりに:

Iterator<Row> rowIterator= ExcelWSheet.iterator(); 
int RowNum =0; 

while (rowIterator.hasNext()) 
    { 
     Row row=rowIterator.next(); 
     RowNum++; 
    } 
try 
{ 
    Row = ExcelWSheet.createRow(RowNum); 

あなたは同じように簡単に使用することができます。

int rowNum = ExcelWSheet.getLastRowNum() + 1; 
Row row = ExcelWSheet.createRow(rowNum); 

を、あなたはその行の最初の列にorderIdを書きます。代わりに:

Iterator<Cell> cellIterator=Row.iterator(); 
Cell = Row.getCell(0); 
if (Cell==null) 
    { 
     Cell = Row.createCell(0); 
     Cell.setCellValue(OrderID);     
    } 
else 
    { 
     Cell.setCellValue(OrderID); 
    } 

あなただけ使用することができます

Cell cell = row.createCell(0, MissingCellPolicy.CREATE_NULL_AS_BLANK); 
cell.setCellValue(OrderID); 

を加えて、このためにあなたもイテレータは必要ありませんが、あなたが本当にの行とセルを反復処理する必要がある場合スプレッドシートの場合は、次のように各構文に対してを使用することをお勧めします。

for (Row row : sheet) { 
    for (Cell cell : row) { 
     // do something with the cell 
    } 
} 
関連する問題