POI与EasyExcel--写Excel

这篇具有很好参考价值的文章主要介绍了POI与EasyExcel--写Excel。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简单写入

 03和07版的简单写入注意事项:

1. 对象不同:03对应HSSFWorkbook,07对应XSSFWorkbook

2. 文件后缀不同:03对应xls,07对应xlsx

package com.zrf;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.joda.time.DateTime;
import org.junit.Test;

import java.io.FileOutputStream;

public class ExcelWriteTest {
    String PATH = "D:\\ideaprojection\\excel_test\\poi";

    @Test
    public void testWrite03() throws Exception {
        // 创建一个工作簿
        Workbook workbook = new HSSFWorkbook();
        // 创建一张工作表
        Sheet sheet = workbook.createSheet("统计表");
        // 创建第一行
        Row row1 = sheet.createRow(0);
        // 创建一个单元格
        Cell cell11 = row1.createCell(0);
        cell11.setCellValue("今日新增实习生");
        Cell cell12 = row1.createCell(1);
        cell12.setCellValue(1);

        // 创建第二行
        Row row2 = sheet.createRow(1);
        Cell cell21 = row2.createCell(0);
        cell21.setCellValue("统计时间");
        Cell cell22 = row2.createCell(1);
        String time = new DateTime().toString("yyyy-MM-dd HH:mm:ss");
        cell22.setCellValue(time);

        // 生成一张表(IO流)
        // 03版本就是使用xls结尾
        FileOutputStream fileOutputStream = new FileOutputStream(PATH + "统计表03.xls");
        // 输出
        workbook.write(fileOutputStream);
        // 关闭流
        fileOutputStream.close();
        System.out.println("统计表03版本生成完毕");
    }

    @Test
    public void testWrite07() throws Exception {
        // 创建一个工作簿
        Workbook workbook = new XSSFWorkbook();
        // 创建一张工作表
        Sheet sheet = workbook.createSheet("统计表");
        // 创建第一行
        Row row1 = sheet.createRow(0);
        // 创建一个单元格
        Cell cell11 = row1.createCell(0);
        cell11.setCellValue("今日新增实习生");
        Cell cell12 = row1.createCell(1);
        cell12.setCellValue(1);

        // 创建第二行
        Row row2 = sheet.createRow(1);
        Cell cell21 = row2.createCell(0);
        cell21.setCellValue("统计时间");
        Cell cell22 = row2.createCell(1);
        String time = new DateTime().toString("yyyy-MM-dd HH:mm:ss");
        cell22.setCellValue(time);

        // 生成一张表(IO流)
        // 03版本就是使用xls结尾
        FileOutputStream fileOutputStream = new FileOutputStream(PATH + "统计表07.xlsx");
        // 输出
        workbook.write(fileOutputStream);
        // 关闭流
        fileOutputStream.close();
        System.out.println("统计表07版本生成完毕");
    }
  

}

数据批量导入

大文件写HSSF 

             缺点: 最多处理65536行,再多会抛出异常
             优点: 过程中写入缓存,不操作磁盘,最后一次性写入磁盘,速度快


大文件写XSSF 

            缺点: 写数据时速度非常慢,非常耗内存,也会发生内存溢出,如100万条
            优点: 可以写较大的数据量

SXSSF优化版本

            优点: 可以写非常大的数据量,如100万甚至更多条,写数据速度更快,占用更少的内存
            注意: 过程中会产生临时文件,需要清理临时文件
                       默认100条数据被保存到内存中,如果超过这数量,则最前面的数据被写入临时文件,如果想自定义内存中数据的数量,可以使用new SXSSFWorkbook(数量)文章来源地址https://www.toymoban.com/news/detail-651664.html

package com.zrf;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.joda.time.DateTime;
import org.junit.Test;

import java.io.FileOutputStream;

public class ExcelWriteTest {
    String PATH = "D:\\ideaprojection\\excel_test\\poi";
    
    @Test
    public void testWrite03BigData() throws Exception {
        // 时间
        long begin = System.currentTimeMillis();
        // 创建一个工作簿
        Workbook workbook = new HSSFWorkbook();
        // 创建一张工作表
        Sheet sheet = workbook.createSheet("统计表");
        // 写入数据
        for (int rowNum = 0; rowNum < 65536; rowNum++){
            Row row = sheet.createRow(rowNum);
            for (int cellNum = 0; cellNum < 10; cellNum++){
                Cell cell = row.createCell(cellNum);
                cell.setCellValue(cellNum);
            }
        }
        System.out.println("over");
        FileOutputStream fileOutputStream = new FileOutputStream(PATH + "testWrite03BigData.xls");
        workbook.write(fileOutputStream);
        fileOutputStream.close();
        long end = System.currentTimeMillis();
        System.out.println((double) (end - begin)/1000);
    }

    // 耗时较长 优化 缓存
    @Test
    public void testWrite07BigData() throws Exception {
        // 时间
        long begin = System.currentTimeMillis();
        // 创建一个工作簿
        Workbook workbook = new XSSFWorkbook();
        // 创建一张工作表
        Sheet sheet = workbook.createSheet("统计表");
        // 写入数据
        for (int rowNum = 0; rowNum < 65537; rowNum++){
            Row row = sheet.createRow(rowNum);
            for (int cellNum = 0; cellNum < 10; cellNum++){
                Cell cell = row.createCell(cellNum);
                cell.setCellValue(cellNum);
            }
        }
        System.out.println("over");
        FileOutputStream fileOutputStream = new FileOutputStream(PATH + "testWrite07BigData.xlsx");
        workbook.write(fileOutputStream);
        fileOutputStream.close();
        long end = System.currentTimeMillis();
        System.out.println((double) (end - begin)/1000);
    }

