概述

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. 自动化批量管理工具pssh - 运维小结

    pssh提供OpenSSH和相关工具的并行版本.包括pssh,pscp,prsync,pnuke和pslurp.该项目包括psshlib,可以在自定义应用程序中使用.pssh是python写的可以并发 ...

  2. Docker-Docker-compose应用

    Docker-compose是用来定义和运行多容器应用的工具,它是独立于docker存在的,需要单独安装.实际应用场景中,我们的应用可能被打包运行在不同的容器里面,例如一个常规的web应用可能会涉及到 ...

  3. Windows 2008 R2 域控制器迁移至windows 2016记录

    文章参考 https://social.technet.microsoft.com/Forums/zh-CN/21a5f5e9-feee-4454-acad-fd22989d7bed/22495296 ...

  4. 使用bootstrap的dropdown部件时报错:error:Bootstrap dropdown require Popper.js

    前言:前端小白一枚,刚注册博客,先发个学习过程中新碰到小问题试试水吧~ 摘要:最近在学习bootstrap,偶然碰到了一个小问题,bootstrap网站也没有做过多的解释,今天分享给大家. 问题描述: ...

  5. 【转】C# 定时器事件(设置时间间隔,间歇性执行某一函数,控制台程序)

    using System.Timers;定时器事件代码 static void Main(string[] args) { Method(); #region 定时器事件 Timer aTimer = ...

  6. Ubuntu 14.04 下使用微软的跨平台轻量级开发神器 Visual Studio Code

    因为 Visual Studio Code 不断更新,官方最新 v1.32 的 .deb 包已经不能用于 Ubuntu 14.04 直接安装了. 下载 v1.31 的 deb 包安装即可:https: ...

  7. Photoshop给河边婚片加上唯美的霞光

    <点小图查看大图> 最终效果 1.打开原图素材大图,按Ctrl + Alt + 2 调出高光选区,按Ctrl + Shift + I 反选得到暗部选区,然后创建曲线调整图层,对RGB.红. ...

  8. flutter 自定义主题切换

    1. 定义local_srorage.dart文件 使用Flutter第三方插件shared_preferences实现存储键值对信息 相关shared_preferences插件可参考: flutt ...

  9. React Native & app demos

    React Native & app demos https://github.com/ReactNativeNews/React-Native-Apps https://github.com ...

  10. React Native Flexbox & CSS3 Flexbox

    React Native Flexbox & CSS3 Flexbox https://facebook.github.io/react-native/docs/flexbox/ https: ...