业务背景:

列表导出,数据导出超过65533行

解决方案:

1、超出65533行,直接系统提示:本系统支持导出的最大条数为65533行

2、导出模版改为.xlsx,POI导出时用XSSFWorkbook,把所有数据都拿到内存里,可以导出超过65533行,但是上线之后,发现会内存溢出

3、导出模版改为.xlsx,POI导出时用SXSSFWorkbook,每次往内存里放一定的数据,导完之后,刷新,再次从磁盘往内存放数据,会产生临时文件,导出完成之后,需把临时文件删掉,这种方式会使CPU短暂升高,但是很快会降下去

private static ByteArrayInputStream WriteToExcelTemplate(DataModel dataModel, HttpServletRequest request) {

String template = getRealPathModelExcel(dataModel.getTemplate(), request);

FileInputStream fileInputStream = new FileInputStream(template);

XSSFWorkbook workBook = new XSSFWorkbook(fileInputStream);

int rowaccess = 100;

SXSSFWorkbook wb = new SXSSFWorkbook(workBook,rowaccess);

ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

Sheet sh = wb.getSheetAt(0);

List data = dataModel.getData();

int startRow = dataModel.getStartRow();

for (int i = 0; i < data.size(); ++i) {

Object[] objArray = (Object[]) data.get(i);

Row row = sh.createRow(startRow);

Cell[] cell = new SXSSFCell[objArray.length];

for (int j = 0; j < objArray.length; ++j) {

cell[j] = row.createCell(j);

cell[j].setCellStyle(dataModel.getCenterStyle());

if (objArray[j] == null) {

cell[j].setCellValue("");

} else {

setCellValue(cell[j], objArray[j]);

}

}

++startRow;

if(i%rowaccess==0){

((SXSSFSheet)sh).flushRows();

}

}

wb.write(byteArrayOutputStream);

byte[] byteArray = byteArrayOutputStream.toByteArray();

ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArray);

byteArrayOutputStream.close();

deleteSXSSFTempFiles(wb);//删除临时文件

return byteArrayInputStream;

}

/**

* 删除临时文件

* @param workbook

* @throws NoSuchFieldException

* @throws IllegalAccessException

*/

public static void deleteSXSSFTempFiles(SXSSFWorkbook workbook)

throws NoSuchFieldException, IllegalAccessException {

int numberOfSheets = workbook.getNumberOfSheets();

// iterate through all sheets (each sheet as a temp file)

for (int i = 0; i < numberOfSheets; i++) {

Sheet sheetAt = workbook.getSheetAt(i);

// delete only if the sheet is written by stream

if (sheetAt instanceof SXSSFSheet) {

SheetDataWriter sdw = (SheetDataWriter) getPrivateAttribute(sheetAt, "_writer");

File f = (File) getPrivateAttribute(sdw, "_fd");

try {

f.delete();

} catch (Exception ex) {

// could not delete the file

}

}

}

}

public static Object getPrivateAttribute(

Object containingClass, String fieldToGet)

throws NoSuchFieldException, IllegalAccessException{

// get the field of the containingClass instance

Field declaredField = containingClass.getClass().getDeclaredField(fieldToGet);

declaredField.setAccessible(true); // access it

Object get = declaredField.get(containingClass); // return it!

return get;

}

标签:java,get,int,导出,Object,excel,cell,new,65533

来源: https://blog.csdn.net/weixin_43805526/article/details/90415248

