解决java poi导出excel2003不能超过65536行的问题
java poi在导出数据到excel2003工作表中时一个工作表只能存储65536行数据,如果超过这个数据就会失败,excel2007并没有这个问题,但是为了兼容性我们通常都是导出到2003版本上的。
1、导出成xlsx格式。
2、达到某个数值就再创建一张工作表。
/**
* 如果达到50000条数据则重新创建工作表的逻辑
*/
@Override
public void exportExcel(List<HolidayItemForm> formList, ServletOutputStream outputStream){
try {
//工作表名后面的数字,如表1,表2
int i = 0;
//记录总行数
int rownum = 0;
//记录每个sheet的行数
int tempnum = 0;
//分页条数达到此条数则创建工作表
int page = 5;
//创建工作薄
HSSFWorkbook workbook = new HSSFWorkbook();
//创建列标题栏样式
HSSFCellStyle cellStyle = ExcelUtils.createCellStyle(workbook, (short)10);
while(true){
//创建工作表并应用上面的样式
HSSFSheet sheet = ExcelUtils.createWorkbook(workbook,cellStyle,++i);
rownum++;
//将数据库中的数据列表写入excel中
if(formList != null){
tempnum = 0;
for (int j=rownum-i; j<formList.size(); j++) {
//进入第2个sheet写出的行数从第2条数据开始(++tempnum等于1,因为标题行占了1行)
HSSFRow row2 = sheet.createRow(++tempnum);
rownum++;
row2.createCell(0).setCellValue(formList.get(j).getUserId());
row2.createCell(1).setCellValue(formList.get(j).getUserName());
row2.createCell(2).setCellValue(formList.get(j).getDeptName());
row2.createCell(3).setCellValue(formList.get(j).getUserJob());
row2.createCell(4).setCellValue(formList.get(j).getTypeName());
row2.createCell(5).setCellValue(formList.get(j).getBeginDate());
row2.createCell(6).setCellValue(formList.get(j).getEndDate());
row2.createCell(7).setCellValue(formList.get(j).getHolidayHour());
row2.createCell(8).setCellValue(formList.get(j).getCreateDate());
//达到5条退出并创建另外一个sheet
if(rownum%page == 0){
break;
}
}
}
//如果记录的行数等于集合的总行数则退出
if((rownum-i) == formList.size()){
break;
}
}
//输出
workbook.write(outputStream);
workbook.close();
} catch (IOException e) {
e.printStackTrace();
}
}
参考:https://blog.csdn.net/wjycgl/article/details/53942818。
解决java poi导出excel2003不能超过65536行的问题的更多相关文章
- 解决Java POI 导出Excel时文件名中文乱码,兼容浏览器
String agent = request.getHeader("USER-AGENT").toLowerCase(); response.setContentType(&quo ...
- 重构:以Java POI 导出EXCEL为例
重构 开头先抛出几个问题吧,这几个问题也是<重构:改善既有代码的设计>这本书第2章的问题. 什么是重构? 为什么要重构? 什么时候要重构? 接下来就从这几个问题出发,通过这几个问题来系统的 ...
- Java POI 导出EXCEL经典实现 Java导出Excel
转自http://blog.csdn.net/evangel_z/article/details/7332535 在web开发中,有一个经典的功能,就是数据的导入导出.特别是数据的导出,在生产管理或者 ...
- 解决Android单个dex文件不能超过65536个方法问题
当我们的项目代码过大时,编译运行时会报Unable to execute dex: method ID not in[0, 0xffff]: 65536)错误.当出现这个错误时说明你本身自己的工程代码 ...
- 重构:以Java POI 导出EXCEL为例2
前言 上一篇博文已经将一些对象抽象成成员变量以及将一些代码块提炼成函数.这一节将会继续重构原有的代码,将一些函数抽象成类,增加成员变量,将传入的参数合成类等等. 上一篇博文地址:http://www. ...
- java poi导出多sheet页
/** * @Title: exportExcel * @Description: 导出Excel的方法 * @param workbook * @param sheetNum (sheet的位置,0 ...
- 复杂的POI导出Excel表格(多行表头、合并单元格)
poi导出excel有两种方式: 第一种:从无到有的创建整个excel,通过HSSFWorkbook,HSSFSheet HSSFCell, 等对象一步一步的创建出工作簿,sheet,和单元格,并添加 ...
- Pandas 读取超过 65536 行的 Excel 文件
Excel 文件的格式曾经发生过一次变化,在 Excel 2007 以前,使用扩展名为 .xls 格式的文件,这种文件格式是一种特定的二进制格式,最多支持 65,536 行,256 列表格.从 Exc ...
- java:POI导出excel
POI是一个开源项目,专用于java平台上操作MS OFFICE,企业应用开发中可用它方便导出Excel. 下面是使用示例: 1.maven中先添加依赖项 <dependency> < ...
随机推荐
- [转]BEC Vantage
https://www.examenglish.com/BEC/BEC_Vantage.html https://www.cambridgeenglish.org/exams-and-tests/bu ...
- 如何在linux上有2个python的情况下安装gensim
安装python的问题 https://blog.51cto.com/liqingbiao/2083869 安装gensim https://blog.csdn.net/zhujiyao/articl ...
- JavaScript-----9.函数
1.函数的使用 1.1 声明函数和调用函数 //1.声明函数 //function 函数名() { // //函数体 //} function sayHi() { console.log('hi~') ...
- Linux基础 —基础要点
一.请简述Linux安装时的两个必备分区.挂载点和类型. 一般情况下,安装红旗Linux需要两个必备分区,即一个根文件系统分区,挂载点(/),类型为ext3.ext2或reiserfs:一个交换分区, ...
- [译]Vulkan教程(05)Instance
[译]Vulkan教程(05)Instance Creating an instance 创建一个instance The very first thing you need to do is ini ...
- ETCD:基于角色的访问控制
原文地址:Role-based access control 总览 身份验证已添加到etcd 2.1中. etcd v3 API略微修改了身份验证功能的API和用户界面,以更好地适应新的数据模型.本指 ...
- navicat的一些常用快捷键
Navicat可以支持连接多种数据库,使用上的功能也比较强大. 如果使用了IDEA内置的数据库工具(个人喜欢用这个)或是SQL Server官方的数据库管理工具的话,会发现使用上都存在区别,区别就主要 ...
- .net core 反射的介绍与使用
1. 概述反射 通过反射可以提供类型信息,从而使得我们开发人员在运行时能够利用这些信息构造和使用对象. 反射机制允许程序在执行过程中动态地添加各种功能. 2. Type类的介绍 是BCL(基 ...
- linux远程登入/远程上传文件
一.远程登入 1.安装 Xshell5 2.查看是否具备连接 在linux 主机上输入 chkconfig --list | grep sshd #sshd 0:关闭 1:关闭 2:启用 3:启用 4 ...
- JavaScript 字符串是否包含某个字符串
字符串方式 indexOf() (推荐) var str = "123"; console.log(str.indexOf("3") != -1 ); // ...