我有以下代碼POI錯誤的日期式值來計算
public boolean processCell(boolean hasData, StringBuffer rowData, Cell cell)
{
switch (cell.getCellType())
{
case Cell.CELL_TYPE_FORMULA:
{
try
{
this.evaluator.clearAllCachedResultValues();
switch (this.evaluator.evaluateFormulaCell(cell))
{
case XSSFCell.CELL_TYPE_NUMERIC:
{
if (DateUtil.isCellDateFormatted(cell))
{
logger.warn(cell.getCellFormula());
rowData.append(dateFormat.format(cell.getDateCellValue()));
hasData = true;
}
else
{
rowData.append(numberFormat.format(cell.getNumericCellValue()));
hasData = true;
}
break;
}
case XSSFCell.CELL_TYPE_STRING:
{
String stringVal = cell.getStringCellValue().trim().replaceAll("\n", "");
if (stringVal.trim().equalsIgnoreCase("Total MoU/active customer"))
{
logger.warn("Last - KPI ::" + stringVal);
this.finalRecord = true;
}
rowData.append(stringVal);
hasData = true;
break;
}
case XSSFCell.CELL_TYPE_BOOLEAN:
{
rowData.append(cell.getBooleanCellValue());
hasData = true;
break;
}
case XSSFCell.CELL_TYPE_ERROR:
{
int eval = cell.getErrorCellValue();
if (eval == DIVIDE_BY_ZERO)
rowData.append("0");
hasData = true;
break;
}
case XSSFCell.CELL_TYPE_BLANK:
{
rowData.append("");
hasData = true;
break;
}
}
}
catch (java.lang.IllegalArgumentException e)
{
logger.error(" Formula [ " + (cell.getRowIndex() + 1) + "," + (cell.getColumnIndex() + 1) + " ] "
+ e.getMessage());
rowData.append("CellError");
this.STATUS = FAILURE;
hasData = true;
break;
}
catch (java.lang.IllegalStateException e)
{
logger.error(" Formula [ " + (cell.getRowIndex() + 1) + "," + (cell.getColumnIndex() + 1) + " ] "
+ e.getMessage());
rowData.append("CellError");
this.STATUS = FAILURE;
hasData = true;
break;
}
catch (java.lang.RuntimeException e)
{
this.STATUS = FAILURE;
logger.error(" Formula [ " + (cell.getRowIndex() + 1) + "," + (cell.getColumnIndex() + 1) + " ] "
+ e.getMessage());
rowData.append("MissingFileError");
hasData = true;
break;
}
break;
}
case XSSFCell.CELL_TYPE_BLANK:
{
rowData.append("");
hasData = true;
break;
}
case XSSFCell.CELL_TYPE_NUMERIC:
{
if (DateUtil.isCellDateFormatted(cell))
{
rowData.append(dateFormat.format(cell.getDateCellValue()));
hasData = true;
}
else
{
rowData.append(numberFormat.format(cell.getNumericCellValue()));
hasData = true;
}
break;
}
// Formula evaluation ends here
case XSSFCell.CELL_TYPE_STRING:
{
String stringVal = cell.getStringCellValue().trim().replaceAll("\n", "");
if (stringVal.trim().equalsIgnoreCase("Total MoU/active customer"))
{
logger.warn("Last - KPI ::" + stringVal);
this.finalRecord = true;
;
}
rowData.append(stringVal);
hasData = true;
break;
}
case XSSFCell.CELL_TYPE_ERROR:
{
int eval = cell.getErrorCellValue();
if (eval == DIVIDE_BY_ZERO)
rowData.append("0");
hasData = true;
break;
}
case XSSFCell.CELL_TYPE_BOOLEAN:
{
rowData.append(cell.getBooleanCellValue());
hasData = true;
break;
}
}
rowData.append(FIELD_SEPARATOR);
return hasData;
}
當我運行該程序。在日期列中,我有一系列日期。沒有公式的最後一個日期是2009年12月31日它的單元格參考oj在Excel表格中我有Excel 2010年1月1日但Excel表格中我有29/04/2009我在這個單元格上打印了公式並找到出於此,poi 3.6在這方面有錯誤的單元格引用。而不是OJ + 1個公司給NE + 1
請幫我解決這個問題
當使用XSSFWorkBook時,我看不到任何異常,如此處所述http://poi.apache.org/spreadsheet/converting.html – trashgod 2010-01-18 03:37:49
在sscce中可能難以確定間歇性故障。您可能需要考慮同步問題的可能性。 – trashgod 2010-01-18 03:45:31
是的,它大部分時間都會產生結果,但是當我編寫相同的代碼並將其用於XSSFWorkBook時,我得到了錯誤的結果,但是在大多數情況下我都無法理解這個問題。 – user252128 2010-01-17 18:06:21