java 65533,java导出excel超出65533行
业务背景:
列表导出,数据导出超过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行相关推荐
- java导入、导出Excel文件
一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已经习惯用Excel打印.这样在我们实际 ...
- java利用poi导出excel功能-附带图片导出
java利用poi导出excel功能-附带图片导出 写在前面 最近刚离职,闲来无事,于是把上两家公司都有碰到过的需求但都没有去研究实现:即导出带图片的excel报表.于是就折腾了一下这个功能,研究出来 ...
- Java从零开始实现导出excel(一)
Java从零开始实现导出excel(一) java导出excel两种方式 使用easyExcel通过模板导出excel 1.快速创建工程 下面我就直接贴代码 注意事项: 新人博主,随笔记录.主要还是通 ...
- java使用模板导出Excel表格
java使用模板导出Excel表格 文章目录 java使用模板导出Excel表格 模板示例 一.引入依赖 二.使用步骤 1.添加工具类 2.导出Excel 模板示例 一.引入依赖 <depend ...
- java中poi导出Excel表格(前台流文件接收)
java中poi导出Excel表格,前端以流的方式接收,而非直接生成文件再下载,解决多台服务器部署后,路径地址不统一导致的下载问题. 生成Excel示例图: 2.代码说明 ① 在上次的基础上增加了底部 ...
- Java操作poi导出Excel自定义字体颜色
Java操作poi导出Excel自定义字体颜色 功能介绍 POI操作Excel 第一步创建一个导出的工具类 整体定义表格字体样式 自定义表格字体样式 总结 功能介绍 Apache POI 是用Java ...
- Java从零开始实现导出excel(三)
Java从零开始实现导出excel(三) 新人博主,随笔记录.主要还是通过自己日常工作积累,系统整理一些技术.希望能够节省更多人的时间,走出自己的路. 简述 新的一年,先祝各位小伙伴新的一年,事业有成 ...
- Java 使用EasyExcel导出excel文件
Java 使用EasyExcel导出excel文件 一.引入pom依赖 二.导出实体 三. 生成excelController 四.效果 一.引入pom依赖 <dependency>< ...
- Java poi插件导出Excel文件合并多sheet页
文章目录 一.java导出excel格式文件 二.excel文件多sheet页合并 前言:2020年第一篇文章,就写这两天工作中遇到的这个小需求吧,导出多excel,每个excel有多个sheet页, ...
- Java和poi导出excel报表
一:poi jar下载地址:点击打开链接: 二:工程截图: 三:运行效果截图: 四:源代码: Student.java: package com.poi.bean;import java.util.D ...
最新文章
- SSH配置优化和慢的解决方法
- Oracle分页查询2
- 2017年3月23下午学习日志
- 提高你的Java代码质量吧:如果有必要,使用变长数组吧
- 关于realarm S5P4418的u-boot显示内存大小问题解决方法
- 豆瓣评分9.4!这一部纪录片,探秘中国人迹罕至的未至之境!
- python使用pip离线下载并安装包
- iframe标签里面的页面元素只读
- PySide QtCore.Signal帮助手册
- 《Microsoft SQL Server 2008 Analysis Services Step by Step》学习笔记十一:与Cube交互(下)...
- 2010年c语言上机题库,2010年计算机c语言上机题库
- VirtualLab专题实验教程-1.超表面纳米柱及其相位分析
- 微信小程序-image(图片)
- 第一章、银行会计的基本原理和基本核算方法
- 记一次失败的项目经历
- 用最少数量的剑引爆气球
- 利用python计算复合材料ABD矩阵以及压缩载荷的代码
- HCNP——LSR报文、LSU报文及LSAck报文
- excel 域 邮件合并_如何获得免费的电子邮件域(5种快速简便的方法)
- (转)连续信号(八)| 傅里叶变换的性质 | 积分、微分特性 + 时域、频域卷积 + 帕斯瓦尔