概述

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表格的更多相关文章

  1. java用poi读取Excel表格中的数据

    Java读写Excel的包是Apache POI(项目地址:http://poi.apache.org/),因此需要先获取POI的jar包,本实验使用的是POI 3.9稳定版.Apache POI 代 ...

  2. java 使用 poi 解析excel

    背景: web应用经常需要上传文件,有时候需要解析出excel中的数据,如果excel的格式没有问题,那就可以直接解析数据入库. 工具选择: 目前jxl和poi可以解析excel,jxl很早就停止维护 ...

  3. java中poi解析excel(兼容07版本以上及以下:.xls和.xlsx格式)

    package com.genersoft.cbms.ysbz.ExcelDr.cmd; import com.genersoft.cbms.ysbz.ExcelDr.dao.ExcelDrDao; ...

  4. java后台读取/解析 excel表格

    需求描述 前台需要上传excel表格,提交到后台,后台解析并返回给前台,展示在前台页面上! 前台部分代码与界面 <th style="padding: 7px 1px;width:15 ...

  5. java使用poi实现excel表格生成

    通过使用poi技术生成Excel,使用反射技术实现自动映射列表的数据. ExportTableUtil.java public class ExportTableUtil { /** * * @Des ...

  6. java利用poi解析excel文件

    首先需要引入以下jar包 如果使用maven,需要添加两个依赖 <dependencies> <dependency> <groupId>org.apache.po ...

  7. Java 利用poi生成excel表格

    所需jar包,如下所示 写一个excel工具类 ExcelUtils .java import java.lang.reflect.Field; import java.util.Iterator; ...

  8. java读写excel文件( POI解析Excel)

    package com.zhx.base.utils; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi ...

  9. JXL解析Excel表格内容到数据库

    java中常用的解析Excel表格的工具一种是POI一种是JXL,POI功能强大,相比JXL稍嫌复杂,对表格样式的处理非常好:而JXL解析简单方便,对中文支持比较好. 工作中解析Excel内容上传到数 ...

随机推荐

  1. modbus串口通讯C#

    简介 公司给的一个小任务,这篇文章进行详细讲解 题目: modbus串口通讯 主要内容如下: 1.实现使用modbus通讯规约的测试软件: 2.具有通信超时功能: 3.分主站从站,并能编辑报文.生成报 ...

  2. JavaScript调试总结

    一.vs调试 1.设置断点 2.设置浏览模式:一定要设置IE浏览器 3.设置起始页 4.运行 二.谷歌浏览器调试 1.运行项目,进入后F12,找到Sources

  3. ANT property三种使用方式

    方式一:引入*.properties文件 1.在cms.properties文件中定义属性 userName=admin 2.在build.xml中引入属性 <property file=&qu ...

  4. RHEL7/CentOS7 安装Zabbix

    1.添加 Zabbix 软件仓库 rpm -ivh http://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.n ...

  5. 关键字-this

    1.当成员变量和局部变量重名时,在方法中使用this时,this指向的是该方法所在类的成员变量. package gc.test.java.cs1; public class User{ public ...

  6. MyBatis学习日记(一):拜见小主——MyBatis

    近日学习MyBatis,特将学习过程及一点心得记录于此. MyBatis为何物? MyBatis 是支持定制化SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC ...

  7. C#中的out 参数,ref参数,值参数

    大家可能在编码中或多或少的使用过out的ref,但是是否注意过他两的详细用法以及区别? 本文想介绍下详细介绍下out参数,ref参数以及一般值参数. 值参数 在使用参数时,把一个值传递给函数使用的一个 ...

  8. 关于H5从PC端切换到移动端,屏幕显示内容由横向转为竖向的研究!

    1.前言: 在项目中,我们常会遇见在手机端需要横屏观看的效果,而在pc端则默认切换到竖屏的样式. 或者是,UI提供的图是一个长图,但是在移动端我们需要让这个图在手机横屏时显示. 以上两个都需要我们实行 ...

  9. C#字符串和ASCII码的转换

    //字符转ASCII码: public static int Asc(string character) { if (character.Length == 1) { System.Text.ASCI ...

  10. (一)jdk8学习心得之遍历

    一.遍历 -- 最好和stream流连用 使用jdk8提供的forEach进行遍历时,采用的是多线程的操作,理论上讲是会比原来的方法更快.但是注意,系统启动时需要加载lambda框架的内容.因此如果通 ...