`

POI读取带有公式的Excel单元格

 
阅读更多
来自:http://blog.csdn.net/cuihaiyang/article/details/7193027
private static String getStringCellValue(Cell cell) {// 获取单元格数据内容为字符串类型的数据 
        String strCell = ""; 
        if (cell == null) { 
            return ""; 
        } 
        switch (cell.getCellType()) { 
        case Cell.CELL_TYPE_FORMULA: 
            // cell.getCellFormula(); 
            try { 
            /*
             * 此处判断使用公式生成的字符串有问题,因为HSSFDateUtil.isCellDateFormatted(cell)判断过程中cell
             * .getNumericCellValue();方法会抛出java.lang.NumberFormatException异常
             */ 
             if (HSSFDateUtil.isCellDateFormatted(cell)) { 
                Date date = cell.getDateCellValue(); 
                strCell = (date.getYear() + 1900) + "-" + (date.getMonth() + 1) +"-" + date.getDate(); 
                break; 
             } else { 
                strCell = String.valueOf(cell.getNumericCellValue()); 
             } 
             } catch (IllegalStateException e) { 
                strCell = String.valueOf(cell.getRichStringCellValue()); 
             } 
            break; 
        case Cell.CELL_TYPE_STRING: 
            strCell = cell.getStringCellValue(); 
            break; 
        case Cell.CELL_TYPE_NUMERIC: 
            if (HSSFDateUtil.isCellDateFormatted(cell)) { 
                strCell = getDateCellValue(cell); 
                break; 
            } else { 
                strCell = String.valueOf(cell.getNumericCellValue()); 
                break; 
            } 
        case Cell.CELL_TYPE_BOOLEAN: 
            strCell = String.valueOf(cell.getBooleanCellValue()); 
            break; 
        case Cell.CELL_TYPE_BLANK: 
            strCell = ""; 
            break; 
        default: 
            strCell = ""; 
            break; 
        } 
        return strCell; 
    } 
这个方法在导入没有公式的Excel时没有问题,今天遇到含有公式的Excel,如图:


报错信息如下:



经调试发现HSSFDateUtil.isCellDateFormatted(cell)判断过程中会执行cell.getNumericCellValue();方法,字符串“201201FSSH300466”在转换成数字的时候出错了,在网上搜了一下,大多数的解决方法是:

[java] view plaincopy
case HSSFCell.CELL_TYPE_FORMULA: 
try { 
     value = String.valueOf(cell.getNumericCellValue()); 
} catch (IllegalStateException e) { 
     value = String.valueOf(cell.getRichStringCellValue()); 

break; 
经测试发现,在执行cell.getNumericCellValue()方法时还是抛出NumberFormatException异常,于是将try/catch中的方法互换:

[java] view plaincopy
case HSSFCell.CELL_TYPE_FORMULA: 
try { 
       strCell = String.valueOf(cell.getStringCellValue()); 
} catch (IllegalStateException e) { 
       strCell = String.valueOf(cell.getNumericCellValue()); 

break; 
这样对于字符串cell.getStringCellValue()方法即可取得其值,如果公式生成的是数值,使用cell.getStringCellValue()方法会抛出IllegalStateException异常,在异常处理中使用cell.getNumericCellValue();即可。
分享到:
评论

相关推荐

    excel poi工具类 导入 导出 合并单元格 计算公式

    // 创建带有公式的单元格 Cell cell = row.createCell(0, CellType.FORMULA); cell.setCellFormula("SUM(A1:A5)"); // 合并单元格 sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 1)); // 保存到文件 try ...

    poi excel 模板读取并导出带公式的excel文档

    ### POI Excel 模板读取并导出带公式的Excel文档 #### 一、概述 在实际工作中,经常需要批量处理数据,并将其导出到Excel文件中,特别是在需要复杂计算的情况下,例如工资单、统计数据汇总等场景。利用Apache POI...

    POI导出带图片的excel

    XSSFSheet sheet = workbook.createSheet("带有图片的Sheet"); ``` 4. **读取图片数据**:图片需要以字节数组的形式存在。你可以从文件系统中读取图片,然后将其转换为字节数组。 ```java byte[] imageBytes =...

    Java POI读取excel中数值精度损失问题解决

    Java POI 读取 Excel 中数值精度损失...Java POI 读取 Excel 中数值精度损失问题解决可以通过将 Excel 单元格改为文本类型或使用 Java 处理来解决。这些方法可以确保读取到的数据是正确的,避免了数值精度损失的问题。

    java使用 poi 读取excel

    Java 使用 Apache POI 读取 Excel 是一个常见的任务,在处理数据导入、导出或数据分析时非常有用。Apache POI 是一个流行的开源库,它允许 Java 开发者创建、修改和显示 Microsoft Office 格式的文件,其中包括 ...

    poi读取excel文件

    Apache POI提供了丰富的API,可以实现对Excel文件的复杂操作,如合并单元格、设置样式、处理公式等。在Android开发中,这些功能同样适用,但需要注意资源管理,因为Android设备的内存有限。 总的来说,Apache POI是...

    java_poi导入excel通用工具类V0915

    4. **处理带有公式的Excel字段**:20170915的更新解决了不能导入含有公式字段的Excel问题。这意味着工具类现在可以正确解析包含计算结果的单元格,无论这些结果是公式计算得出还是手动输入的。 使用Java POI库,...

    poi3.9读写excel兼容03和07版本

    6. **数据公式处理**:POI支持读写Excel公式,包括计算公式的结果。 7. **流式读写**:通过SXSSF API,POI提供了对.xlsx文件的流式处理,这在处理大量数据时非常有用,因为它只保留最近使用的行在内存中。 8. **...

    poi 基于excel模板导出功能

    1. 模板设计:在Excel中创建模板,设置好需要动态填充的数据区域,如单元格样式、公式、条件格式等。 2. 保存模板:将模板文件保存为.xlsx格式,以便于POI读取。 三、使用POI读取模板并填充数据 1. 加载模板:使用...

    POI解析EXCEl分层

    在描述中提到的博文链接虽然没有具体内容,但通常会详细阐述如何使用POI来逐级解析Excel数据,这对于处理复杂结构的数据,如带有嵌套表或多个工作表的大型Excel文件特别有用。 在处理Excel文件时,POI提供了一套...

    poi帮助文档附带poi操作excel例子

    6. **处理日期和公式**:POI提供了特殊的方法来处理日期单元格和公式单元格,如使用DataFormat类创建日期格式,以及使用FormulaEvaluator来计算公式的值。 7. **高级功能**:可能还包括合并单元格、使用图表、处理...

    poi_java_excel.zip_java 导出excel_poi excel_poi导出再导入excel中文_导出exce

    此外,对于读取带有中文的Excel文件,同样需要注意字符编码。在打开工作簿时,可以使用以下方式: ```java InputStream is = new FileInputStream("input.xlsx"); Workbook workbook = WorkbookFactory.create(is, ...

    poi工具类项目导出excel

    - `public static Cell createCell(Row row, int cellIndex, String value)`: 创建带有值的单元格 - `public static void applyStyle(Cell cell, CellStyle style)`: 应用样式 - `public static void ...

    POI_读取Excel表教程

    例如,如果你需要读取带有公式的单元格,可以使用`cell.getCachedFormulaResultType()`来获取计算结果的类型,并相应地处理结果。 总之,Apache POI为Java开发者提供了一个强大且灵活的工具,可以方便地操作Excel...

    POI.rar_2007_POI_poi excel2003 2007

    描述中的"JAVA 读取EXECL 2007 的POI文件,附带一个操作示例"表明这个压缩包包含了一个使用Apache POI读取Excel 2007 (XLSX)文件的Java代码示例。通过此示例,开发者可以学习如何在自己的项目中实现类似的文件操作...

    java的POI操作Excel文件.docx

    通过HSSFFormulaEvaluator,可以对带有公式的单元格进行求值。HSSFDataValidation则可以帮助实现数据验证规则,确保输入数据符合预设条件。 需要注意的是,由于Excel文件的复杂性,处理大文件可能会消耗大量内存。...

    POI3.5_HSSF_和XSSF_Excel操作快速入门手册

    用户可以学会如何添加POI支持、创建新工作簿、创建新的sheet页、操作单元格、处理不同格式的内容、遍历列和单元格、提取单元格内容、处理单元格边框和填充色、合并单元格、自定义字体和颜色、读取和重写工作簿、在...

    Apache-Poi对word和excel的处理

    特别地,Apache-Poi对于Excel的模板处理能力也十分强大,它允许用户创建带有占位符的模板,并将数据填充进模板以生成个性化的工作簿。 在给出的部分内容中,我们可以看到一些字段标签如姓名、年龄、名字、分数等,...

    poi3.17详情版,附带实例代码,可参考

    你可以创建新的工作簿,添加工作表,插入单元格,设置公式,格式化样式,以及读取和修改现有Excel文件。 2. **Word处理**:使用HWPF和XWPF API,开发者可以创建、修改和解析Word文档。这包括添加段落,设置字体和...

    java利用poi对Excel进行读写操作支持多sheet格式

    总之,Java POI库为开发者提供了强大而灵活的工具,使得在Java程序中处理Excel文件变得简单易行,无论是一份包含单Sheet的简单报表,还是带有复杂结构和逻辑的多Sheet文件,都能轻松应对。通过深入学习和实践,你...

Global site tag (gtag.js) - Google Analytics