2012-03-31 31 views
0

私はMicrosoft Accessデータベースからデータを読み取り、このデータをExcelシートに書き込むアプリケーションを作成しています。すべて正常に動作しますが、新しいデータをファイルに書き込むことはできません。ここでは、コードです:あなたのポストにあなたのコメントからJavaからapache poiを使用してExcelファイルを書き込む

private static XSSFWorkbook readFile(String filename) throws IOException { 
    // return new XSSFWorkbook(new FileInputStream(filename)); 
    InputStream inp = new FileInputStream(filename); 
    XSSFWorkbook wb = null; 
    try { 
     wb = (XSSFWorkbook) WorkbookFactory.create(inp); 
    } catch (InvalidFormatException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return wb; 
} 

public void writeToFile(LinkedList<TimeRowWrapper> list) { 

    try { 
     // read file 
     XSSFWorkbook workbook = readFile(fileName); 

     // choose table from index 
     XSSFSheet sheet = workbook.getSheetAt(kapaSheetIndex); 

     for (Row row : sheet) { 
      int rowNum = row.getRowNum(); 

      // iterate over list for row id 
      for (TimeRowWrapper trw : list) { 
       if (rowNum == trw.getRowNumber()) { 

        double hour = Math 
          .round(trw.getTotalTime()/60.0 * 100.)/100.; 
        Cell cell = row.getCell(timeCol); 
        cell.setCellValue(hour); 
       } 
      } 
     } 

     XSSFFormulaEvaluator.evaluateAllFormulaCells(workbook); 

     FileOutputStream out = new FileOutputStream(fileName); 
     workbook.write(out); 
     out.close(); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } catch (NullPointerException e) { 
     e.printStackTrace(); 
    } catch (NumberFormatException e) { 
     e.printStackTrace(); 
    } 
} 
+0

if条件が成立しないのですか? – Jayan

+0

Excelシートには、書き込みたい行と列がすでに含まれていますか?そうでなければ、getRow()とgetCell()の呼び出しはnullを返すのでどこにも行きません。または、HSSFSheetのIterableインターフェースに依存しているので、繰り返しはゼロになると思います。代わりにモデルリストを反復してみて、createRow()とcreateCell()を呼び出します。 – nansen

+0

if条件がtrueになります。すべてのループはそれぞれのループでうまく動作します。 Excelファイルには、データを書きたい行と列が含まれています。 – krains

答えて

0

私は掲示ソースコードは正しかったです。慈善団体には、0の枝を持ついくつかのColumsがありました - そのため、私は表示されていない列に書き込もうとしました。

0

、私はあなたがループのためにやっていると仮定していることは正しいです。あなたがコードから数値を書いているように見えますが、読み込んだ同じワークブックにも書いています。私は理論上、セルに正しく書いているかもしれませんが、数式評価を行うと、エクセルは奇妙な形式の書式が好きなので、数字の扱いにくいものです。

入力ファイルではなく新しいファイルに書き込んで、少なくともスプレッドシートを生成するかどうかを確認してください。

また行をコメントアウトするときに何が起こるか見てみてください:

XSSFFormulaEvaluator.evaluateAllFormulaCells(workbook); 
関連する問題