引言:最近一直在接触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. 3.Chrome数据同步服务分析--server一片

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGVlcjE2OA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...

  2. express: command not found.

    npm install -g express 可是不行.全局模式不行. With the release of Express 4.0.0 it looks like you need to do s ...

  3. Ubuntu 当黑屏解决方案安装

    前几天我就已经安装Red hat 企业版,只是可惜它并没有提供数据源.我能够安装自己的软件,但我不能完全靠解决,因此,我们决定改变系统,最后我选择ubuntu.随时下载系统.然后用u盘制作启动盘,全部 ...

  4. MySQL当您插入列无效的数据插入

    1.错误叙述性说明 com.mysql.jdbc.exception:jdbc4.MySQLSyntaxErrorException:Unknown column 'man' in 'field li ...

  5. 第14章 命令模式(Command Pattern)

    原文 第14章 命令模式(Command Pattern) 命令模式(Command Pattern) 概述   在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”.但在某些场合,比如 ...

  6. Android研究之游戏开发处理按键的响应

    1.onKeyDown 方法 onKeyDown 方法是KeyEvent.Callback 接口中的一个抽象方法,重写onKeyDown 方法能够监听到按键被按下的事件,我们先看看onKeyDown方 ...

  7. 如何监控第三方应用程序(SOAP or RESTful client)访问HTTPS当数据站点?

    随着越来越多的互联网应用,在我们日常的开发和调试,其中(例如,调试SOAP和RESTFul什么时候),我们经常需要访问工具,通过第三方获取HTTPS网站.为了简化叙述说明,如本文所用,IE浏览器访问G ...

  8. CSDN专家吐槽实录

    今天打开CSDN发现界面上的几个图标发生了变化,一个小小的变化,却引起了诸多CSDN专家对CSDN社区未来发展的思考,我特意从群里讲对话黏贴出来,希望各位能给予积极评价和建议. 你已经是群成员了,和大 ...

  9. windows系统下c语言暂停程序

    原文:windows系统下c语言暂停程序 windows系统下,很多C语言初学者的调试时,往往没看到结果程序就退出了,据我所知的方法主要有以下几种 方法一: #include int main() { ...

  10. SSH六部曲

    <strong> 一共有6步(文章底部附有源码下载地址,刚学完ssh的可以借鉴)</strong> 1 写一个Hibernate应用,完成用户的增加 1) User实体 2)U ...