Excel文件解析

本文详细介绍了在Java开发中如何使用Apache POI和EasyExcel进行Excel文件的读写操作。内容包括Apache POI的XSSFWorkbook和SXSSFWorkbook在处理大量数据时的内存占用和性能对比,以及EasyExcel在读写100w行数据时的性能表现。文章还讨论了不同技术的特点和适用场景,如POI的DOM解析方式和EasyExcel的逐行读取模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言

java程序开发过程中经常需要使用Excel文件来进行数据的导入与导出,本次文章向大家介绍Excel文件解析或生成以及相关方法

二、Excel文件解析的主流技术:

Apache POI、JXL、Alibaba EasyExcel等。

三、技术特点:

Apache POI:基于DOM方式行进解析,将文件直接加载内存,速度快;

适合场景:较小数据量的Excel文件;

JXL:只支持Excel2003以下的版本(并不常用);

Alibaba EasyExcel:采用逐行读取的解析模式,将每一行的解析结果以观察者的模式通知处理

适合场景:较大数据量的Excel文件;

四、主流技术讲解

Apache POI

Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能。对不同的格式文件提供不同解析:

HSSF:提供读写Microsoft Excel格式档案的功能(用于解析旧版本(*.xls)Excel文件)

注:旧版本Excel文件只能存在65535行数据,所以HSSF目前不常用

XSSF:提供读写Microsoft Excel OOXML格式档案的功能(用于解析新版本(*.xlsx)Excel文件)

HWLF:提供读写Microsoft Work格式档案的功能

HSLF:提供读写Microsoft PowerPoint格式档案的功能

HDGF:提供读写Microsoft Visio格式档案的功能

XSSF解析Excel文件:

使用XSSF解析Excel文件时必须依赖第三方jar包:

 使用XSSF解析Excel文件时最重要的四个接口:Workbook(Excel文件)、Sheet(工作簿)、Row(数据行)、Cell(单元格);,并且提供了一系列静态方法

Workbook(Excel文件):

        Workbook接口代表一个Excel文件,用于创建或加载(解析)一个Excel文件,常见实现类有:XSSFWorkbook

创建Excel文件:

	try (Workbook workbook = new XSSFWorkbook();
		FileOutputStream out = new FileOutputStream("D:\\texs\\"+System.currentTimeMillis()+".xlsx")) {
        //将Workbook对象中包含的数据,通过输出流,写入至Excel文件
        workbook.write(out);
    }catch (IOException e) {	
		e.printStackTrace();
	}

注:仅依靠Workbook类虽然可以创建一个Excel文件,但无法打开;

加载(解析)Excel文件:

    try (FileInputStream in = new FileInputStream("D:\\琐碎\\1627356552686.xlsx");
			Workbook workbook = new XSSFWorkbook(in)) {
	} catch (IOException e) {
			e.printStackTrace();
	}

Sheet(工作簿):

通过Workbook来进行工作簿Sheet对象的创建与获取

获取工作簿:

Sheet sheet=workbook.getSheet("sheet0");
//按照名称获取工作簿

Sheet sheet=workbook.getSheetAt(0);
//按照下标获取工作簿

创建工作簿: 

Sheet sheet=workbook.createSheet();
//创建默认名称工作簿

Sheet sheet=workbook.createSheet("数据表");
//创建名为“数据表”的工作簿

获取工作簿的数量:

int num=workbook.getNumberOfSheets();

Row(数据行):

通过Sheet来进行数据行Row对象的获取与创建

创建数据行:

Row row=sheet.createRow(0);
//按照下标创建行

获取首尾行下标:

	int firstRowIndex=sheet.getFirstRowNum();
    //获取首行下标

	int lastRowIndex=sheet.getLastRowNum();
    //获取尾行下标
<
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雾远望

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值