    @Test
    public void testWrite07BigDataS() throws Exception {
        // 时间
        long begin = System.currentTimeMillis();
        // 创建一个工作簿
        Workbook workbook = new SXSSFWorkbook();
        // 创建一张工作表
        Sheet sheet = workbook.createSheet("统计表");
        // 写入数据
        for (int rowNum = 0; rowNum < 65537; rowNum++){
            Row row = sheet.createRow(rowNum);
            for (int cellNum = 0; cellNum < 10; cellNum++){
                Cell cell = row.createCell(cellNum);
                cell.setCellValue(cellNum);
            }
        }
        System.out.println("over");
        FileOutputStream fileOutputStream = new FileOutputStream(PATH + "testWrite07BigDataS.xlsx");
        workbook.write(fileOutputStream);
        fileOutputStream.close();
        // 清除临时文件
        ((SXSSFWorkbook) workbook).dispose();
        long end = System.currentTimeMillis();
        System.out.println((double) (end - begin)/1000);
    }

}

到了这里,关于POI与EasyExcel--写Excel的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Apache POI及easyExcel读取及写入excel文件

    目录 1.excel 2.使用场景 3.Apache POI 4.easyExcel 5.总结 1.excel excel分为两版,03版和07版。 03版的后缀为xls,最大有65536行。 07版的后缀为xlsx,最大行数没有限制。 2.使用场景 将用户信息导出到excel表格中。 将excel中的数据读取到数据库中。 3.Apache POI (1)说明 Apache POI是Apache软件基金会

    2024年02月06日
    浏览(52)
  • 使用POI和EasyExcel来实现excel文件的导入导出

    废话不多说咱们直接上干货!!!! 一.读取Excel表格 【1】使用POI读取excel表格中的数据 POI还可以操作我们这个word文档等等,他不仅仅只能弄Excel,而JXI只能操作excel 1.POI的结构,我们可以更具文件的类去选择 相关的对象我当前是使用的XLSX来操作的 HSSF - 提供读写Microsoft

    2024年02月05日
    浏览(59)
  • EasyExcel+POI制作带有有效性校验及下拉联动的Excel模板

    最近在做一个CRM系统的人员销售目标导入的相关需求,需要将销售人员的目标导入到系统中,就要求在Excel导入模板中 填写销售人员Id 和销售人员姓名。在使用的时候,这是一个易错的点,因为这两个字段交给了使用者去自由填写的话,是很容易填错的。除了文字本身填多填

    2024年02月11日
    浏览(43)
  • java poi导入Excel、导出excel

    java poi导入Excel、导出excel ReadPatientExcelUtil PoiUtils FileUtils

    2024年02月15日
    浏览(43)
  • java处理Excel表格(EasyExcel)

    1.EasyExcel特点 Java领域解析、生成Excel比较有名的框架有Apache poi、jxl等。但他们都存在一个严重的问题就是非常的耗内存。如果你的系统并发量不大的话可能还行,但是一旦并发上来后一定会OOM或者JVM频繁的full gc。 EasyExcel是阿里巴巴开源的一个excel处理框架,以使用简单、节

    2024年02月15日
    浏览(42)
  • Java使用POI导出Excel

    在项目开发中往往需要使用到Excel的导入和导出,导入就是从Excel中导入到DB中,而导出就是从DB中查询数据然后使用POI写到Excel上。 操作Excel目前比较流行的就是 Apache POI 和阿里巴巴的 easyExcel ! 废话不多说,开始撸起来!!! POI官网;https://poi.apache.org/ POI官网API:https://poi.

    2024年02月04日
    浏览(48)
  • JAVA操作Excel之POI

    POI提供API给JAVA程序对Microsoft Office格式档案读和写的功能 基本功能如下: HSSF – 提供读写Excel格式(03)xls文件 XSSF – 提供读写Excel OOXML格式(07)xlsx文件 HWPF – 提供读写Word格式 HSLF – 提供读写PowerPoint格式 HDGF – 提供读写Visio格式 【注】03版本最多65535行,07版本的没有限制

    2024年02月06日
    浏览(36)
  • Java 使用 easyexcel 读取 excel 文件

    easyexcel 官网:EasyExcel官方文档 - 基于Java的Excel处理工具 | Easy Excel 1. 引入依赖并给出示例 excel     2. 两种读取的方式         (1)确定表头:建立对象,和表头形成映射。(这里以此为例)         (2)不确定表头:每一行映射为 MapString, Object。 3. 先创建 excel 中表头对应

    2024年02月12日
    浏览(59)
  • Java Poi导出Excel表格详解

    一、导出下面的表格 二、流程详解         1、导出excel需要先将数据准备好         2、创建工作傅对象SXSSFWorkbook         3、使用工作傅对象创建sheet对象(工作页)         4、使用sheet对象创建行对象row(行对象)         5、使用row对象创建cell对象(单元格

    2024年02月10日
    浏览(52)
  • Java Excel Poi 字体颜色设置

    要设置单元格的字体颜色,可以使用 Apache POI 中的  CellStyle  和  Font  类。下面是一个示例代码,演示如何设置单元格字体颜色: 这段代码创建了一个带颜色的单元格,字体颜色设置为红色。你可以根据需要将  IndexedColors  中的颜色调整为你想要的其他颜色。最后,代码将

    2024年02月03日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包