概述

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依赖

  1. <dependency>
  2. <groupId>org.apache.poi</groupId>
  3. <artifactId>poi</artifactId>
  4. <version>4.0.1</version>
  5. </dependency>
  6. <!-- 07版本以后的格式 -->
  7. <dependency>
  8. <groupId>org.apache.poi</groupId>
  9. <artifactId>poi-ooxml</artifactId>
  10. <version>4.0.1</version>
  11. </dependency>

其中最顶层接口Workbook;主要有三个实现类XSSFWorkbook、HSSFWorkbook、SXSSFWorkbook。

XSSFWorkbook

XSSFWorkbook主要用于解析xlsx。

  1. @Test
  2. public void testXlsx(){
  3. File file = new File("C:\\Users\\Administrator\\Desktop\\pdf\\test.xlsx");
  4. if(!file.exists()){
  5. System.out.println("文件不存在");
  6. return ;
  7. }
  8. FileInputStream fis = null;
  9. Workbook workBook = null;
  10. try {
  11. fis = new FileInputStream(file);
  12. workBook = new XSSFWorkbook(fis); // 使用XSSFWorkbook
  13. dealWorkBook(workBook); // 将代码封装复用,见下一个方法
  14. } catch (Exception e) {
  15. e.printStackTrace();
  16. } finally{ //关流
  17. if(fis != null) {
  18. try {
  19. fis.close();
  20. } catch (IOException e) {
  21. e.printStackTrace();
  22. }
  23. }
  24. if(workBook != null){
  25. try {
  26. workBook.close();
  27. } catch (IOException e) {
  28. e.printStackTrace();
  29. }
  30. }
  31. }
  32. }
  1. public void dealWorkBook(Workbook workBook){
  2. Sheet sheet = workBook.getSheetAt(0); // 获取第一个sheet
  3. Map<Integer, List<String>> map = new HashMap<Integer, List<String>>(); //第一个参数表示行数 第二个List保存该行的cell数据
  4. int i = 0;
  5. for(Row row : sheet){
  6. map.put(i, new ArrayList<String>());
  7. for(Cell cell : row){ // 遍历当前行的所有cell
  8. switch(cell.getCellType()) {
  9. case STRING:
  10. map.get(i).add(cell.getRichStringCellValue().getString()); // 如果是字符串则保存
  11. break;
  12. case _NONE:
  13. break;
  14. case NUMERIC:
  15. map.get(i).add(cell.getNumericCellValue()+""); //将数值转换为字符串
  16. break;
  17. case BOOLEAN:
  18. break;
  19. case FORMULA:
  20. break;
  21. case BLANK:
  22. break;
  23. case ERROR:
  24. break;
  25. }
  26. }
  27. i++;
  28. }
  29. Set<Integer> keys = map.keySet(); // 以下为遍历 Map看解析结果
  30. Iterator<Integer> it = keys.iterator();
  31. while(it.hasNext()){
  32. List<String> list = map.get(it.next());
  33. for(String s : list){
  34. System.out.print(s+" ");
  35. }
  36. System.out.println();
  37. }
  38. }

运行结果如下

  1. 1.0 2.0 3.0 4.0
  2. a b c d
  3. 7.0 8.0 9.0 10.0
  4. e f g h

HSSFWorkbook

HSSFWorkbook主要用于解析xls

代码如下

  1. @Test
  2. public void testXls() throws Exception{
  3. File file = new File("D:\\excelTest\\test2.xls");
  4. if(!file.exists()){
  5. System.out.println("文件不存在");
  6. return ;
  7. }
  8. FileInputStream fis = new FileInputStream(file);
  9. Workbook workBook = new HSSFWorkbook(fis, true); // 使用HSSFWorkbook 构造函数略有不同 true表示转化成为Nodes
  10. dealWorkBook(workBook); // 复用上面的方法
  11. workBook.close();
  12. fis.close();
  13. }

解析结果如下

  1. 1.0 2.0 3.0 4.0
  2. a b c d
  3. 7.0 8.0 9.0 10.0
  4. e f g h
  5. 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. Java关于字符串工具类~持续汇总~

    /** * 01 * 描述:String的substring和replace方法使用 * [时间 2019年3月5日下午3:22:08 作者 陶攀峰] */ public static void te ...

  2. SQL Server系统视图sys.master_files不能正确显示数据库脱机状态

    最近发现在SQL Server数据库(目前测试过SQL Server 2008, 2012,2014,2016各个版本)中,即使数据库处于脱机(OFFLINE)状态,但是sys.master_file ...

  3. WebApi 身份认证解决方案:Basic基础认证

    前言:最近,讨论到数据库安全的问题,于是就引出了WebApi服务没有加任何验证的问题.也就是说,任何人只要知道了接口的url,都能够模拟http请求去访问我们的服务接口,从而去增删改查数据库,这后果想 ...

  4. js坚持不懈之18:trim()方法

    trim()方法,类似Python中的strip(),用去去除字符串对象前后的空格. <!DOCTYPE html> <html> <body> <scrip ...

  5. 把流的形式转化为Base64

    public class Test2 { public static String get() throws IOException { InputStream resourceAsStream = ...

  6. 随心测试_软测基础_008<测试对象整体认识>

    关于:软件测试的整体认识,首先:认识:测试 对象     与  测试主体(人) 之间的关系 核心理解如下: 不同的测试对象,选取 不同的测试方法 软件项目的周期中:提出 需求 ——>软件实现—— ...

  7. HTML基础知识个人总结

    [学习的网站是主要是W3school,还加上一些其他搜索学习到的内容,仅在博客做个人整理] 一.标签——尖括号围成的关键词,成对出现. ※使用时必须符合标签嵌套规则 1. (1) <!DOCTY ...

  8. linux 下ab压力测试

    1.ab的简介 ab是apachebench命令的缩写. ab是apache自带的压力测试工具.ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试 ...

  9. RMQ 问题 ST 算法(模板)

    解决区间查询最大值最小值的问题 用 $O(N * logN)$ 的复杂度预处理 查询的时候只要 $O(1)$ 的时间  这个算法是 real 小清新了   有一个长度为 N 的数组进行 M 次查询 可 ...

  10. ABP实践(2)-ASP.NET Core 2.x版本EntityFrameworkCore(EF)使用mysql数据库

    上一篇中EntityFrameworkCore默认使用的是微软的sql server,本篇改为mysql步骤如下: 1,在基础层xxx.EntityFrameworkCore依赖项添加Pomelo.E ...