引言:最近一直在接触excel的问题,网页也有很多关于POI解析excel的资料,我也简单的整理了下,有不对地方的还望及时指正,渴望与大家交流并学习。

public int importExcel(File file) throws Exception {
FileInputStream fis = null;
String sheetName = "sheetname";
try {
fis = new FileInputStream(file);
POIFSFileSystem fs = new POIFSFileSystem(fis);
HSSFWorkbook wb = new HSSFWorkbook(fs);
HSSFSheet searchWordSheet = wb.getSheet(sheetName);
// sheet 空校验
if (searchWordSheet == null) {
return -2;
}
// sheet 无数据
if (searchWordSheet.getLastRowNum() < 1) {
return -1;
}
List<String []> ispList = new LinkedList<String []>();
//循环得到excel的每一行,然后得到每一个cell的值。
for (int i = 1; i <= searchWordSheet.getLastRowNum(); i++) {
HSSFRow row = searchWordSheet.getRow(i);
if (row == null) {
continue;
}
String [] isp = new String [3]; cell = row.getCell((short) 0);
Long value = getNumberValueFromCell(cell);
isp[0] = value.toString(); cell = row.getCell((short) 1);
isp[1] = getStringValueFromCell(cell); cell = row.getCell((short) 2);
isp[2] = getStringValueFromCell(cell); ispList.add(isp);
} // 数据保存入库 List<String []> ispSaveList = new LinkedList<String []>(); for (String [] isp : ispList) { ispSaveList.add(isp); }
saveIspFullInfoList(ispSaveList); }
public Long getNumberValueFromCell(HSSFCell cell) {
try {
if (cell != null && cell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
return NumberUtils.isNumber(cell.getStringCellValue()) ? Long
.parseLong(cell.getStringCellValue()) : null;
} else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
return new Double(cell.getNumericCellValue()).longValue();
} else {
return null;
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
public String getStringValueFromCell(HSSFCell cell) {
if (isNullForCellValue(cell)) {
return null;
} else {
if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
return cell.getStringCellValue();
} else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
return new Double(cell.getNumericCellValue()).longValue()+"";
} else {
return null;
}
}
}
public Object getSourceValueFromCell(HSSFCell cell) {
if (isNullForCellValue(cell)) {
return null;
} else {
if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
return cell.getStringCellValue();
} else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
return new Double(cell.getNumericCellValue()).longValue();
} else {
return null;
}
}
}

以上三块代码是获得不同类型的cell的值

部分代码解释:   saveIspFullInfoList(ispSaveList);将从Excel得到的数据保存到数据库中

HSSFSheet searchWordSheet = wb.getSheet(sheetName);通过sheet的名称得到对于的sheet页(一个excel文件可能有多个sheet页)。

POIFSFileSystem fs = new POIFSFileSystem(fis);

HSSFWorkbook wb = new HSSFWorkbook(fs);

这块也就是通过文件得到HSSFWorkbook,在之前的文章中也说过,不同版本的excel需要不同的方式来解析。所以也可以采用之前文章中的方式来进行对于的解析。代码如下:

01.public static Workbook getWorkbook(InputStream is) throws IOException{
02. Workbook wb = null;
03. if(!is.markSupported()){
04. is = new PushbackInputStream(is,8);
05. }
06. if (POIFSFileSystem.hasPOIFSHeader(is)) { //Excel2003及以下版本
07. wb = (Workbook) new HSSFWorkbook(is);
08. }else if (POIXMLDocument.hasOOXMLHeader(is)) { //Excel2007及以上版本
09. wb = new XSSFWorkbook(is);
10. }else{
11. throw new IllegalArgumentException("你的Excel版本目前poi无法解析!");
12. }
13. // }
14. return wb;
15. }

导入所需的包可以在这里下载http://download.csdn.net/detail/javaweiming/5849101.