java 65533,java导出excel超出65533行相关推荐

  1. java导入、导出Excel文件

    一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已经习惯用Excel打印.这样在我们实际 ...

  2. java利用poi导出excel功能-附带图片导出

    java利用poi导出excel功能-附带图片导出 写在前面 最近刚离职,闲来无事,于是把上两家公司都有碰到过的需求但都没有去研究实现:即导出带图片的excel报表.于是就折腾了一下这个功能,研究出来 ...

  3. Java从零开始实现导出excel(一)

    Java从零开始实现导出excel(一) java导出excel两种方式 使用easyExcel通过模板导出excel 1.快速创建工程 下面我就直接贴代码 注意事项: 新人博主,随笔记录.主要还是通 ...

  4. java使用模板导出Excel表格

    java使用模板导出Excel表格 文章目录 java使用模板导出Excel表格 模板示例 一.引入依赖 二.使用步骤 1.添加工具类 2.导出Excel 模板示例 一.引入依赖 <depend ...

  5. java中poi导出Excel表格(前台流文件接收)

    java中poi导出Excel表格,前端以流的方式接收,而非直接生成文件再下载,解决多台服务器部署后,路径地址不统一导致的下载问题. 生成Excel示例图: 2.代码说明 ① 在上次的基础上增加了底部 ...

  6. Java操作poi导出Excel自定义字体颜色

    Java操作poi导出Excel自定义字体颜色 功能介绍 POI操作Excel 第一步创建一个导出的工具类 整体定义表格字体样式 自定义表格字体样式 总结 功能介绍 Apache POI 是用Java ...

  7. Java从零开始实现导出excel(三)

    Java从零开始实现导出excel(三) 新人博主,随笔记录.主要还是通过自己日常工作积累,系统整理一些技术.希望能够节省更多人的时间,走出自己的路. 简述 新的一年,先祝各位小伙伴新的一年,事业有成 ...

  8. Java 使用EasyExcel导出excel文件

    Java 使用EasyExcel导出excel文件 一.引入pom依赖 二.导出实体 三. 生成excelController 四.效果 一.引入pom依赖 <dependency>< ...

  9. Java poi插件导出Excel文件合并多sheet页

    文章目录 一.java导出excel格式文件 二.excel文件多sheet页合并 前言:2020年第一篇文章,就写这两天工作中遇到的这个小需求吧,导出多excel,每个excel有多个sheet页, ...

  10. Java和poi导出excel报表

    一:poi jar下载地址:点击打开链接: 二:工程截图: 三:运行效果截图: 四:源代码: Student.java: package com.poi.bean;import java.util.D ...

最新文章

  1. SSH配置优化和慢的解决方法
  2. Oracle分页查询2
  3. 2017年3月23下午学习日志
  4. 提高你的Java代码质量吧:如果有必要,使用变长数组吧
  5. 关于realarm S5P4418的u-boot显示内存大小问题解决方法
  6. 豆瓣评分9.4!这一部纪录片,探秘中国人迹罕至的未至之境!
  7. python使用pip离线下载并安装包
  8. iframe标签里面的页面元素只读
  9. PySide QtCore.Signal帮助手册
  10. 《Microsoft SQL Server 2008 Analysis Services Step by Step》学习笔记十一:与Cube交互(下)...
  11. 2010年c语言上机题库,2010年计算机c语言上机题库
  12. VirtualLab专题实验教程-1.超表面纳米柱及其相位分析
  13. 微信小程序-image(图片)
  14. 第一章、银行会计的基本原理和基本核算方法
  15. 记一次失败的项目经历
  16. 用最少数量的剑引爆气球
  17. 利用python计算复合材料ABD矩阵以及压缩载荷的代码
  18. HCNP——LSR报文、LSU报文及LSAck报文
  19. excel 域 邮件合并_如何获得免费的电子邮件域(5种快速简便的方法)
  20. (转)连续信号(八)| 傅里叶变换的性质 | 积分、微分特性 + 时域、频域卷积 + 帕斯瓦尔

热门文章

  1. RGB与CMYK这两大色彩模式的区别
  2. android编辑keynote,Keynote添加和编辑母版幻灯片
  3. windows中家庭网络、工作网络、公用网络的作用及区别
  4. 哈佛大学幸福课-笔记
  5. 收益率-计算方法介绍
  6. 【供应链架构day8】履约系统的架构长什么样子:从需求开始讲起
  7. Flutter 不是真正的跨平台框架
  8. 666. 三角形类型
  9. 类静态初始化块即将纳入ES2022,我们先一睹为快
  10. 产品开发之小步快跑,快速迭代