当前位置:首页 > Java

java如何读取xlsx文件

2026-03-04 09:30:35Java

使用 Apache POI 库读取 XLSX 文件

Apache POI 是 Java 中处理 Office 文档的流行库,支持 XLSX 格式。以下是读取 XLSX 文件的基本方法:

确保在项目中添加 Apache POI 依赖(Maven 配置):

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <artifactId>5.2.3</artifactId>
</dependency>

读取 XLSX 文件的代码示例:

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileInputStream;
import java.io.IOException;

public class XLSXReader {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("example.xlsx");
             Workbook workbook = new XSSFWorkbook(fis)) {

            Sheet sheet = workbook.getSheetAt(0);
            for (Row row : sheet) {
                for (Cell cell : row) {
                    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("-\t");
                    }
                }
                System.out.println();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

使用 EasyExcel 库高效读取大文件

对于大型 XLSX 文件,EasyExcel 提供了内存友好的解决方案:

java如何读取xlsx文件

添加 EasyExcel 依赖(Maven 配置):

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <artifactId>3.3.2</artifactId>
</dependency>

使用监听器模式读取的示例:

java如何读取xlsx文件

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.read.listener.ReadListener;

public class LargeXLSXReader {
    public static void main(String[] args) {
        String fileName = "large_file.xlsx";

        EasyExcel.read(fileName, DemoData.class, new ReadListener<DemoData>() {
            @Override
            public void invoke(DemoData data, AnalysisContext context) {
                System.out.println("Processing: " + data);
            }

            @Override
            public void doAfterAllAnalysed(AnalysisContext context) {
                System.out.println("All data processed");
            }
        }).sheet().doRead();
    }

    public static class DemoData {
        private String column1;
        private Integer column2;
        // 添加 getter/setter 和 toString
    }
}

处理日期和特殊格式

当 XLSX 中包含日期或自定义格式时,需要特殊处理:

// 在 Apache POI 中处理日期
if (cell.getCellType() == CellType.NUMERIC && DateUtil.isCellDateFormatted(cell)) {
    System.out.print(cell.getDateCellValue() + "\t");
}

// 在 EasyExcel 中通过注解处理
public class DemoData {
    @ExcelProperty("日期列")
    @DateTimeFormat("yyyy-MM-dd")
    private Date dateColumn;
}

性能优化建议

对于大数据量文件,采用流式读取方式减少内存消耗。Apache POI 提供了 SXSSFWorkbook:

Workbook workbook = new SXSSFWorkbook(new XSSFWorkbook(fis));

EasyExcel 本身采用流式解析,默认情况下内存占用较低,适合处理百万级数据。可以通过调整参数进一步优化:

EasyExcel.read(fileName)
    .headRowNumber(2)  // 跳过表头
    .readCache(100)    // 设置缓存行数
    .sheet()
    .doRead();

标签: 文件java
分享给朋友:

相关文章

如何编译java文件

如何编译java文件

安装JDK 确保系统已安装Java Development Kit(JDK)。可通过命令行输入 javac -version 和 java -version 验证。若未安装,需从Oracle或Open…

java如何创建包

java如何创建包

创建Java包的步骤 在Java中,包(package)用于组织和管理类文件,避免命名冲突。以下是创建Java包的详细方法: 定义包名 在Java源文件的开头使用package关键字声明包名。包名…

java如何实现异步

java如何实现异步

Java实现异步的方法 Java中实现异步编程可以通过多种方式,每种方式适用于不同的场景和需求。以下是常见的实现方法: 使用Thread类 创建新线程执行异步任务是最基础的方式。通过继承Thread…

vue文件下载实现

vue文件下载实现

使用 Blob 对象下载文件 在 Vue 中可以通过创建 Blob 对象实现文件下载。通过将后端返回的二进制数据转换为 Blob,再生成下载链接触发浏览器下载行为。 axios.get('/api/…

如何搭建java开发环境

如何搭建java开发环境

下载并安装JDK 从Oracle官网或OpenJDK下载适合操作系统的JDK版本。运行安装程序并按照提示完成安装,建议选择默认路径以减少配置复杂度。 配置环境变量 在系统环境变量中添加JAVA_HO…

如何学习java语言

如何学习java语言

学习Java语言的系统方法 理解基础概念 Java是一种面向对象的编程语言,掌握基础概念如变量、数据类型、运算符、控制流语句(if-else、循环)是第一步。熟悉类和对象的概念,理解封装、继承和多态三…