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

  1. public int importExcel(File file) throws Exception {
  2. FileInputStream fis = null;
  3. String sheetName = "sheetname";
  4. try {
  5. fis = new FileInputStream(file);
  6. POIFSFileSystem fs = new POIFSFileSystem(fis);
  7. HSSFWorkbook wb = new HSSFWorkbook(fs);
  8. HSSFSheet searchWordSheet = wb.getSheet(sheetName);
  9. // sheet 空校验
  10. if (searchWordSheet == null) {
  11. return -2;
  12. }
  13. // sheet 无数据
  14. if (searchWordSheet.getLastRowNum() < 1) {
  15. return -1;
  16. }
  17. List<String []> ispList = new LinkedList<String []>();
  18. //循环得到excel的每一行,然后得到每一个cell的值。
  19. for (int i = 1; i <= searchWordSheet.getLastRowNum(); i++) {
  20. HSSFRow row = searchWordSheet.getRow(i);
  21. if (row == null) {
  22. continue;
  23. }
  24. String [] isp = new String [3];
  25.  
  26. cell = row.getCell((short) 0);
  27. Long value = getNumberValueFromCell(cell);
  28. isp[0] = value.toString();
  29.  
  30. cell = row.getCell((short) 1);
  31. isp[1] = getStringValueFromCell(cell);
  32.  
  33. cell = row.getCell((short) 2);
  34. isp[2] = getStringValueFromCell(cell);
  35.  
  36. ispList.add(isp);
  37. }
  38.  
  39. // 数据保存入库
  40.  
  41. List<String []> ispSaveList = new LinkedList<String []>();
  42.  
  43. for (String [] isp : ispList) {
  44.  
  45. ispSaveList.add(isp);
  46.  
  47. }
  48. saveIspFullInfoList(ispSaveList); }
  1. public Long getNumberValueFromCell(HSSFCell cell) {
  2. try {
  3. if (cell != null && cell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
  4. return NumberUtils.isNumber(cell.getStringCellValue()) ? Long
  5. .parseLong(cell.getStringCellValue()) : null;
  6. } else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
  7. return new Double(cell.getNumericCellValue()).longValue();
  8. } else {
  9. return null;
  10. }
  11. } catch (Exception e) {
  12. e.printStackTrace();
  13. return null;
  14. }
  15. }
  16. }
  1. public String getStringValueFromCell(HSSFCell cell) {
  2. if (isNullForCellValue(cell)) {
  3. return null;
  4. } else {
  5. if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
  6. return cell.getStringCellValue();
  7. } else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
  8. return new Double(cell.getNumericCellValue()).longValue()+"";
  9. } else {
  10. return null;
  11. }
  12. }
  13. }
  1. public Object getSourceValueFromCell(HSSFCell cell) {
  2. if (isNullForCellValue(cell)) {
  3. return null;
  4. } else {
  5. if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
  6. return cell.getStringCellValue();
  7. } else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
  8. return new Double(cell.getNumericCellValue()).longValue();
  9. } else {
  10. return null;
  11. }
  12. }
  13. }

以上三块代码是获得不同类型的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需要不同的方式来解析。所以也可以采用之前文章中的方式来进行对于的解析。代码如下:

  1. 01.public static Workbook getWorkbook(InputStream is) throws IOException{
  2. 02. Workbook wb = null;
  3. 03. if(!is.markSupported()){
  4. 04. is = new PushbackInputStream(is,8);
  5. 05. }
  6. 06. if (POIFSFileSystem.hasPOIFSHeader(is)) { //Excel2003及以下版本
  7. 07. wb = (Workbook) new HSSFWorkbook(is);
  8. 08. }else if (POIXMLDocument.hasOOXMLHeader(is)) { //Excel2007及以上版本
  9. 09. wb = new XSSFWorkbook(is);
  10. 10. }else{
  11. 11. throw new IllegalArgumentException("你的Excel版本目前poi无法解析!");
  12. 12. }
  13. 13. // }
  14. 14. return wb;
  15. 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. spring框架内置笔记本

    ◆基本介绍 目的:解决企业应用开发的复杂性 特征:使用主JavaBean更换EJB,它提供了许多其他的企业应用 范围:随你Java应用 Spring 框架是一个分层架构.由 7 个定义良好的模块组成. ...

  2. win8 64位使用plsql developer连接oracle数据库问题

    问题:win8的64使用位系统plsql developer本地连接oracle莫名其妙的问题发生在数据库时.错误消息框,甚至可能是空的. 原因:它表示,互联网,的原因,预计在64位系统安装在64位O ...

  3. C++ Primer 学习笔记_56_ 类和数据抽象 --消息处理演示示例

    拷贝控制 --消息处理演示样例 说明: 有些类为了做一些工作须要对复制进行控制. 为了给出这种样例,我们将概略定义两个类,这两个类可用于邮件处理应用程序.Message类和 Folder类分别表示电子 ...

  4. 使用Maven管理Spring[转]

    原文链接: Spring with Maven 原文日期: 2013年04月17日 翻译日期: 2014年06月29日 翻译人员: 铁锚 翻译原文连接:http://blog.csdn.net/ren ...

  5. 什么时候rootViewController至tabbarController时刻,控制屏幕旋转法

    于ios6后,ios系统改变了屏幕旋转的方法,假设您想将屏幕旋转法,在需求rootvc里面制备,例如 UIViewController *viewCtrl = [[UIViewController a ...

  6. ural 1932 The Secret of Identifier 容斥

    主题链接:点击打开链接 stl+容斥 #include <cstdio> #include <cstring> #include <algorithm> #incl ...

  7. Session与Caching

    Session与Caching 在之前的版本中,Session存在于System.Web中,新版ASP.NET 5中由于不在依赖于System.Web.dll库了,所以相应的,Session也就成了A ...

  8. Jenkins + robot framework自动发送邮件报告

    一.Jenkins安装插件 进入系统管理—插件管理—可选插件下安装以下插件Email-ext plugin.Email-ext Template Plugin. 安装完如下: 二.系统设置 1.设置系 ...

  9. CSharp设计模式读书笔记(22):策略模式(学习难度:★☆☆☆☆,使用频率:★★★★☆)

    策略模式(Strategy Pattern):定义一系列算法类,将每一个算法封装起来,并让它们可以相互替换,策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy). 模式角色与结构: ...

  10. asp.net webform easyui

    建议使用   html 页面 和 一般处理程序,一般处理程序 继承 IRequiresSessionState  ,才能用 session .