XSSFWorkbook,SXSSFWorkbook以及EasyExcel读取Excel文件的比较
同时读取30w数据,比较运行时间及CPU、内存占比
1.EasyExcel
package com.apesource;import java.util.ArrayList;
import java.util.List;import com.alibaba.excel.EasyExcel;
import com.apesource.entity.Order;public class Demo01 {public static void main(String[] args) {long begin = System.currentTimeMillis();// 写入100wEasyExcel.write("E:\\test\\demo05.xlsx", Order.class).sheet("订单列表").doWrite(data());long end = System.currentTimeMillis();System.out.println("EasyExcel读取30w文件共耗时" +(end - begin) +"毫秒");}// 创建100w条订单数据private static List<Order> data() {List<Order> list = new ArrayList<Order>();for (int i = 0; i < 300000; i++) {list.add(new Order());}return list;}
}
2.XSSFWorkbook
package com.apesource;import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.DataFormat;
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;public class Demo10 {public static void main(String[] args) {long begin = System.currentTimeMillis();// 使用try (Workbook workbook = new XSSFWorkbook();FileOutputStream out = new FileOutputStream("E:\\test\\demo03.xlsx")) {Sheet sheet = workbook.createSheet();Row headrow = sheet.createRow(0);Cell headcell0 = headrow.createCell(0);headcell0.setCellValue("序号");Cell headcell1 = headrow.createCell(1);headcell1.setCellValue("姓名");Cell headcell2 = headrow.createCell(2);headcell2.setCellValue("日期");Cell headcell3 = headrow.createCell(3);headcell3.setCellValue("红包金额");// 获取格式编码值DataFormat dataFormat = workbook.createDataFormat();short dataFormatCode = dataFormat.getFormat("yyyy年MM月dd日 HH:mm:ss");short moneyFormatCode = dataFormat.getFormat("¥#,###");// 创建日期格式对象CellStyle dataCellStyle = workbook.createCellStyle();dataCellStyle.setDataFormat(dataFormatCode);// 创建货币格式对象CellStyle moneyCellStyle = workbook.createCellStyle();moneyCellStyle.setDataFormat(moneyFormatCode);for(int i = 0 ;i < 300000;i++) {String name = "A" + i;// 创建行Row row = sheet.createRow(i+1);// 创建单元格Cell cell0 = row .createCell(0); // 序号cell0.setCellValue(String.valueOf(i+1));Cell cell1 = row.createCell(1); // 姓名cell1.setCellValue(name);Cell cell2 = row.createCell(2);// 日期cell2.setCellStyle(dataCellStyle);// 日期格式对象cell2.setCellValue(new Date());Cell cell3 = row.createCell(3);cell3.setCellStyle(moneyCellStyle);cell3.setCellValue((int)(Math.random() *1000000));}// 写入文件workbook.write(out);long end = System.currentTimeMillis();System.out.println("XSSFWorkbook读取30w文件共耗时" +(end - begin) +"毫秒");} catch (IOException e) {e.printStackTrace();}}}
3.SXSSFWorkbook
package com.apesource;import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.DataFormat;
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;public class Demo10 {public static void main(String[] args) {long begin = System.currentTimeMillis();// 使用try (Workbook workbook = new SXSSFWorkbook(100);FileOutputStream out = new FileOutputStream("E:\\test\\demo03.xlsx")) {Sheet sheet = workbook.createSheet();Row headrow = sheet.createRow(0);Cell headcell0 = headrow.createCell(0);headcell0.setCellValue("序号");Cell headcell1 = headrow.createCell(1);headcell1.setCellValue("姓名");Cell headcell2 = headrow.createCell(2);headcell2.setCellValue("日期");Cell headcell3 = headrow.createCell(3);headcell3.setCellValue("红包金额");// 获取格式编码值DataFormat dataFormat = workbook.createDataFormat();short dataFormatCode = dataFormat.getFormat("yyyy年MM月dd日 HH:mm:ss");short moneyFormatCode = dataFormat.getFormat("¥#,###");// 创建日期格式对象CellStyle dataCellStyle = workbook.createCellStyle();dataCellStyle.setDataFormat(dataFormatCode);// 创建货币格式对象CellStyle moneyCellStyle = workbook.createCellStyle();moneyCellStyle.setDataFormat(moneyFormatCode);for(int i = 0 ;i < 300000;i++) {String name = "A" + i;// 创建行Row row = sheet.createRow(i+1);// 创建单元格Cell cell0 = row .createCell(0); // 序号cell0.setCellValue(String.valueOf(i+1));Cell cell1 = row.createCell(1); // 姓名cell1.setCellValue(name);Cell cell2 = row.createCell(2);// 日期cell2.setCellStyle(dataCellStyle);// 日期格式对象cell2.setCellValue(new Date());Cell cell3 = row.createCell(3);cell3.setCellStyle(moneyCellStyle);cell3.setCellValue((int)(Math.random() *1000000));}// 写入文件workbook.write(out);long end = System.currentTimeMillis();System.out.println("SXSSFWorkbook读取30w文件共耗时" +(end - begin) +"毫秒");} catch (IOException e) {e.printStackTrace();}}}
综上数据可见:同是30w数据SXSSFWorkbook运行速度最快,CPU占比最小;EasyExcel次之;XSSFWorkbook运行速度最慢,CPU占比最大;
XSSFWorkbook,SXSSFWorkbook以及EasyExcel读取Excel文件的比较相关推荐
- 阿里的Easyexcel读取Excel文件(最新版本)
本篇文章主要介绍一下使用阿里开源的Easyexcel工具处理读取excel文件,因为之前自己想在网上找一下这个简单的立即上手的博客,发现很多文章的教程都针对比较旧的版本的Easyexcel,没有使 ...
- 解决easyExcel读取EXCEL用String去接收数字,出现小数点BUG
起因 目前项目中需要使用easyExcel 读取Excel文件,因为后端使用mongodb存储格式,数据格式不确定.因此读取文件时,未传递.class对象(指用方法一调用),使用String 接收Nu ...
- Java 使用EasyExcel读取Excel中多个sheet方法及示例代码
本文主要介绍Java中,使用EasyExcel读取Excel文件中多个Sheet的方法,以及使用示例代码. 1.读取数据的实体对象 @Data public class DemoData {priva ...
- jav读取excel文件
java读取excel文件 引入jar包依赖 读取excel的java代码 引入jar包依赖 <dependency><-- 需要用3.以上的版本,2.的会发生代码获取workboo ...
- EasyExcel轻松读取Excel文件!
EasyExcel是一个Java库,用于快速.简单地读写Excel文件.要使用EasyExcel,您首先需要将其添加为项目的依赖: 如果使用Maven,可以添加以下依赖项: <dependenc ...
- form表单提交,Servlet接收并读取Excel文件
首先是jsp页面: <body scroll=no style="overflow-y:hidden;" onselectstart="return false&q ...
- 读取EXCEL文件内容
2019独角兽企业重金招聘Python工程师标准>>> package org.bigdata.framework.admin.web.util;import java.io.Fil ...
- 【Apache POI】Java 读取Excel文件
Excel内容如下: 封装Excel行列字段的Bean: public class Employee {private String name;private String gender;privat ...
- easyExcel导出excel文件并打包成zip压缩包下载
文件导出 专栏收录该内容 2 篇文章0 订阅 订阅专栏 package com.business.testExcelPort; import java.io.BufferedInputStream; ...
最新文章
- QT 使用全局变量的方法
- 6. Qt 信号与信号槽 (7)-QMetaObject:: activate
- C语言两班平均成绩,用C语言编程平均分数
- C++之静态成员变量和静态成员函数
- 女程序员,说多了都是泪!
- JavaScript 常用单词整理
- 040_Auto.js
- 区块链开发公司:区块链技术如何改变个人数据安全
- 建立完善的日期定义表
- win11怎么升级_win11系统升级更新注意事项
- 高并发系统设计四(系统怎样做到高可用)
- linux申请大块内存,linux 内存看一篇就够了(多图)
- 蒸汽流量计算软件_NHR-5600系列流量计算仪控制仪使用说明 总结
- vue input判断值是扫码枪还是键盘输入
- centos7 手动安装mysql8.0 并实现双机热备份 2022-1-1
- ORACLE优化器RBO与CBO介绍总结
- 区块链 — 默克尔树
- 网络工程基础——Ciso Packet Tracer 之旅
- 如何提升显卡性能测试软件,怎么测试显卡性能【设置办法】
- 2022冬季pat乙级
热门文章
- xbox的mac地址_如何将Xbox One控制器连接到Mac
- 买房的注意事项(zt)
- #L190604从楼市回报率谈价值投资
- Python使用递归方法求阶乘
- python自考_让我们一起来看看自学Python人的心声(附学习教程)
- 1 输入三个数,判断能否以这三个数构成一个三角形,若能则输出所构成三角形的类别(等边、等腰、直角或斜三角形)。
- Spark编程模型(之莎士比亚文集词频统计实现)
- Opencv 三对角线矩阵(Tridiagonal Matrix)解法之(Thomas Algorithm)
- JQuery实例(三)- 动态修改Table中的内容
- 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?【LeetCode Hot 100】