网站首页 > java教程 正文
引言
在开发过程中,我们经常会遇到需要读取Excel文件并将数据转换成Java对象的需求。Apache POI是一个强大的库,它提供了读取和写入Microsoft Office格式文件的功能,包括Excel。本文将指导你如何使用Apache POI读取Excel文件,并将数据转换为List<Map<String, String>>格式,便于进一步的数据处理和分析。
准备工作
首先,确保你的项目中包含了Apache POI的依赖。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖:
<!-- excel reader-start-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.2</version> <!-- 使用你所需的版本号 -->
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.2</version> <!-- 同上 -->
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.17.1</version> <!-- 使用你所需要的版本 -->
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.17.1</version> <!-- 同上 -->
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version> <!-- 使用你需要的版本 -->
</dependency>
<!-- excel reader-end -->
步骤详解
下面是使用Apache POI读取Excel文件的具体步骤:
package com.xsz.programmingarsenal.utils;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ExcelReader {
public static void main(String[] args) {
try {
FileInputStream fis = new FileInputStream(new File("C:\\tmp\\test.xlsx"));
Workbook workbook = new XSSFWorkbook(fis);
Sheet sheet = workbook.getSheetAt(0); // 假设我们只读取第一个工作表
List<Map<String, String>> data = new ArrayList<>();
// 获取第一行作为列头
Row headerRow = sheet.getRow(0);
if (headerRow != null) {
for (int i = 1; i <= sheet.getLastRowNum(); i++) { // 从第二行开始读取数据
Row row = sheet.getRow(i);
if (row != null) {
Map<String, String> rowData = new HashMap<>();
for (Cell cell : headerRow) {
int colIndex = cell.getColumnIndex();
Cell dataCell = row.getCell(colIndex);
if (dataCell != null) {
// rowData.put(cell.getStringCellValue(), dataCell.getStringCellValue());
rowData.put(getStringValue(cell), getStringValue(dataCell));
}
}
data.add(rowData);
}
}
}
// 关闭资源
workbook.close();
fis.close();
// 打印结果
System.out.println(data);
} catch (Exception e) {
e.printStackTrace();
}
}
public static String getStringValue(Cell cell ){
CellType cellType = cell.getCellType();
String cellValue = null;
switch (cellType) {
case STRING:
cellValue = cell.getStringCellValue();
break;
case NUMERIC:
if (DateUtil.isCellDateFormatted(cell)) {
// 如果是日期格式的数值,则转换为日期字符串
cellValue = cell.getDateCellValue().toString();
} else {
// 否则,转换为数字字符串
cellValue = String.valueOf(cell.getNumericCellValue());
}
break;
case BOOLEAN:
cellValue = String.valueOf(cell.getBooleanCellValue());
break;
case FORMULA:
// 处理公式单元格
cellValue = cell.getCellFormula();
break;
case BLANK:
cellValue = ""; // 或者null,取决于你的需求
break;
case ERROR:
cellValue = "ERROR"; // 或者抛出异常,取决于你的需求
break;
default:
throw new IllegalStateException("Unexpected cell type: " + cellType);
}
return cellValue;
// 现在你可以安全地使用cellValue了
}
}
测试
测试数据
结果
结语
通过上述步骤,你现在已经掌握了如何使用Java和Apache POI库读取Excel文件,并将数据转换为List<Map<String, String>>格式的方法。这种方法非常适合需要对Excel数据进行进一步处理和分析的场景。希望这篇博客能帮助你在日常开发中更加高效地处理Excel文件。
猜你喜欢
- 2024-10-08 「开源」阿里出品,可避免OOM的java处理Excel工具包
- 2024-10-08 使用Java实现Excel数据采集及后台统计功能
- 2024-10-08 java百万千万级别excel导出问题(导出慢和Out Of Memory内存溢出)
- 2024-10-08 利用阿里EasyExcel实现Excel读写(阿里云表格识别)
- 2024-10-08 java轻松玩转Excel之EasyExcel(java excelutil)
- 2024-10-08 「开源资讯」MyExcel 3.8.1 版本发布,Excel等多项功能的工具包
- 2024-10-08 Java 复制Excel单元格区域(java复制粘贴)
- 2024-10-08 Excel神具EasyExcel,常见API(excel.app)
- 2024-10-08 三层-使用NPOI读取Excel文件的数据 183
- 2024-10-08 每天一个入坑小技巧:通过poi、poi-ooxml框架读取不同格式excel
你 发表评论:
欢迎- 最近发表
-
- pyinstaller打包python程序高级技巧
- 将python打包成exe的方式(python打包成exe的方法)
- Python打包:如何将 Flask 项目打包成exe程序
- py2exe实现python文件打包为.exe可执行程序(上篇)
- 如何将 Python 项目打包成 exe,另带卸载功能!
- Python打包成 exe,太大了该怎么解决?
- 可视化 Python 打包 exe,这个神器绝了!
- 案例详解pyinstaller将python程序打包为可执行文件exe
- Cocos 3.x 菜鸟一起玩:打包window程序
- 怎么把 Python + Flet 开发的程序,打包为 exe ?这个方法很简单!
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)