解决方法:

使用easyexcel解决超大数据量的导入导出xlsx文件

easyexcel最大支持行数 1048576。

官网地址:

https://alibaba-easyexcel.github.io/

GitHub地址:

https://github.com/alibaba/easyexcel

使用示例:

Java数据类【重点是属性上的注解】:

package com.proengine.domain.man.partner.bean;

import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.proengine.domain.common.enums.PromotionStatusEnum;
import com.proengine.sdk.enums.PromotionSubTypeEnum; import java.math.BigDecimal;
import java.util.Date; /**
* @Author: SXD
* @Description:
* @Date: create in 2019/9/26 11:43
*/
@ColumnWidth(25)
public class ProSkuSearchInfoDisplay { /**
* 促销ID
*/
@ExcelProperty(value = "促销编码",index = 6)
private String proId; /**
* 参与类型
*/
@ExcelIgnore
private Integer itemType; /**
* 商品sku 或 商品mc
* DB查询出来的值
*/
@ExcelIgnore
private String itemCode; /**
* 商品sku
* 最终结果值
*/
@ExcelProperty(value = "商品sku",index = 0)
private Long sku; /**
* 物料编码
*/
@ExcelProperty(value = "物料编码",index = 1)
private String matnrCode; /**
* 商品名称
*/
@ExcelProperty(value = "商品名称",index = 2)
private String skuName; /**
* 国条码
*/
@ExcelProperty(value = "国条码",index = 3)
private String barCode;
/**
* 商品MC
* 最终结果值
*/
@ExcelProperty(value = "商品MC",index = 4)
private String skuMc; /**
* 商品MC Name
*/
@ExcelIgnore
private String skuMcName; /**
* 促销档期
*/
@ExcelProperty(value = "促销档期",index = 5)
private String proSchedule; /**
* 促销编码
*/
@ExcelIgnore
private String proCode; /**
* 促销名称
*/
@ExcelProperty(value = "促销名称",index =7)
private String proName; /**
* 促销详情
*/
@ColumnWidth(50)
@ExcelProperty(value = "促销详情",index =8)
private String proDetail; /**
* 促销类型
*/
@ExcelIgnore
private Integer proType; /**
* 促销子类型
*/
@ExcelIgnore
private Integer proSubType; /**
* 促销类型名称
*/
@ExcelProperty(value = "促销类型",index =9)
private String proTypeName; /**
* 促销售价 单位:分
*/
@ExcelProperty(value = "促销售价",index =10)
private Double proPrice; /**
* 促销折扣值
* 仅单品促销实际应用本字段
* 单品直降 101 skuPrice-rewardValue = proPrice
* 单品特价 102 proPrice = rewardValue
* 单品折扣 103 skuPrice*(rewardValue/10000) = proPrice
*/
@ExcelIgnore
private Long rewardValue; /**
* 商品原价 单位:分
*/
@ExcelProperty(value = "商品原价",index =11)
private Double skuPrice; /**
* 促销状态
*/
@ExcelIgnore
private Integer proStatus; /**
* 促销状态名称
*/
@ExcelProperty(value = "促销状态",index =12)
private String proStatusName; /**
* PO订单号 暂无
* 采销系统相关
*/
@ExcelIgnore
private String poOrderCode; /**
* STO订单号 暂无
* 采销系统相关
*/
@ExcelIgnore
private String stoOrderCode; /**
* 预期到店日 暂无
* 采销系统相关
*/
@ExcelIgnore
private Date expectedDate; /**
* 促销开始时间
*/
@ExcelProperty(value = "促销开始时间",index =13)
private Date proStartTime; /**
* 促销结束时间
*/
@ExcelProperty(value = "促销结束时间",index =14)
private Date proEndTime; /**
* 单品 三种折扣 计算促销价格
*/
public void calcuProPrice(){ if (skuPrice != null){
if (proSubType == PromotionSubTypeEnum.SINGLE_CUT_PRICE.getValue()){
proPrice = skuPrice-rewardValue;
}
if (proSubType == PromotionSubTypeEnum.SINGLE_SPECIAL_PRICE.getValue()){
proPrice = (double)rewardValue;
}
if (proSubType == PromotionSubTypeEnum.SINGLE_REBATE.getValue()){
proPrice = skuPrice - BigDecimal.valueOf(skuPrice).subtract(BigDecimal.valueOf(rewardValue * skuPrice).divide(BigDecimal.valueOf(10000), 2, BigDecimal.ROUND_HALF_UP)).setScale(0, BigDecimal.ROUND_HALF_UP).longValue();
}
} } /**
* 组装最终展示数据
*/
public void assembleParams(){
proTypeName = PromotionSubTypeEnum.getDesc(proSubType);
proStatusName = PromotionStatusEnum.getDesc(proStatus);
proPrice = proPrice != null ? proPrice/(double)100 : null;
skuPrice = skuPrice != null ? skuPrice/(double)100 : null;
} public String getBarCode() {
return barCode;
} public void setBarCode(String barCode) {
this.barCode = barCode;
} public String getProTypeName() {
return proTypeName;
} public void setProTypeName(String proTypeName) {
this.proTypeName = proTypeName;
} public String getProStatusName() {
return proStatusName;
} public void setProStatusName(String proStatusName) {
this.proStatusName = proStatusName;
} public Date getProStartTime() {
return proStartTime;
} public void setProStartTime(Date proStartTime) {
this.proStartTime = proStartTime;
} public Date getProEndTime() {
return proEndTime;
} public void setProEndTime(Date proEndTime) {
this.proEndTime = proEndTime;
} public Long getRewardValue() {
return rewardValue;
} public void setRewardValue(Long rewardValue) {
this.rewardValue = rewardValue;
} public String getProId() {
return proId;
} public void setProId(String proId) {
this.proId = proId;
} public Long getSku() {
if (sku == null){
setSkuFromItemCode();
}
return sku;
} public void setSkuFromItemCode(){
setSku(Long.parseLong(itemCode));
} public void setSku(Long sku) {
this.sku = sku;
} public Integer getItemType() {
return itemType;
} public void setItemType(Integer itemType) {
this.itemType = itemType;
} public String getItemCode() {
return itemCode;
} public void setItemCode(String itemCode) {
this.itemCode = itemCode;
} public String getMatnrCode() {
return matnrCode;
} public void setMatnrCode(String matnrCode) {
this.matnrCode = matnrCode;
} public String getSkuName() {
return skuName;
} public void setSkuName(String skuName) {
this.skuName = skuName;
} public String getSkuMc() {
return skuMc;
} public void setSkuMc(String skuMc) {
this.skuMc = skuMc;
} public String getSkuMcName() {
return skuMcName;
} public void setSkuMcName(String skuMcName) {
this.skuMcName = skuMcName;
} public String getProSchedule() {
return proSchedule;
} public void setProSchedule(String proSchedule) {
this.proSchedule = proSchedule;
} public String getProCode() {
return proCode;
} public void setProCode(String proCode) {
this.proCode = proCode;
} public String getProName() {
return proName;
} public void setProName(String proName) {
this.proName = proName;
} public String getProDetail() {
return proDetail;
} public void setProDetail(String proDetail) {
this.proDetail = proDetail;
} public Integer getProType() {
return proType;
} public void setProType(Integer proType) {
this.proType = proType;
} public Integer getProSubType() {
return proSubType;
} public void setProSubType(Integer proSubType) {
this.proSubType = proSubType;
} public Double getProPrice() {
return proPrice;
} public void setProPrice(Double proPrice) {
this.proPrice = proPrice;
} public Double getSkuPrice() {
return skuPrice;
} public void setSkuPrice(Double skuPrice) {
this.skuPrice = skuPrice;
} public Integer getProStatus() {
return proStatus;
} public void setProStatus(Integer proStatus) {
this.proStatus = proStatus;
} public String getPoOrderCode() {
return poOrderCode;
} public void setPoOrderCode(String poOrderCode) {
this.poOrderCode = poOrderCode;
} public String getStoOrderCode() {
return stoOrderCode;
} public void setStoOrderCode(String stoOrderCode) {
this.stoOrderCode = stoOrderCode;
} public Date getExpectedDate() {
return expectedDate;
} public void setExpectedDate(Date expectedDate) {
this.expectedDate = expectedDate;
}
}

