代码之家  ›  专栏  ›  技术社区  ›  Huntrods

Java POI-有人能从公式单元格中提取数字吗?

  •  1
  • Huntrods  · 技术社区  · 16 年前

    我已经使用javapoi一段时间了,但是遇到了一个新问题,我想知道是否有人找到了解决方案。

    当您阅读电子表格时,您需要知道单元格的类型,以便使用正确的读取方法。

    因此,您可以获得单元格类型,然后调用适当的read方法来获取单元格的内容。

    这适用于除公式单元格外的所有单元格,公式单元格的值为数字。如果是文本,你可以读得很好。但是如果结果值是一个数字,那么从单元格中得到的就是一个空字符串。

    我已经了解了用于POI的javadocs,并使用了正确的数据类型(HSSFRichTextString),但仍然没有任何乐趣。

    有人有办法吗?

    P、 这种POI的行为确实让我感到困扰,因为应该有一个默认值cell.to字符串()方法,该方法将返回任何单元格类型的字符串表示形式,例如默认为单元格的value属性。(有点像你可以选择“值”的特殊粘贴)。

    4 回复  |  直到 15 年前
        1
  •  3
  •   Learning    16 年前
     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;
        }
    

    here

        2
  •  2
  •   Asif Shahzad    15 年前

    把那个单元格转换成文本。。使用复制-“粘贴特殊”。。。我做了如下。。。。

    从第2点读取:

    http://www.asif-shahzad.com/2010/12/how-to-read-numbers-as-string-value-in.html

        3
  •  1
  •   duffymo    16 年前

    如果POI不适合你,试试看 Andy Khan's JExcel . 我更喜欢。

        4
  •  1
  •   Jizugu    13 年前

    推荐文章