【Easyexcel】java导入导出超大数据量的xlsx文件 解决方法
解决方法:
使用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文件 解决方法的更多相关文章
- PHP实时生成并下载超大数据量的EXCEL文件
最近接到一个需求,通过选择的时间段导出对应的用户访问日志到excel中, 由于用户量较大,经常会有导出50万加数据的情况.而常用的PHPexcel包需要把所有数据拿到后才能生成excel, 在面对生成 ...
- PHP 实时生成并下载超大数据量的 Excel 文件
//另外由于excel数据是从数据库里逐步读出然后写入输出流的所以需要将PHP的执行时间设长一点 //(默认30秒)set_time_limit(0)不对PHP执行时间做限制. set_time_li ...
- 使用Layui、Axios、Springboot(Java) 实现EasyExcel的导入导出(浏览器下载)
实现EasyExcel的导入导出(浏览器下载) 实现三个按钮的功能,但是却花费了一天的时间包括总结. 使用到的技术:springboot layui axios EasyExcel mybatis-p ...
- 使用VUE+SpringBoot+EasyExcel 整合导入导出数据
使用VUE+SpringBoot+EasyExcel 整合导入导出数据 创建一个普通的maven项目即可 项目目录结构 1 前端 存放在resources/static 下 index.html &l ...
- easyExcel用于导入导出
1.添加依赖: <!-- 现在已经更新到1.1.2-beta5 --> <dependency> <groupId>com.alibaba</groupId& ...
- 用NPOI实现导入导出csv、xls、xlsx数据功能
用NPOI实现导入导出csv.xls.xlsx数据功能 直接上代码 首先定义一个接口 如果需要直接操作文件的话,就自己在封装一次 然后定义csv类的具体实现 这个需要引入命名空间LumenWo ...
- oracle创建表空间、创建用户、授权角色和导入导出用户数据
使用数据库管理员身份登录 -- log as sysdba sqlplus / as sysdba; 创建临时表空间 -- create temporary tablespace create tem ...
- Mysql导入导出大量数据的方法、备份恢复办法
经常使用PHP+Mysql的朋友一般都是通过phpmyadmin来管理数据库的.日常的一些调试开发工作,使用phpmyadmin确实很方便.但是当我们需要导出几百兆甚至几个G的数据库时,phpmyad ...
- c# .Net :Excel NPOI导入导出操作教程之读取Excel文件信息及输出
c# .Net :Excel NPOI导入导出操作教程之读取Excel文件信息及输出 using NPOI.HSSF.UserModel;using NPOI.SS.UserModel;using S ...
随机推荐
- java高并发系列 - 第13天:JUC中的Condition对象
本文目标: synchronized中实现线程等待和唤醒 Condition简介及常用方法介绍及相关示例 使用Condition实现生产者消费者 使用Condition实现同步阻塞队列 Object对 ...
- Solr java.sql.SQLException: null, message from server: "Host 'xxx' is not allowed to connect to this MySQL server
在用solr从mysql导入数据的时候,因为linux和本机的数据库不在同一个ip段上, 又因为本地的mysql没有设置远程其它ip可以访问所以就报了如下错误 解决办法: 在mysql任意可以输入查询 ...
- 死磕 java同步系列之ReentrantLock源码解析(二)——条件锁
问题 (1)条件锁是什么? (2)条件锁适用于什么场景? (3)条件锁的await()是在其它线程signal()的时候唤醒的吗? 简介 条件锁,是指在获取锁之后发现当前业务场景自己无法处理,而需要等 ...
- Java生鲜电商平台-订单配送模块的架构与设计
Java生鲜电商平台-订单配送模块的架构与设计 生鲜电商系统最终的目的还是用户下单支付购买, 所以订单管理系统是电商系统中最为复杂的系统,其作为中枢决定着整个商城的运转, 本文将对于生鲜类电商平台的订 ...
- windows下dubbo-admin2.6.x之后版本的安装
安装zookeeper(单机) 下载bin.tar.gz的版本,解压 conf下的zoo_sample.cfg改zoo.cfg zoo.cfg里添加配置 dataDir=G:/zookeeper-/d ...
- C#如何将DataTable中的列名复制到另一个DataTable
C#如何将DataTable中的列名复制到另一个DataTable? 仅复制列名,不复制列下的数据: var newDt = new DataTable(); newDt = oldDataTable ...
- Jquery绑定事件及动画效果
Jquery绑定事件及动画效果 本文转载于:https://blog.csdn.net/Day_and_Night_2017/article/details/85799522 绑定事件 bind(ty ...
- 如何给HTML页面的文本设置字符和单词间距
设置字符和单词间距介绍 属性名 单位 描述 letter-spacing px 设置字符间距 word-spacing px 设置单词间距 letter-spacing设置字符间距 letter-sp ...
- Django 全局log process_exception中间件
class BaseResp: # 基础的返回值类 def __init__(self, code, msg, data): self.code = code self.msg = msg self. ...
- xamarin Android 监听音量键(上)
public override bool OnKeyDown([GeneratedEnum]Android.Views.Keycode keyCode, KeyEvent e) { switch (k ...