`
这些年
  • 浏览: 397921 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

poi处理公式

    博客分类:
  • poi
阅读更多

 

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

 

分类:JAVA2012-01-11 13:31818人阅读评论(0)收藏举报

 

项目中需要使用Excel导入数据,读取Excel单元格的方法如下:

 

[java]view plaincopyprint?

 

1.  private static String getStringCellValue(Cell cell) {// 获取单元格数据内容为字符串类型的数据

 

2.  String strCell = "";

 

3.  if (cell == null) {

 

4.  return "";

 

5.  }

 

6.  switch (cell.getCellType()) {

 

7.  case Cell.CELL_TYPE_FORMULA:

 

8.  // cell.getCellFormula();

 

9.  try {

 

10./*

 

11.* 此处判断使用公式生成的字符串有问题,因为HSSFDateUtil.isCellDateFormatted(cell)判断过程中cell

 

12.* .getNumericCellValue();方法会抛出java.lang.NumberFormatException异常

 

13.*/

 

14.if (HSSFDateUtil.isCellDateFormatted(cell)) {

 

15.Date date = cell.getDateCellValue();

 

16.strCell = (date.getYear() + 1900) + "-" + (date.getMonth() + 1) +"-" + date.getDate();

 

17.break;

 

18.} else {

 

19.strCell = String.valueOf(cell.getNumericCellValue());

 

20.}

 

21.} catch (IllegalStateException e) {

 

22.strCell = String.valueOf(cell.getRichStringCellValue());

 

23.}

 

24.break;

 

25.case Cell.CELL_TYPE_STRING:

 

26.strCell = cell.getStringCellValue();

 

27.break;

 

28.case Cell.CELL_TYPE_NUMERIC:

 

29.if (HSSFDateUtil.isCellDateFormatted(cell)) {

 

30.strCell = getDateCellValue(cell);

 

31.break;

 

32.} else {

 

33.strCell = String.valueOf(cell.getNumericCellValue());

 

34.break;

 

35.}

 

36.case Cell.CELL_TYPE_BOOLEAN:

 

37.strCell = String.valueOf(cell.getBooleanCellValue());

 

38.break;

 

39.case Cell.CELL_TYPE_BLANK:

 

40.strCell = "";

 

41.break;

 

42.default:

 

43.strCell = "";

 

44.break;

 

45.}

 

46.return strCell;

 

47.}

 

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 plaincopyprint?

 

1.  case HSSFCell.CELL_TYPE_FORMULA:

 

2.  try {

 

3.  value = String.valueOf(cell.getNumericCellValue());

 

4.  } catch (IllegalStateException e) {

 

5.  value = String.valueOf(cell.getRichStringCellValue());

 

6.  }

 

7.  break;

 

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 plaincopyprint?

 

1.  case HSSFCell.CELL_TYPE_FORMULA:

 

2.  try {

 

3.  strCell = String.valueOf(cell.getStringCellValue());

 

4.  } catch (IllegalStateException e) {

 

5.  strCell = String.valueOf(cell.getNumericCellValue());

 

6.  }

 

7.  break;

 

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();即可。

 

 

 

分享到:
评论

相关推荐

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

    5. **处理公式**: - 在模板文件中,可以预先设置好需要使用的公式,如求和、平均值等。 - POI会自动保留这些公式,并在Excel中正确计算。 #### 四、注意事项 - 确保模板文件中已经包含了需要的公式,以及正确的...

    poi解析word文档 及 试卷数学公式导入wmf图片转成png图片

    标题中的“poi解析word文档”指的是使用Apache POI库来处理Microsoft Word(.doc或.docx)文件。Apache POI是Java中一个流行的库,它允许开发者读取、写入和修改Microsoft Office格式的文件,包括Word、Excel和...

    excel2007Poi处理教程

    在这个“Excel2007Poi处理教程”中,我们将深入探讨如何利用Apache POI处理Excel 2007(XLSX)文件。Excel 2007引入了新的XML格式,使得文件结构更为复杂,但同时也提供了更多的功能和更高的数据存储容量。 首先,...

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

    这个“excel poi工具类”是利用Apache POI库来实现对Excel文件进行导入、导出、合并单元格以及处理计算公式的功能。下面我们将深入探讨这些知识点。 **1. Apache POI库介绍** Apache POI是一个开源项目,它为Java...

    java poi处理excel数据

    你可以通过这个例子学习如何操作单元格、行和列,以及如何处理公式、样式和图表。 `project`文件夹可能包含了一个完整的Java项目,其中应用了POI库来处理Excel。这将是一个很好的参考,从中你可以看到如何在实际...

    POI处理excel

    Apache POI是一个流行的开源库,主要用于处理Microsoft Office格式的文件,包括Excel(XLS和XLSX)。在Java开发环境中,POI为开发者提供了一种高效且灵活的方式来读取、写入以及修改Excel电子表格。在本文中,我们将...

    POI处理Excel文件.zip

    在使用Apache POI处理Excel 2007的XML文件时,有以下关键概念: 1. **XSSFWorkbook**:这是POI中用于表示.xlsx文件的工作簿对象。通过这个对象,我们可以创建、读取和修改工作簿中的内容。 2. **SXSSF (Streaming ...

    java_poi导入excel通用工具类V0915

    - **公式处理**:对于含有公式的单元格,POI会计算其结果,但不会显示公式本身,除非特别设置。 - **内存管理**:由于POI在内存中加载整个文件,处理大型Excel文件时需要注意内存消耗,可以使用SXSSF低内存模型进行...

    POI中文帮助文档_POI_

    这个“POI中文帮助文档”提供了全面的指南,帮助开发者理解和使用POI API来处理这些文件类型。 1. **POI基本概念**: - **HSSF**:用于处理Excel的低级别API,主要支持.xls格式的老版Excel文件。 - **XSSF**:...

    poi全家桶ooxml-schemas/poi/poi-examples/poi-ooxml/poi-ooxml-schemas/poi-scratchpad

    通过使用Apache POI,开发者可以在Java应用程序中实现与Excel的深度交互,比如创建复杂的表格、图表,执行公式计算,以及读取和修改现有文件。标签中的"poi excel 表格"明确指出,这里的重点是处理Excel文件,这在...

    POI poi相关所有jar包 poi jar包 poi最全jar包

    例如,可以创建新的Excel工作簿,添加工作表,插入公式,设置单元格样式,读取数据,甚至处理图表和图片。对于Word文档,可以添加文本、段落、页眉和页脚,而对于PowerPoint,可以创建幻灯片、添加文本框、图片和...

    poi的所有jar包,poi, poi-ooxml,poi-ooxml-schemas的各个版本jar

    - 由于POI处理的是二进制或XML格式的文件,因此在处理大量数据时可能会占用大量内存,需要合理利用SXSSF以减少内存使用。 - POI库的API设计相对复杂,学习曲线较陡峭,需要花时间去熟悉各种类和方法。 - 当处理复杂...

    使用POI来处理Excel和Word文件格式

    使用POI处理Excel文件时,你可以创建一个新的Workbook对象,然后添加Sheet,再在Sheet中创建Row和Cell。你可以填充数据,设置样式,应用公式,并保存为Excel文件。对于读取Excel文件,POI提供了相应的API来打开...

    poi导出cvs文件

    Apache POI是Java中一个流行的库,它主要用于处理Microsoft Office格式的文件,如Excel。在这个场景中,我们将探讨如何使用POI来创建CSV文件,这在数据导入导出、数据分析或报表生成等场景中非常常见。 CSV文件因其...

    jquery学习资料+poi处理excel的教程

    1. **XSSFWorkbook和HSSFWorkbook**: 这是POI处理Excel的主要类。XSSFWorkbook用于处理.xlsx(基于OpenXML)格式,而HSSFWorkbook则用于处理.xls(基于BIFF8)格式的文件。 2. **Sheet、Row和Cell**: 分别代表Excel...

    poi-3.17 poi-3.16

    Apache POI 是一个开源项目,专门用于处理微软的Office文档格式,如Excel、Word和PowerPoint。POI 提供了一套 Java API,使得开发者可以在Java应用程序中读写Microsoft Office格式的文件。标题中的"poi-3.17 poi-...

    poi将word转换成html、样式 表格 图片处理

    Apache POI 是一个开源项目,专门用于处理微软的Office文档格式,如Word(.doc, .docx)、Excel(.xls, .xlsx)等。在本案例中,我们关注的是如何使用Apache POI将Word文档转换为HTML格式,并且保持原有的样式、表格...

    Java 新版POI 读取excel文件信息返回List<List<String>>对象,包含文件内公式处理

    基于新版本的POI编写的读取Excel文件数据的工具类,可根据绝对路径、File对象、InputSteam对象读取解析Excel文件内容,并返回List&lt;List&lt;String&gt;&gt;格式结果,其中包含对单元格公式的处理。

    poi官方文档资料

    如果你的Excel文件包含公式,Apache POI也能处理。你可以使用`HSSFFormulaEvaluator`来计算公式的结果。对于图表,虽然POI在早期版本中支持有限,但仍然可以创建基本的图表元素,不过功能可能不如处理表格数据那么...

    poi-3.9 apache-poi-3.9 最新稳定版本

    Apache POI 是一个开源项目,由Apache软件基金会维护,它主要致力于处理Microsoft Office格式的文件,如Excel(.xlsx, .xls),Word(.doc, .docx)和PowerPoint(.ppt, .pptx)。POI库为Java开发者提供了一套API,...

Global site tag (gtag.js) - Google Analytics