[英]Java POI - anyone been able to extract numbers from formula cells?
我已經使用Java POI一段時間了,但是遇到了一個新問題,我想知道是否有人找到了解決方案。
讀取電子表格時,您需要知道單元格的類型才能使用正確的讀取方法。
這樣就得到了單元格的類型,然后調用適當的read方法來獲取單元格的內容。
這適用於除FORMULA單元格以外的所有單元格,其中FORMULA單元格的值是一個數字。 如果是文本,則可以閱讀。 但是,如果結果值是數字,那么您從單元格中獲得的所有內容都是空白字符串。
我已經遍歷了用於POI的javadocs,並且正在使用正確的數據類型(HSSFRichTextString),但仍然不滿意。
有人有解決方案嗎?
PS POI的這種行為確實使我感到困惑,因為應該有一個默認的cell.toString()方法,該方法將返回任何單元格類型的字符串表示形式,例如默認為該單元格的value屬性。 (有點像特殊粘貼,您可以在其中選擇“值”)。
PPS:根據要求-我正在使用Java 6(1.6.0_06)和poi-3.0.2-FINAL-20080204.jar
FileInputStream fis = new FileInputStream("c:/temp/test.xls");
Workbook wb = new HSSFWorkbook(fis); //or new XSSFWorkbook("c:/temp/test.xls")
Sheet sheet = wb.getSheetAt(0);
FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
// suppose your formula is in B3
CellReference cellReference = new CellReference("B3");
Row row = sheet.getRow(cellReference.getRow());
Cell cell = row.getCell(cellReference.getCol());
CellValue cellValue = evaluator.evaluate(cell);
switch (cellValue.getCellType()) {
case Cell.CELL_TYPE_BOOLEAN:
System.out.println(cellValue.getBooleanValue());
break;
case Cell.CELL_TYPE_NUMERIC:
System.out.println(cellValue.getNumberValue());
break;
case Cell.CELL_TYPE_STRING:
System.out.println(cellValue.getStringValue());
break;
case Cell.CELL_TYPE_BLANK:
break;
case Cell.CELL_TYPE_ERROR:
break;
// CELL_TYPE_FORMULA will never happen
case Cell.CELL_TYPE_FORMULA:
break;
}
從這里無恥地復制
只需使用copy-“ paste special”將該單元格轉換為文本即可....我做到了如下...
從#2點讀取:
http://www.asif-shahzad.com/2010/12/how-to-read-numbers-as-string-value-in.html
使用createFormulaEvaluator的替代方法是使用SetCellType(CellType.STRING),然后訪問StringCellValue。 當它包含WORKDAY()函數時,使用公式評估器(使用NPOI)時遇到了問題。
如果POI無法為您解決問題,請嘗試Andy Khan的JExcel 。 我喜歡
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.