使用POI 导入excel的更多相关文章

  1. poi导入Excel,数字科学记数法转换

    在这里分享一下使用poi 导入Excel时 把数字转换为科学记数法的解决方法: 就是使用DecimalFormat对 i 进行了格式化 结果为:

  2. Java 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包)

    ava 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包) 假设现在要做一个通用的导入方法: 要求: 1.xml的只定义数据库表中的column字段,字段类型,是否非空等条件 ...

  3. 在java poi导入Excel通用工具类示例详解

    转: 在java poi导入Excel通用工具类示例详解 更新时间:2017年09月10日 14:21:36   作者:daochuwenziyao   我要评论   这篇文章主要给大家介绍了关于在j ...

  4. 友好解决POI导入Excel文件行是不是为空

    继 解决POI读取Excel如何判断行是不是为空 后发现了一个问题.这个是一个银行的需求,有20万个客户的资料要导入系统,但有的资料是有问题的(不能正常导入),但也有能正常导入的.现在的问题是怎么知道 ...

  5. java poi 导入excel

    最近项目需要导入excel,网上有很多例子,自己整合记录下,兼容2003和2007,暂时没有添加图片处理功能. 所需jar包  http://pan.baidu.com/s/1sjPuWDR pack ...

  6. 纳税服务系统【用户模块之使用POI导入excel、导出excel】

    前言 再次回到我们的用户模块上,我们发现还有两个功能没有完成: 对于将网页中的数据导入或导出到excel文件中,我们是完全没有学习过的.但是呢,在Java中操作excel是相对常用的,因此也有组件供我 ...

  7. 使用POI导入EXCEL报java.lang.IncompatibleClassChangeError

    使用POI导入xls格式的excel报java.lang.IncompatibleClassChangeError异常,而导入xlsx正常. oracle.apps.fnd.framework.OAE ...

  8. POI导入excel文件2

    POI上传到服务器读取excel文件1中已经介绍了上传文件和导入excel所有的内容http://www.cnblogs.com/fxwl/p/5896893.html , 本文中只是单单读取本地文件 ...

  9. 使用POI导入Excel异常Cannot get a text value from a numeric cell 解决

    POI操作Excel时因为Excel数据Cell有不同的类型,会出现Cannot get a text value from a numeric cell的异常错误. 异常原因:Excel数据Cell ...

随机推荐

  1. Theano学习笔记(三)——图结构

    图结构(Graph Structures)这是理解Theano该基金会的内部运作. Theano编程的核心是用符号占位符把数学关系表示出来. 图结构的组成部分 如图实现了这段代码: importthe ...

  2. ubuntu12.04下一个samba、tftp、nfs构造

    1.samba setting   1>apt-get install samba     apt-get install smbfs   2>mkdir /home/linux/shar ...

  3. JAVA多线程编程(详细例子)

    http://wenku.baidu.com/view/e4afbf36a32d7375a417808b.html

  4. codeforces 438D

    在大大推荐下这个标题不明的人做.而我的最后一个非常喜欢的段树,因此,愤怒出手.认为基本上相同.大值,当最大值小于取模时能够剪枝. 今后再遇到此类问题算是能攻克了 // file name: d.cpp ...

  5. sscanf()函数的用法

    来自:http://blog.csdn.net/tigerjibo/article/details/6442151 sscanf 名称: sscanf() - 从一个字符串中读进与指定格式相符的数据. ...

  6. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(6)- EF上下文实例管理

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(6)- EF上下文实例管理 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    ( ...

  7. linux_cp_远程copy

    1:远程copy  [linux对linux 远程拷贝]   scp 文件名  root@远程ip:/路径/    将本地home目录下的test.tar的文件拷贝到远程主机192.168.1.23的 ...

  8. Swift中文教程(一)--欢迎来到Swift的世界

    原文:Swift中文教程(一)--欢迎来到Swift的世界 Apple凌晨时在WWDC发布了Swift编程语言,语法简介我很喜欢,市面上没有完整的中文教程,我在ibooks里面下载了英文原版,现在开始 ...

  9. 【百度地图API】自行获取区域经纬度的工具

    原文:[百度地图API]自行获取区域经纬度的工具 摘要:上一章教大家如何建立自己的行政区域地图.这次为大家提供一个,可视化选择区域,并且能自动生成经纬度代码的工具.工具的源代码完全公开,并且做了详尽的 ...

  10. TRIZ系列-创新原理-28-替代机械系统原理

    替代机械系统原理的详细描写叙述例如以下:1)用光.声.热.嗅觉系统替代机械系统:2)用电.磁或电磁场来与物体交互作用:3)用移动场替代精巧场,用随时间变化的场替代固定场,用结构化的场替代随机场:4)使 ...