Apache Poi实现excel解析
一、说明
1、本文通过使用 poi 工具解析 excel 表格数据,实现导入导出
2、excel目前有两种格式 2003版本的 excel.xls 与 2007版本的 excel.xlsx ,注意两种文件的后缀名不同
3、针对不同版本的 excel ,使用不同的类,xls结尾的实现 HSSFWorkbook类,xlsx的实现 XSSFWorkbook 类
4、实现过程每一步基本上都有注释,不明白的请留言
二 、实现过程如下
- 创建maven工程,添加依赖
<!-- 03版 表格 -->
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.0.1</version>
</dependency>
<!-- 07版 表格 -->
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.0.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml-schemas -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
- 实现相应的类
/**
* apache poi demo测试
*/
public class PoiDemo {
public static void main(String[] args) throws Exception {
// 1、获取一个工作簿 根据 excel 文件获取
XSSFWorkbook workbook = new XSSFWorkbook("D:\\test.xlsx"); // 此处加载的是我本地使用测试excel文件
// 2、通过工作簿获取到一个sheet页
// workbook.getSheet("sheetName"); 这是通过 sheet 的名字获取sheet页
XSSFSheet sheet = workbook.getSheetAt(0);// 通过索引获取第几个sheet页
// 3、通过sheet页获取表格的内容,获取sheet页中每一行 和 每一个单元格
// 第一层循环,获取到表格的每一行
for (int rowNum = 0; rowNum <= sheet.getLastRowNum(); rowNum++) {
XSSFRow row = sheet.getRow(rowNum);
StringBuilder stringBuilder = new StringBuilder();
// 第二层循环,精准获取到每一个单元格
for (int cellNum = 0; cellNum < row.getLastCellNum(); cellNum++) {
// 现在精确获取到了每一个单元格
Cell cell = row.getCell(cellNum);
// 获取到每一个单元格的内容
if (cell != null) {
Object value = getCellValue(cell);
stringBuilder.append(value).append("-");
}
}
System.out.println(stringBuilder);
}
}
/**
* 获取单元格的数据
*
* @param cell 单元格
* @return
*/
public static Object getCellValue( Cell cell) {
// 对应于数据库,每一个字段的数据类型可能都不同
// 1、获取到单元格的属性,
CellType cellType = cell.getCellType();
// 2、通过单元格属性获取数据
Object value = null;
switch (cellType) {
case STRING:
value = cell.getStringCellValue();
break;
case BOOLEAN:
value = cell.getBooleanCellValue();
break;
case NUMERIC:
if (DateUtil.isCellDateFormatted(cell)){
// 日期格式
value = cell.getDateCellValue();
} else {
// 数字
value = cell.getNumericCellValue();
}
break;
case FORMULA:
value = cell.getCellFormula();
break;
default:
break;
}
return value;
}
}
- 本地测试文件

- 结果如下

- 若觉得写得还可以的话,请点击支持一下,你的支持是我继续写下去的动力
Apache Poi实现excel解析的更多相关文章
- 项目一:第四天 1、快递员的条件分页查询-noSession,条件查询 2、快递员删除(逻辑删除) 3、基于Apache POI实现批量导入区域数据 a)Jquery OCUpload上传文件插件使用 b)Apache POI读取excel文件数据
1. 快递员的条件分页查询-noSession,条件查询 2. 快递员删除(逻辑删除) 3. 基于Apache POI实现批量导入区域数据 a) Jquery OCUpload上传文件插件使用 b) ...
- apache POI 导出excel相关方法
apache POI 操作excel无比强大.同时有操作word和ppt的接口. 下面讲解poi中常用方法. 1,设置列宽 HSSFSheet sheet = wb.getSheetAt(0); sh ...
- Java开发小技巧(六):使用Apache POI读取Excel
前言 在数据仓库中,ETL最基础的步骤就是从数据源抽取所需的数据,这里所说的数据源并非仅仅是指数据库,还包括excel.csv.xml等各种类型的数据接口文件,而这些文件中的数据不一定是结构化存储的, ...
- 使用Apache POI导出Excel小结--导出XLS格式文档
使用Apache POI导出Excel小结 关于使用Apache POI导出Excel我大概会分三篇文章去写 使用Apache POI导出Excel小结--导出XLS格式文档 使用Apache POI ...
- 利用Apache POI操作Excel
最近在做接口,有个功能是利用Excel导入汽车发动机所需零件信息到线上系统中.简单回顾一下之前学过的用java操作Excel. 1.maven配置Apache POI pom.xml中配置POIjar ...
- 【Java】使用Apache POI生成和解析Excel文件
概述 Excel是我们平时工作中比较常用的用于存储二维表数据的,JAVA也可以直接对Excel进行操作,分别有jxl和poi,2种方式. HSSF is the POI Project's pure ...
- Java使用Apache POI进行Excel导入和导出
Manve依赖 <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --> <dependency> ...
- JAVA Apache POI 之sax 解析10万级大数量数据
第一步让我们来看看我们的大量数据的excel 文件 好的下面第二步看一下代码: package com.chinait.utils; /** * 写这个东西主要是最近做了一个联通的数据迁移工作,他们就 ...
- apache poi导出excel报表
Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能.POI为"P ...
随机推荐
- Postman:Pre-request Script
Pre-request Script:前置处理,会在发出请求前执行,主要用在生成一些动态参数. 例如:api接口都会有签名校验,这个校验在我们api测试的时候很不方便,这里可以利用 postman 前 ...
- Linux 平台 安装 Composer
1.检查是否安装 composer --version 2.下载安装 php -r "copy('https://install.phpcomposer.com/installer', 'c ...
- vue2.x学习笔记(十二)
接着前面的内容:https://www.cnblogs.com/yanggb/p/12592256.html. 组件基础 组件化是vue的一个重要特性,也是vue学习中非常重要的一个知识点. 基础示例 ...
- 基于netty实现rpc框架-spring boot客户端
上篇讲了RPC服务端的实现.原理就是解析netty通道数据拿到类.方法及入参等信息,然后通过java反射机制调用本地接口返回结果.没有用到很复杂的技术. 这篇我们将客户端的实现.说白了客户端的任务很简 ...
- 【转】动态规划之最长公共子序列(LCS)
[原文链接]最长公共子序列(Longest Common Subsequence,简称 LCS)是一道非常经典的面试题目,因为它的解法是典型的二维动态规划,大部分比较困难的字符串问题都和这个问题一个套 ...
- 如何将Python项目发布到PyPI
The Python Package Index (PyPI) is a repository of software for the Python programming language. 如何打 ...
- 线程Event
版本一: from threading import Event,current_thread,Thread import time event=Event() #造一个对象,内部维护一个全局变量,状 ...
- Python初学者常见错误问题汇总
1.在客户端和服务端如何传递数组? 答:在客户端和服务端可以使用json进行数据传输.在客户端把数据转换成json字符串,然后使用POST方法发送给服务端. 服务端收集到数据之后,使用json.loa ...
- 关于flex弹性布局
http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html
- DZ的CURD
Discuz二次开发-MySQL插入数据(insert) DB::insert($tableName,$data,$flag); $tableName:表名 $data:插入数据,以字段为键值的关联数 ...