使用POI 导入excel
引言:最近一直在接触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的更多相关文章
- poi导入Excel,数字科学记数法转换
在这里分享一下使用poi 导入Excel时 把数字转换为科学记数法的解决方法: 就是使用DecimalFormat对 i 进行了格式化 结果为:
- Java 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包)
ava 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包) 假设现在要做一个通用的导入方法: 要求: 1.xml的只定义数据库表中的column字段,字段类型,是否非空等条件 ...
- 在java poi导入Excel通用工具类示例详解
转: 在java poi导入Excel通用工具类示例详解 更新时间:2017年09月10日 14:21:36 作者:daochuwenziyao 我要评论 这篇文章主要给大家介绍了关于在j ...
- 友好解决POI导入Excel文件行是不是为空
继 解决POI读取Excel如何判断行是不是为空 后发现了一个问题.这个是一个银行的需求,有20万个客户的资料要导入系统,但有的资料是有问题的(不能正常导入),但也有能正常导入的.现在的问题是怎么知道 ...
- java poi 导入excel
最近项目需要导入excel,网上有很多例子,自己整合记录下,兼容2003和2007,暂时没有添加图片处理功能. 所需jar包 http://pan.baidu.com/s/1sjPuWDR pack ...
- 纳税服务系统【用户模块之使用POI导入excel、导出excel】
前言 再次回到我们的用户模块上,我们发现还有两个功能没有完成: 对于将网页中的数据导入或导出到excel文件中,我们是完全没有学习过的.但是呢,在Java中操作excel是相对常用的,因此也有组件供我 ...
- 使用POI导入EXCEL报java.lang.IncompatibleClassChangeError
使用POI导入xls格式的excel报java.lang.IncompatibleClassChangeError异常,而导入xlsx正常. oracle.apps.fnd.framework.OAE ...
- POI导入excel文件2
POI上传到服务器读取excel文件1中已经介绍了上传文件和导入excel所有的内容http://www.cnblogs.com/fxwl/p/5896893.html , 本文中只是单单读取本地文件 ...
- 使用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 ...
随机推荐
- spring框架内置笔记本
◆基本介绍 目的:解决企业应用开发的复杂性 特征:使用主JavaBean更换EJB,它提供了许多其他的企业应用 范围:随你Java应用 Spring 框架是一个分层架构.由 7 个定义良好的模块组成. ...
- win8 64位使用plsql developer连接oracle数据库问题
问题:win8的64使用位系统plsql developer本地连接oracle莫名其妙的问题发生在数据库时.错误消息框,甚至可能是空的. 原因:它表示,互联网,的原因,预计在64位系统安装在64位O ...
- C++ Primer 学习笔记_56_ 类和数据抽象 --消息处理演示示例
拷贝控制 --消息处理演示样例 说明: 有些类为了做一些工作须要对复制进行控制. 为了给出这种样例,我们将概略定义两个类,这两个类可用于邮件处理应用程序.Message类和 Folder类分别表示电子 ...
- 使用Maven管理Spring[转]
原文链接: Spring with Maven 原文日期: 2013年04月17日 翻译日期: 2014年06月29日 翻译人员: 铁锚 翻译原文连接:http://blog.csdn.net/ren ...
- 什么时候rootViewController至tabbarController时刻,控制屏幕旋转法
于ios6后,ios系统改变了屏幕旋转的方法,假设您想将屏幕旋转法,在需求rootvc里面制备,例如 UIViewController *viewCtrl = [[UIViewController a ...
- ural 1932 The Secret of Identifier 容斥
主题链接:点击打开链接 stl+容斥 #include <cstdio> #include <cstring> #include <algorithm> #incl ...
- Session与Caching
Session与Caching 在之前的版本中,Session存在于System.Web中,新版ASP.NET 5中由于不在依赖于System.Web.dll库了,所以相应的,Session也就成了A ...
- Jenkins + robot framework自动发送邮件报告
一.Jenkins安装插件 进入系统管理—插件管理—可选插件下安装以下插件Email-ext plugin.Email-ext Template Plugin. 安装完如下: 二.系统设置 1.设置系 ...
- CSharp设计模式读书笔记(22):策略模式(学习难度:★☆☆☆☆,使用频率:★★★★☆)
策略模式(Strategy Pattern):定义一系列算法类,将每一个算法封装起来,并让它们可以相互替换,策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy). 模式角色与结构: ...
- asp.net webform easyui
建议使用 html 页面 和 一般处理程序,一般处理程序 继承 IRequiresSessionState ,才能用 session .