章
目
录
本文主要讲解关于Java如何优雅的操作Excel相关内容,其中包含Java操作Excel的3种方式,让我们来一起学习下吧!
在Java开发中,我们经常需要读取或写入Excel文件。市面上有很多操作Excel的工具库,今天来介绍三个我在项目中用过的库,他们分别是:POI、JExcelAPI和EasyExcel,它们让你能够优雅的完成Excel操作!
这里我们只做简单介绍,不做深入讲解,如需深入,可以看各自官方文档!这里更推荐使用easyexcel工具包哦!
POI
POI是Apache下一个功能强大的Java库,用于处理各种Microsoft Office格式的文档,特别是Excel文档。它支持.xls和.xlsx格式的文件,能够处理复杂的数据,如图表、公式等。
依赖坐标
<dependency>
<groupId>org.apache.poigroupId>
<artifactId>poi-ooxmlartifactId>
<version>4.1.2version>
<dependency>
Java示例
以下是一个基于Apache POI库读取Excel文件的Java代码示例:
public class ExcelReader {
public static void main(String[] args) {
String excelFilePath = "path/to/excel/file.xlsx";
FileInputStream inputStream = null;
Workbook workbook = null;
Sheet sheet = null;
Row row = null;
Cell cell = null;
try {
inputStream = new FileInputStream(new File(excelFilePath));
workbook = new XSSFWorkbook(inputStream);
sheet = workbook.getSheetAt(0); // 读取第一个工作表
for (row = sheet.getRow(0); row != null; row = row.getNextRow()) { // 逐行读取
for (cell = row.getFirstCell(); cell != null; cell = cell.getNextCell()) { // 逐列读取
switch (cell.getCellType()) { // 根据单元格类型获取单元格值
case STRING:
System.out.print(cell.getStringCellValue() + "\t");
break;
case NUMERIC:
System.out.print(cell.getNumericCellValue() + "\t");
break;
case BOOLEAN:
System.out.print(cell.getBooleanCellValue() + "\t");
break;
default:
System.out.print(cell + "\t");
}
}
System.out.println(); // 换行
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (workbook != null) {
try {
workbook.close(); // 关闭工作簿对象和输入流对象
} catch (IOException e) {
e.printStackTrace();
}
}
if (inputStream != null) {
try {
inputStream.close(); // 关闭输入流对象
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
JExcelAPI
JExcelAPI是一个较老但仍然广泛使用的库,主要用于处理.xls格式的Excel文件。它的API简单直观,适合需要快速开发的场景。
注意:
- 仅支持 2003 版本的Excel 也就是 后缀名为 xls 的文件
- 采用流式处理模型,逐行读取和写入 ——因此 可以处理大量数据,一般不会出现OOM
依赖坐标
dependency>
<groupId>net.sourceforge.jexcelapigroupId>
<artifactId>jxlartifactId>
<version>2.6.12version>
dependency>
Java示例
以下是一个基于JExcelAPI库读取Excel文件的Java代码示例:
public class ReadExcelDemo {
public static void main(String[] args) {
try {
// 1. 打开 Excel 文件
String filePath = ExcelConstant.EXCEL_PATH_XLS;
Workbook workbook = Workbook.getWorkbook(new java.io.File(filePath));
// 2. 获取第一个工作表
Sheet sheet = workbook.getSheet(0);
/**
* -Xms64m -Xmx64m
* row = 4000 col = 50
* 正常读
*/
// 3. 遍历每一行,并读取数据
for (int row = 0; row < sheet.getRows(); row++) {
for (int col = 0; col < sheet.getColumns(); col++) {
Cell cell = sheet.getCell(col, row);
String content = cell.getContents();
content += cell.getCellFormat().getBackgroundColour().getDescription();
System.out.print(content+"\t");
}
System.out.println();
}
// 4. 关闭工作簿
workbook.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
EasyExcel
EasyExcel是一个基于POI的库,但它针对大数据量的Excel文件进行了优化。它的API更简洁,且在处理大数据量时表现更好。
依赖坐标
dependency>
<groupId>com.alibabagroupId>
<artifactId>easyexcelartifactId>
<version>2.2.6version>
dependency>
Java示例
以下是一个基于EasyExcel库读写Excel文件的Java代码示例:
public class ExcelReaderWriter {
public static void main(String[] args) {
// 读取Excel文件
String readFilePath = "path/to/excel/file.xlsx"; // 替换为实际的文件路径
List<Data> dataList = EasyExcel.read(readFilePath, new NoModelDataListener()).sheet().doRead();
// 写入Excel文件
String writeFilePath = "path/to/excel/file_copy.xlsx"; // 替换为实际的文件路径
EasyExcel.write(writeFilePath)
.sheet("Sheet1") // 设置工作表名称
.doWrite(dataList); // 写入数据
}
// 定义一个数据类,用于保存读取到的Excel文件中的数据
static class Data {
private String name;
private int age;
public Data(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
// 自定义一个数据监听器,用于将读取到的Excel数据转换成自定义的Data列表
static class NoModelDataListener implements EasyExcel.ReadListener<Data> {
@Override
public Data adapt(String headName, int headIndex, String cellContent) {
return new Data(headName, Integer.parseInt(cellContent)); // 将单元格内容转换成整数并返回Data对象
}
}
}
总结
POI是功能最全面的库,适合处理复杂的Excel文件。JExcelAPI虽然老旧,但在处理.xls文件时仍然有效。EasyExcel是一个现代化的库,API更加简单易用。大家可以根据自己的情况来选择合适的工具库。
以上就是关于Java如何优雅的操作Excel的3种方式相关的全部内容,希望对你有帮助。欢迎持续关注潘子夜个人博客,学习愉快哦!