干货!一篇文章搞定java用POI导入excel
来源:编程之家     阅读:796
源码驿站
发布于 2018-09-04 21:56
查看主页
干货!一篇文章搞定java用POI导入excel

Apache poi中的HSSF和XSSF简述

excel主要分为两种格式:

  • xls是office2003以前的版本;兼容性较差;
  • xlsx 是2007版本的格式,兼容性好,也是主要的格式;

工作薄 WorkBook

这是创立或者维护Excel工作簿的所有类的超接口。它属于org.apache.poi.ss.usermodel包。是实现此接口的两个类,

  • HSSFWorkbook : 这个类有读取和.xls 格式和写入Microsoft Excel文件的方法。它是在org.apache.poi.hssf.usermodel包的高层次的类。它实现了Workbook 接口
  • XSSFWorkbook : 这个类有读写Microsoft Excel和OpenOffice的XML文件的格式.xls或者.xlsx的方法。它属于org.apache.xssf.usemodel包,并实现Workbook接口

工作表 Sheet

Sheet是在org.apache.poi.ss.usermodel包的接口,它是创立具备特定名称的高或者低级别的电子表格的所有类的超接口。电子表格的最常见的类型是工作表,它被表示为单元的网格。

  • HSSFSheet: 这是在org.apache.poi.hssf.usermodel包的类。它可以创立Excel电子表格,它允许在sheet 方式和表数据格式。
  • XSSFSheet: 这是代表了Excel电子表格的高级别代表的一类。这在org.apache.poi.hssf.usermodel包下。

行 Row

这是在org.apache.poi.ss.usermodel包的接口。它是使用于一排的电子表格的高层表示。


单元格 Cell

这是在org.apache.poi.ss.usermodel包的接口。它是代表了单元在电子表格中的行中的所有类的超接口。 单元格可以用各种属性,例如空白,数字,日期,错误等单元格被增加到一个行之前应具备(基于0)自己的编号

Apache poi中的HSSF和XSSF文件导入具体实现

下面的代码根据考试系统项目中的导入文件板块,解析试题模板,将excel内容导入到数据库中,代码实现可能比较复杂但是能够让自己清晰的体现出来导入功能

 /**
* 将excel表中的数据导入
* @param fileName
* @return
*/
public List> readTimeTableXml(String fileName) {
//判断能否是excel2007格式
boolean isE2007 = false;
int totalNum = 0;
List> listMaps= Lists.newArrayList();
Map map = Maps.newHashMap();
if (fileName.endsWith("xlsx")) isE2007 = true;
try {
InputStream input = new FileInputStream(fileName);
//创立工作薄对象
Workbook wb = null;
//根据文件格式(2003或者者2007)来初始化
if (isE2007){
wb = new XSSFWorkbook(input);
} else{
wb = new HSSFWorkbook(input);
}
List list = Lists.newArrayList();
//遍历某一单元
for(int s = 0;s<2;s++){
//创立工作表对象
Sheet sheet = wb.getSheetAt(s);
//遍历每一行
for(int rowNum = 1;rowNum <= sheet.getLastRowNum();rowNum++){
//获取行
Row row = sheet.getRow(rowNum);
if(row != null){
Questions q = new Questions();
Integer type = s+1;//试题类型
String name = row.getCell(0).toString();//题干
String standardAnswer = row.getCell(5).toString();//正确答案
String analysis = row.getCell(6).toString();//解析
String difficulty = row.getCell(8).toString();//试题难度
Integer dy =1;
if(difficulty.equals("简单")){
dy = 1;
}else if (difficulty.equals("普通")){
dy = 2;
}else if (difficulty.equals("困难")){
dy = 3;
}else if(difficulty.equals("极难")){
dy = 4;
}
Map[] options = new Map[4];//试题选项
for(int i =0;i<4;i++){
options[i] = Maps.newHashMap();
options[i].put("option",(char)(65+i)+"、"+row.getCell(i+1).toString());
}
//插入数据
q.setTypeId(type);
q.setName(name);
q.setDifficulty(dy);
q.setStandardAnswer(standardAnswer);
q.setAnalysis(analysis);
q.setOptions(JSONObject.toJSONString(options));
q.setTypeCode(s==0? "single" : "multiSelect");
//增加到集合中
list.add(q);
}
if(totalNum <= 0){
Map maperroNumTwo= Maps.newHashMap();
maperroNumTwo.put("erroNum",row.getCell(0).toString());
listMaps.add(maperroNumTwo);
}
}
questionsMapper.batchImport(list);//批量导入数据
} catch (IOException e) {
e.printStackTrace();
}
return listMaps;//返回错误信息
}

总之在用POI导入的时候,注意重要一点就是区分行和列,一般情况先遍历行再取该行中的每一列数据。

如有不足之处,欢迎留言,需要demo可以私信我,让我们共同进步。假如你觉得有阅读和收藏价值,请关注本人,编程之家,每天为你分享编程相关知识。

干货!一篇文章搞定java用POI导入excel

关注我,每天升级

免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 系统环境 软件环境
相关推荐
共享内存同步机制
软件产品测试知识思维导图整理
C++打造迷宫游戏,直接上代码
Python3_文件操作方法
Android本地存储的几种方式
首页
搜索
订单
购物车
我的