`

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 使用 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页、操作单元格、处理不同格式的内容、遍历列和单元格、提取单元格内容、处理单元格边框和填充色、合并单元格、自定义字体和颜色、读取和重写工作簿、在...

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

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

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

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

    poi导出excel

    例如,创建一个带有标题的Excel报表: ```java import org.apache.poi.hssf.usermodel.*; public class ExcelExporter { public void exportExcel() { HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet ...

    JAVA_poi读取Excel[归纳].pdf

    blic class ExcelSample2 { public static void main(String[] args) throws IOException { // 创建一个带有数据的Excel文件 HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("新表单"); /...

Global site tag (gtag.js) - Google Analytics