分类: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.}
这个方法在导入没有公式的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;
经测试发现,在执行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;
这样对于字符串cell.getStringCellValue()方法即可取得其值,如果公式生成的是数值,使用cell.getStringCellValue()方法会抛出IllegalStateException异常,在异常处理中使用cell.getNumericCellValue();即可。
相关推荐
完整的poi包,对新老版本的excel支持很完整,请各位下载使用哈。
基于新版本的POI编写的读取Excel文件数据的工具类,可根据绝对路径、File对象、InputSteam对象读取解析Excel文件内容,并返回List<List<String>>格式结果,其中包含对单元格公式的处理。
POI ,xdocreport框架是一个半成品,往往使用默认的解析结果无法满足业务需求,花了很长时间和心血研究了其源码,修复了以下问题 问题1: xdocreport能解析word转html,但解析出来的是基于word的整套html,往往我们的...
poi将word里面的内容转换成html、包括word里面字体的大小、表格的处理、还有图片、段落等等...
基于poi对excel操作的简单封装及必要的poi3.17...针对excel文件或输入流,按行或者单元格解析处理,提供简单的通用单元格数据获取方法(数字类单元格返回Double, 日期返回Date, 公式返回计算后的结果,其它返回String)
String titles = "所属区域,所属车间,当前处理人,描述,状态,上报人,上报车间,上报时间"; String cols = "EXTEND10,PARENTNAME|ORGNAME,CURRENTUSER,HDREMARK,AUDITSTATUSFMT,USERNAME,ORGNAMEREPORT,CREATEDONFMT...
POI是Apache下一个功能强大的Java库,用于处理各种Microsoft Office格式的文档,特别是Excel文档。它支持.xls和.xlsx格式的文件,能够处理复杂的数据,如图表、公式等。
解析通过MutilpartFile导入的Excel并解析里面数据,先判断文件的类型(excel处理有两种此处为两种通用)是.xls/.xlsx,采用Apache的POI的API来操作Excel,读取内容后保存到List中,再将List转Json(使用Linked,增删快...
【JAVA】easypoi根据Excel模板导出 循环遍历合并单元格处理
jxls作为比较好的excel模版方案,比poi和easyExcel相对扩展性更高。 demo包含全部官方例子和模版, 2.6官方新增合并单元格标签,jx:mergecells 以及其他相关一切demo,很好的资源,分享给大家,供大家学习交流。 ...
NPOI主要由POIFS、DDF、HPSF、HSSF、SS、Util六部分组成,其中POIFS是POI的文档存储库,DDF是数据存储格式,HPSF和HSSF则是用于处理OLE2文档结构的不同部分。 NPOI的API使用起来比Office PIA更加方便和人性化。比如...
基于ArcGIS进行可达性分析详解,通过ArcGIS 工具进行数据处理,制作可达性分析图。
在流式传输XLSX文件时,并非所有功能都受支持,可能是公式未求值或导致错误。 PoiItemReader配置 除了的需要配置PoiItemReader 。 可以使用XML或Java Config进行配置。 XML格式 < bean id = " excelReader " ...
我在开发此软件包时学到的东西: 正确处理Java文件输入/输出Apache POI软件包的用法充分利用Java枚举回归分析统计量Maven管理依赖关系的基本用法Pdf作为数据输入是可怕的,但是使这变得容易。这个软件包是什么以及...
JXLS消息新版本2.10.0带有对JSR310,多行SQL,公式重新计算等的支持。感谢您的贡献。 JXLS已从BitBucket移至Github。 请使用Github问题跟踪器来查找错误,并使用Github来查找问题。概述JXLS(请参阅)是一个小巧...
1503 One Person "The Price is Right" 简单题,POI Eggs的翻版 1512 Water Treatment Plants 简单题,组合计数 1526 Big Number 简单题,不过O(1)和O(n)还是有区别的:) 1529 Enigmatic Travel 简单题,不过个人...
1503 One Person "The Price is Right" 简单题,POI Eggs的翻版 1512 Water Treatment Plants 简单题,组合计数 1526 Big Number 简单题,不过O(1)和O(n)还是有区别的:) 1529 Enigmatic Travel 简单题,不过个人...