生成xlsx文件:

private static final String UPLOAD_TEMP_FILE_NAME = "导出xlsx文件-%s.xlsx";

 private File createXlsxFile2(List<ProSkuSearchInfoDisplay> list,String recordKey){
String filePath = getFilePath(recordKey); ExcelWriter excelWriter = EasyExcel.write(filePath, ProSkuSearchInfoDisplay.class).build();
WriteSheet writeSheet = EasyExcel.writerSheet("促销商品数据").build();
excelWriter.write(list, writeSheet);
/// 千万别忘记finish 会帮忙关闭流
excelWriter.finish(); return new File(filePath);
} /**
* 获取临时文件路径
* @return
*/
private String getFilePath(String recordKey){
String path = ProExportSkuDataJob.class.getResource("/").getPath()+String.format(UPLOAD_TEMP_FILE_NAME, recordKey.substring(recordKey.lastIndexOf(":")+1));
DpeLogUtil.info("dpePartner#ProExportSkuDataJob createFilePath={"+path+"}");
return path;
}

使用过程中报异常和处理的方法:

https://www.cnblogs.com/sxdcgaq8080/p/11791900.html

【Easyexcel】java导入导出超大数据量的xlsx文件 解决方法的更多相关文章

  1. PHP实时生成并下载超大数据量的EXCEL文件

    最近接到一个需求,通过选择的时间段导出对应的用户访问日志到excel中, 由于用户量较大,经常会有导出50万加数据的情况.而常用的PHPexcel包需要把所有数据拿到后才能生成excel, 在面对生成 ...

  2. PHP 实时生成并下载超大数据量的 Excel 文件

    //另外由于excel数据是从数据库里逐步读出然后写入输出流的所以需要将PHP的执行时间设长一点 //(默认30秒)set_time_limit(0)不对PHP执行时间做限制. set_time_li ...

  3. 使用Layui、Axios、Springboot(Java) 实现EasyExcel的导入导出(浏览器下载)

    实现EasyExcel的导入导出(浏览器下载) 实现三个按钮的功能,但是却花费了一天的时间包括总结. 使用到的技术:springboot layui axios EasyExcel mybatis-p ...

  4. 使用VUE+SpringBoot+EasyExcel 整合导入导出数据

    使用VUE+SpringBoot+EasyExcel 整合导入导出数据 创建一个普通的maven项目即可 项目目录结构 1 前端 存放在resources/static 下 index.html &l ...

  5. easyExcel用于导入导出

    1.添加依赖: <!-- 现在已经更新到1.1.2-beta5 --> <dependency> <groupId>com.alibaba</groupId& ...

  6. 用NPOI实现导入导出csv、xls、xlsx数据功能

    用NPOI实现导入导出csv.xls.xlsx数据功能   直接上代码 首先定义一个接口   如果需要直接操作文件的话,就自己在封装一次 然后定义csv类的具体实现 这个需要引入命名空间LumenWo ...

  7. oracle创建表空间、创建用户、授权角色和导入导出用户数据

    使用数据库管理员身份登录 -- log as sysdba sqlplus / as sysdba; 创建临时表空间 -- create temporary tablespace create tem ...

  8. Mysql导入导出大量数据的方法、备份恢复办法

    经常使用PHP+Mysql的朋友一般都是通过phpmyadmin来管理数据库的.日常的一些调试开发工作,使用phpmyadmin确实很方便.但是当我们需要导出几百兆甚至几个G的数据库时,phpmyad ...

  9. c# .Net :Excel NPOI导入导出操作教程之读取Excel文件信息及输出

    c# .Net :Excel NPOI导入导出操作教程之读取Excel文件信息及输出 using NPOI.HSSF.UserModel;using NPOI.SS.UserModel;using S ...

