簡體   English   中英

Java POI-有人能夠從公式單元格中提取數字嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM