Java使用POI解析Excel表格
概述
Excel表格是常用的数据存储工具,项目中经常会遇到导入Excel和导出Excel的功能。
常见的Excel格式有xls和xlsx。07版本以后主要以基于XML的压缩格式作为默认文件格式xlsx。新格式主要是使用了OpenXML标准,结合了XML与Zip压缩技术。在这里就不细说,感兴趣的读者可以自行去查找相关知识。本文将重点以这两种文件格式的解析来展开。
Excel主要有以下部分组成:
一个Excel相当于一个工作簿(WorkBook);
每个sheet相当于一张表格;
sheet里面又由单元格Cell组成;
操作Excel的方式
Java提供了操作Excel的api JXL(Java Excel API),但是JXL只支持07版本以前,也就是xls后缀的Excel。因此使用中通常使用apache的POI
maven中的POI依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.0.1</version>
</dependency>
<!-- 07版本以后的格式 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.0.1</version>
</dependency>
其中最顶层接口Workbook;主要有三个实现类XSSFWorkbook、HSSFWorkbook、SXSSFWorkbook。
XSSFWorkbook
XSSFWorkbook主要用于解析xlsx。
@Test
public void testXlsx(){
File file = new File("C:\\Users\\Administrator\\Desktop\\pdf\\test.xlsx");
if(!file.exists()){
System.out.println("文件不存在");
return ;
}
FileInputStream fis = null;
Workbook workBook = null;
try {
fis = new FileInputStream(file);
workBook = new XSSFWorkbook(fis); // 使用XSSFWorkbook
dealWorkBook(workBook); // 将代码封装复用,见下一个方法
} catch (Exception e) {
e.printStackTrace();
} finally{ //关流
if(fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(workBook != null){
try {
workBook.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public void dealWorkBook(Workbook workBook){
Sheet sheet = workBook.getSheetAt(0); // 获取第一个sheet
Map<Integer, List<String>> map = new HashMap<Integer, List<String>>(); //第一个参数表示行数 第二个List保存该行的cell数据
int i = 0;
for(Row row : sheet){
map.put(i, new ArrayList<String>());
for(Cell cell : row){ // 遍历当前行的所有cell
switch(cell.getCellType()) {
case STRING:
map.get(i).add(cell.getRichStringCellValue().getString()); // 如果是字符串则保存
break;
case _NONE:
break;
case NUMERIC:
map.get(i).add(cell.getNumericCellValue()+""); //将数值转换为字符串
break;
case BOOLEAN:
break;
case FORMULA:
break;
case BLANK:
break;
case ERROR:
break;
}
}
i++;
}
Set<Integer> keys = map.keySet(); // 以下为遍历 Map看解析结果
Iterator<Integer> it = keys.iterator();
while(it.hasNext()){
List<String> list = map.get(it.next());
for(String s : list){
System.out.print(s+" ");
}
System.out.println();
}
}
运行结果如下
1.0 2.0 3.0 4.0
a b c d
7.0 8.0 9.0 10.0
e f g h
HSSFWorkbook
HSSFWorkbook主要用于解析xls
代码如下
@Test
public void testXls() throws Exception{
File file = new File("D:\\excelTest\\test2.xls");
if(!file.exists()){
System.out.println("文件不存在");
return ;
}
FileInputStream fis = new FileInputStream(file);
Workbook workBook = new HSSFWorkbook(fis, true); // 使用HSSFWorkbook 构造函数略有不同 true表示转化成为Nodes
dealWorkBook(workBook); // 复用上面的方法
workBook.close();
fis.close();
}
解析结果如下
1.0 2.0 3.0 4.0
a b c d
7.0 8.0 9.0 10.0
e f g h
11.0 12.0 13.0 14.0
注
本文参考了https://blog.csdn.net/holmofy/article/details/82532311
Java使用POI解析Excel表格的更多相关文章
- java用poi读取Excel表格中的数据
Java读写Excel的包是Apache POI(项目地址:http://poi.apache.org/),因此需要先获取POI的jar包,本实验使用的是POI 3.9稳定版.Apache POI 代 ...
- java 使用 poi 解析excel
背景: web应用经常需要上传文件,有时候需要解析出excel中的数据,如果excel的格式没有问题,那就可以直接解析数据入库. 工具选择: 目前jxl和poi可以解析excel,jxl很早就停止维护 ...
- java中poi解析excel(兼容07版本以上及以下:.xls和.xlsx格式)
package com.genersoft.cbms.ysbz.ExcelDr.cmd; import com.genersoft.cbms.ysbz.ExcelDr.dao.ExcelDrDao; ...
- java后台读取/解析 excel表格
需求描述 前台需要上传excel表格,提交到后台,后台解析并返回给前台,展示在前台页面上! 前台部分代码与界面 <th style="padding: 7px 1px;width:15 ...
- java使用poi实现excel表格生成
通过使用poi技术生成Excel,使用反射技术实现自动映射列表的数据. ExportTableUtil.java public class ExportTableUtil { /** * * @Des ...
- java利用poi解析excel文件
首先需要引入以下jar包 如果使用maven,需要添加两个依赖 <dependencies> <dependency> <groupId>org.apache.po ...
- Java 利用poi生成excel表格
所需jar包,如下所示 写一个excel工具类 ExcelUtils .java import java.lang.reflect.Field; import java.util.Iterator; ...
- java读写excel文件( POI解析Excel)
package com.zhx.base.utils; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi ...
- JXL解析Excel表格内容到数据库
java中常用的解析Excel表格的工具一种是POI一种是JXL,POI功能强大,相比JXL稍嫌复杂,对表格样式的处理非常好:而JXL解析简单方便,对中文支持比较好. 工作中解析Excel内容上传到数 ...
随机推荐
- 自动化批量管理工具pssh - 运维小结
pssh提供OpenSSH和相关工具的并行版本.包括pssh,pscp,prsync,pnuke和pslurp.该项目包括psshlib,可以在自定义应用程序中使用.pssh是python写的可以并发 ...
- Docker-Docker-compose应用
Docker-compose是用来定义和运行多容器应用的工具,它是独立于docker存在的,需要单独安装.实际应用场景中,我们的应用可能被打包运行在不同的容器里面,例如一个常规的web应用可能会涉及到 ...
- Windows 2008 R2 域控制器迁移至windows 2016记录
文章参考 https://social.technet.microsoft.com/Forums/zh-CN/21a5f5e9-feee-4454-acad-fd22989d7bed/22495296 ...
- 使用bootstrap的dropdown部件时报错:error:Bootstrap dropdown require Popper.js
前言:前端小白一枚,刚注册博客,先发个学习过程中新碰到小问题试试水吧~ 摘要:最近在学习bootstrap,偶然碰到了一个小问题,bootstrap网站也没有做过多的解释,今天分享给大家. 问题描述: ...
- 【转】C# 定时器事件(设置时间间隔,间歇性执行某一函数,控制台程序)
using System.Timers;定时器事件代码 static void Main(string[] args) { Method(); #region 定时器事件 Timer aTimer = ...
- Ubuntu 14.04 下使用微软的跨平台轻量级开发神器 Visual Studio Code
因为 Visual Studio Code 不断更新,官方最新 v1.32 的 .deb 包已经不能用于 Ubuntu 14.04 直接安装了. 下载 v1.31 的 deb 包安装即可:https: ...
- Photoshop给河边婚片加上唯美的霞光
<点小图查看大图> 最终效果 1.打开原图素材大图,按Ctrl + Alt + 2 调出高光选区,按Ctrl + Shift + I 反选得到暗部选区,然后创建曲线调整图层,对RGB.红. ...
- flutter 自定义主题切换
1. 定义local_srorage.dart文件 使用Flutter第三方插件shared_preferences实现存储键值对信息 相关shared_preferences插件可参考: flutt ...
- React Native & app demos
React Native & app demos https://github.com/ReactNativeNews/React-Native-Apps https://github.com ...
- React Native Flexbox & CSS3 Flexbox
React Native Flexbox & CSS3 Flexbox https://facebook.github.io/react-native/docs/flexbox/ https: ...