java poi workbook 创建很慢_每天一个小技术之Java操作Excel

这篇博客介绍了如何使用Apache POI库进行Java操作Excel,特别是针对大量数据写入时的性能优化。文章详细讲解了XSSFWorkbook、HSSFWorkbook和SXSSFWorkbook的区别,并提供了优化写入操作的示例。
摘要由CSDN通过智能技术生成

前言

在开发过程中,很多时候都会遇到导入Excel表的功能,比如批量导入某些数据,或者将某些数据导出,这时候就需要对Excel进行操作,从而实现导入导出功能。今天就学习一下Java操作Excel的技术:POI

一、POI

POI是Apache基金会用java编写的免费开源的跨平台的Java API,POI对Office文档有读和写的功能,但是我们一般用来操作Excel。所以本文仅提供对POI对Excel操作的方式。

1.1 使用简介

  • 导入依赖:
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.9</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.9</version>
</dependency>
  • 主要类构成

6a1b16518433df42bc952d992f90ccbe.png
  • WordkBook:接口,后续操作都在其上进行, 相当于Excel工作簿,有下边三个子接口
    • XSSFWorkbook:2007版本(包含2007)以后的扩展名为.xlsx使用该类
    • HSSFWorkbook:2003版本(包含2003)以前的扩展名为.xls使用该类
    • SXSSFWorkbook:07的优化版本,相当于为其添加了缓存功能,可以对插入大批量的数据进行优化。

1.2 写操作

  • 写操作之03版本
@Test
public void testDemo1() throws  Exception{
    
    //创建Workbook工作簿
    Workbook w = new HSSFWorkbook();
    //创建Sheet
    Sheet sheet = w.createSheet("Excel统计表");
    //创建行
    Row row = sheet.createRow(0);
    //创建列
    Cell cell = row.createCell(0);
    //设置改行该列的值
    cell.setCellValue("统计个数");
    cell = row.createCell(1);
    cell.setCellValue(666);
    row = sheet.createRow(1);
    cell = row.createCell(0);
    cell.setCellValue("生成日期");
    cell = row.createCell(1);
    String date = new DateTime().toString("yyyy-MM-dd HH:mm:ss");
    cell.setCellValue(date);
    //写入到文件
    FileOutputStream fo = new FileOutputStream(PATH + "测试表.xls");
    w.write(fo);
    fo.close();
}
  • 写操作之07版本
@Test
    public void testDemo1() throws  Exception{
    
        //创建Workbook工作簿
        Workbook w = new XSSFWorkbook();
        //创建Sheet
        Sheet sheet = w.createSheet("Excel统计表");
        //创建行
        Row row = sheet.createRow(0);
        //创建列
        Cell cell = row.createCell(0);
        //设置改行该列的值
        cell.setCellValue("统计个数");
        cell = row.createCell(1);
        cell.setCellValue(666);
        row = sheet.createRow(1);
        cell = row.createCell(0);
        cell.setCellValue("生成日期");
        cell = row.createCell(1);
        String date = new DateTime().toString("yyyy-MM-dd HH:mm:ss");
        cell.setCellValue(date);
        //写入到文件
        FileOutputStream fo = new FileOutputStream(PATH + "测试表.xls");
        w.write(fo);
        fo.close();
    }
  • 导出的数据如下图

06498c9fc596f34a41c468e8ecb2526f.png
  • 写操作之优化版本

如果在写入07版本的时候,有大量的数据写入,就会有可能出现内存溢出异常,且写入的时间会变得很慢,所以引入了该优化类。

@Test
public void testDemo3() throws Exception{
    
    long begin = System.currentTimeMillis();
    Workbook w = new SXSSFWorkbook();
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值