最近、JDK 1.4 と Apache 3.2(Final) を使用するようにコードをダウングレードしました。
注: ダウングレードを選択した理由を尋ねている人のために。これらの設定を使用するサーバーにデプロイする必要があります。
すべてをダウングレードする前に、私のコードは問題なく動作し、エラーは発生しませんでした。以前のコードで使用したのと同じサンプルを実行したところ、次のエラーが発生しました。
java.lang.IllegalStateException: Cannot get a numeric value from a text formula cell
at org.apache.poi.hssf.usermodel.HSSFCell.typeMismatch(HSSFCell.java:620)
at org.apache.poi.hssf.usermodel.HSSFCell.checkFormulaCachedValueType(HSSFCell.java:625)
at org.apache.poi.hssf.usermodel.HSSFCell.getNumericCellValue(HSSFCell.java:650)
at org.apache.poi.hssf.usermodel.HSSFCell.setCellType(HSSFCell.java:308)
at org.apache.poi.hssf.usermodel.HSSFCell.setCellType(HSSFCell.java:274)
at com.Generate.Excel.Actions.ProtonMonthlyStatActions.generatePRDXSheet(ProtonMonthlyStatActions.java:292)
エラーは、二重アスタリスクで囲まれた else 部分の次のコードを指しています。
for (int x =0 ; x<dataList.getDHourList().size(); x++){ //for loop copying throughput data to excel file
row = prdX.getRow(x+2);
//checks if 3rd row in excel contains data (x+2) where x = 0 since excel is zero based
if (isRowEmpty(prdX.getRow(x+2))== true){
row = prdX.createRow(x+2); //creates row
//for Hour Computation
cell = row.createCell(colVal[2]);//creates column for Hour Computation using the formula specified
cell.setCellType(HSSFCell.CELL_TYPE_FORMULA);
cell.setCellFormula("MID("+formulaCell[0]+(x+3)+",12,2)");//fixed formula taken from Excel Template
}
//If row is not empty each cells in every row is iterated and processed
else {
//for Hour Computation
cell = row.getCell(colVal[2], HSSFRow.CREATE_NULL_AS_BLANK);
**cell.setCellType(HSSFCell.CELL_TYPE_FORMULA);**
cell.setCellFormula("MID("+formulaCell[0]+(x+3)+",12,2)");
}
}
このエラーは cell.setCellFormula 部分のテキスト値を参照していると思います...しかし、Apache 3.2 で数式を指定するにはどうすればよいでしょうか。これに関する提案はありますか?