随机推荐

  1. java基础(32):类加载、反射

    1. 类加载器 1.1 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. 加载 就是指将class文件读入内存,并为之创建一个C ...

  2. 深浅拷贝的应用-copy、mutableCopy

    ViewController.h #import <UIKit/UIKit.h> @interface ViewController : UIViewController //如果想让li ...

  3. 阿里云centos7安装python3.7.4和pip3

    亲测有效,针对 阿里云 centos 7 轻量服务器 python ==> 3.7.4 pip ==>  3 一,打开python官网,找到下载Python的tgz文件,有两种方式下载 ( ...

  4. 【JavaWeb】Ajax基础

    Ajax介绍 Asynchronous JavaScript And XML(异步的JavaScript和XML): Ajax可以在不刷新页面的前提下,进行页面局部更新: Ajax不是新的技术,Aja ...

  5. Vue实战狗尾草博客管理平台第六章

    Vue实现狗尾草博客后台管理系统第六章 本章节内容 文章列表 文章详情 草稿箱 文章发布. 本章节内容呢,开发的很是随意哈,因为多数就是element-ui的使用,熟悉的童鞋,是可以很快完成本章节的内 ...

  6. bay——安装_RAC11g_LC_ASM方式_测试环境.txt

    ★★★____★☆★〓〓〓〓→VMware vSphere Client6.0 https://10.20.4.200/ 下载Vwmare IP:10.20.4.200-------账号:root-- ...

  7. 6-SQL子查询

    (1) 什么是关联子查询,什么是非关联子查询 (嵌套查询) 子查询从数据表中查询了数据结果,如果这个数据结果只执行一次,然后这个数据结果作为主查询的条件进行执行,那么这样的子查询叫做非关联子查询. 如 ...

  8. 渗透测试学习 十九、 XSS跨站脚本漏洞详解 续2

    二阶注入环境搭建 74cms 3.4 直接将源码放在PHPstudy的www路径下,在地址栏中输入127.0.0.1回车 然后进入网站首页,在填写简历里面存在二阶注入 先注册一个账号 创建简历 前面的 ...

  9. (四)Amazon Lightsail 部署LAMP应用程序之扩展PHP前端

    扩展PHP前端 既然PHP前端和数据库是分开的,您将为Web层添加可伸缩性和容错性: 在以下步骤,您将获取Web前端实例的快照,并从该快照部署另外2个Web层实例.最终,您将在三个Web实例前面添加一 ...

  10. linux so库方式

    gcc test_a.c test_b.c test_c.c -fPIC -shared -o libtest.so