引言:最近一直在接触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. MBProgressHUD 问题

    1.MBProgressHUD *HUD = [[MBProgressHUD alloc] initWithWindow:[UIApplication sharedApplication].keyWi ...

  2. uva 10228 - Star not a Tree?(模拟退火)

    题目链接:uva 10228 - Star not a Tree? 题目大意:给定若干个点,求费马点(距离全部点的距离和最小的点) 解题思路:模拟退火算法,每次向周围尝试性的移动步长,假设发现更长处, ...

  3. SQL Server 2008杀数据库连接

    杀数据库连接: DECLARE @temp NVARCHAR(20) DECLARE myCurse CURSOR FOR SELECT spid FROM sys.sysprocesses WHER ...

  4. Android复制WIN8点击下沉倾斜系统瓷砖效果

    ※效果 ※使用说明 Java代码 import android.app.Activity; import android.os.Bundle; import android.widget.Toast; ...

  5. win7或windows server 2008 R2 被远程登录日志记录 系统日志

    事件查看器 → Windows 日志 → 安全 (win7 事件查看器 打开方式 :计算机 右键   → 管理  → 计算机管理 → 系统工具 → 事件查看器 windows server 2008 ...

  6. Redis实现高并发分布式序列号

    使用Redis实现高并发分布式序列号生成服务 序列号的构成 为建立良好的数据治理方案,作数据掌握.分析.统计.商业智能等用途,业务数据的编码制定通常都会遵循一定的规则,一般来讲,都会有自己的编码规则和 ...

  7. 10分钟学会Linux

    10分钟学会Linux有点夸张,可是能够让一个新手初步熟悉Linux中最重要最主要的知识,本文翻译的英文网页在众多Linux入门学习的资料中还是很不错的. 英文地址:http://freeengine ...

  8. HDU 4873 ZCC Loves Intersection(可能性)

    HDU 4873 ZCC Loves Intersection pid=4873" target="_blank" style="">题目链接 ...

  9. SSAS系列——【02】多维数据(维度对象)

    原文:SSAS系列——[02]多维数据(维度对象) 1.维度是什么? 数学中叫参数,物理学中是独立的时空坐标的数目.0维是一点,1维是线,2维是一个长和宽(或曲线)面积,3维是2维加上高度形成体积面. ...

  10. 高性能双端js模板

    高性能双端js模板(新增filter)---simplite simplite是一款js实现的模板引擎,它能够完成浏览器端js模版和node服务器端js模板的数据渲染. 渲染性能十分突出. 支持浏览器 ...