杰瑞科技汇

Java如何读取Excel 2007文件?

Java读取Excel 2007文件的方法

在Java中读取Excel 2007(.xlsx)文件,主要有以下几种常用方法:

Java如何读取Excel 2007文件?-图1
(图片来源网络,侵删)

使用Apache POI库

Apache POI是最流行的Java操作Office文档的库,支持Excel 2007格式。

添加依赖(Maven)

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

示例代码

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileInputStream;
import java.io.IOException;
public class ReadExcel2007 {
    public static void main(String[] args) {
        String filePath = "path/to/your/file.xlsx";
        try (FileInputStream fis = new FileInputStream(filePath);
             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;
                        case FORMULA:
                            System.out.print(cell.getCellFormula() + "\t");
                            break;
                        default:
                            System.out.print("\t");
                    }
                }
                System.out.println();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

使用EasyExcel库

EasyExcel是阿里巴巴开源的Excel处理库,性能更好,内存占用更小。

添加依赖(Maven)

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.1.1</version>
</dependency>

示例代码

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import java.util.ArrayList;
import java.util.List;
public class ReadExcelWithEasyExcel {
    public static void main(String[] args) {
        String fileName = "path/to/your/file.xlsx";
        // 读取Excel文件
        EasyExcel.read(fileName, DataModel.class, new AnalysisEventListener<DataModel>() {
            // 存储数据的集合
            private List<DataModel> dataList = new ArrayList<>();
            @Override
            public void invoke(DataModel data, AnalysisContext context) {
                dataList.add(data);
            }
            @Override
            public void doAfterAllAnalysed(AnalysisContext context) {
                // 数据读取完成后的操作
                System.out.println("读取完成,共读取" + dataList.size() + "条数据");
                for (DataModel data : dataList) {
                    System.out.println(data);
                }
            }
        }).sheet().doRead();
    }
    // 数据模型类
    public static class DataModel {
        // 使用@ExcelProperty注解指定列对应的字段
        @Override
        public String toString() {
            return "DataModel{}";
        }
    }
}

使用JExcelApi库

JExcelApi是另一个轻量级的Java Excel操作库。

添加依赖(Maven)

<dependency>
    <groupId>net.sourceforge.jexcelapi</groupId>
    <artifactId>jxl</artifactId>
    <version>2.6.12</version>
</dependency>

示例代码

import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import java.io.File;
import java.io.IOException;
public class ReadExcelWithJExcel {
    public static void main(String[] args) {
        try {
            Workbook workbook = Workbook.getWorkbook(new File("path/to/your/file.xlsx"));
            Sheet sheet = workbook.getSheet(0);
            for (int i = 0; i < sheet.getRows(); i++) {
                for (int j = 0; j < sheet.getColumns(); j++) {
                    System.out.print(sheet.getCell(j, i).getContents() + "\t");
                }
                System.out.println();
            }
            workbook.close();
        } catch (IOException | BiffException e) {
            e.printStackTrace();
        }
    }
}

注意事项

  1. 大文件处理:对于大Excel文件,推荐使用EasyExcel或POI的SAX模式,以避免内存溢出
  2. 日期格式:Excel中的日期可能需要特殊处理,通常是从1900/1901年开始的天数
  3. 性能考虑:EasyExcel在处理大文件时性能通常优于POI
  4. 异常处理:添加适当的异常处理,特别是文件不存在或格式不正确的情况

方法中,Apache POI功能最全面,EasyExcel性能最好,JExcelApi最轻量,根据你的具体需求选择合适的库。

Java如何读取Excel 2007文件?-图2
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