2017-01-24 10 views
0

Excelシートを開き、列のグループに自動フィルタを追加し、保存して閉じるJavaコードがあります。問題は、ユーザーがファイルを開き、最小から最大、最小から最大のものをソートしようとするとクラッシュすることです。しかし、最初にフィルターをかけると、問題なしで並べ替えることができ、凍結したりクラッシュしたりすることはありません。いくつかの私は、元の質問がよりよく問題を説明するために頼まれたので、情報やコードを更新した実験後 : javaを介してファイルを更新した後にクラッシュする原因は何ですか?

private static void AddFilter() 
{ 
    //Adds filter to the rows in Column 2 
    try 
    { 
     FileInputStream fileIn = new FileInputStream("C:\\Users\\gria\\Desktop\\Fleet Manager Summary.xls"); 

     HSSFWorkbook report = new HSSFWorkbook(fileIn); 

     Sheet sheet = report.getSheetAt(0); 
     sheet.setAutoFilter(CellRangeAddress.valueOf("A5:P5")); 


     FileOutputStream fileOut = new FileOutputStream("C:\\Users\\gria\\Desktop\\Fleet Manager SummaryT.xls"); 
     report.write(fileOut); 
     fileOut.close(); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
} 

UPDATE、ありがとうございます。

答えて

0

XSSFFormulaEvaluator.evaluateAllFormulaCells(report); 

HSSFFormulaEvaluator.evaluateAllFormulaCells(report); 

にXSSFFormulaEvaluator.evaluateAllFormulaCellsを(変更してみてください)がXSSfWorkbookのためではなくHSSFWorkbookのために動作します。

Documentation

また、 あなたはあなたにコメントし、コードを編集することができます。問題が解決しない場合は、そのPOIのバージョンを使用している私に教え、

for(int i = 5; i < sheet.getLastRowNum(); i++) 
{ 
    Cell cell = sheet.getRow(i).getCell(6); 

    //I don't know if you have data in all of the cells, 
    //So I suggest you to evaluate null 
    if(cell != null && !cell.getStringCellValue().isEmpty()) 
    { 
     cell.setCellValue(Double.valueOf(cell.getStringCellValue()).doubleValue()); 
    } 
} 
+1

。 –

+0

私はバージョン3.15を使用しています。多くの実験の後、私の質問は100%正確ではないことがわかった。私は今更新しています。 – Ardel

+0

3.13を使用していましたが、3.15にアップグレードした後、3.13で正常だったコードが壊れました。だから私は3.13に戻った。またpoi-ooxmlライブラリバージョン3.14でpoiライブラリバージョン3.13を使用しているときに、いくつかの問題がありました。 3.13バージョンのpoiとpoi-ooxml libsの両方を使用しているときは、問題はありません。しかし、なぜHSSFWorkbookでXSSFFormulaEvaluator.evaluateAllFormulaCells()メソッドを呼び出すのですか? –

関連する問題