当前位置:首页 > 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
分享给朋友:

相关文章

css文件制作详细点

css文件制作详细点

CSS 文件制作指南 CSS(层叠样式表)用于控制网页的样式和布局。以下是详细的制作方法: 创建 CSS 文件 新建一个文本文件,将其保存为 .css 扩展名,例如 styles.css。确保文件名…

vue怎么实现文件树

vue怎么实现文件树

Vue 实现文件树的方法 使用递归组件实现文件树 递归组件是Vue中实现文件树的常见方法。通过组件自身调用自身,可以处理嵌套的目录结构。 <template> <div>…

php 实现文件下载

php 实现文件下载

实现文件下载的基本方法 使用 PHP 实现文件下载的核心是通过设置 HTTP 头部信息,强制浏览器将文件作为附件下载而非直接显示。以下是一个基础实现示例: $file_path = '/path/t…

如何安装java软件

如何安装java软件

下载Java安装包 访问Oracle官方网站或OpenJDK开源项目页面,选择适合操作系统的Java版本(如Windows、macOS或Linux)。对于个人使用,通常下载JDK(Java Devel…

java如何解决高并发

java如何解决高并发

Java 高并发解决方案 使用线程池优化资源管理 线程池(如 ThreadPoolExecutor)能避免频繁创建和销毁线程的开销。通过核心线程数、最大线程数和任务队列的合理配置,可以平衡系统负载。例…

java如何处理高并发

java如何处理高并发

Java处理高并发的方法 使用多线程和线程池 Java的java.util.concurrent包提供了线程池(如ThreadPoolExecutor)和并发工具类(如CountDownLatch、C…