我们都知道java poi在导出数据到excel2003工作表中时一个工作表只能存储65536行数据,如果超过这个数据就会失败,excel2007并没有这个问题,但是为了兼容性我们通常都是导出到2003版本上的,下面我们看看如何用java poi解决这个问题,为了便于理解我就将整个excel poi导出功能贴出来了。

java poi自动sheet分页效果:

以下是service层的处理方法(关键)/**

* 如果达到50000条数据则重新创建工作表的逻辑

*/

@Override

public void exportExcel(List 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

//进入第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();

}

}

ExcelUtils工具类上的两个方法,跟解决此问题没什么关联,只是上面有用到,我就把它贴出来了。/**

* 创建列标题栏样式

* 水平垂直居中

*/

public static HSSFCellStyle createCellStyle(HSSFWorkbook workbook, short fontSize) {

HSSFCellStyle cellStyle = workbook.createCellStyle();

cellStyle.setAlignment(HorizontalAlignment.CENTER);

cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);

HSSFFont font = workbook.createFont();

font.setBold(true);

font.setFontHeightInPoints(fontSize);

cellStyle.setFont(font);

return cellStyle;

}

/**

* 创建新工作表

*/

public static HSSFSheet createWorkbook(HSSFWorkbook workbook,HSSFCellStyle cellStyle,int num) {

HSSFSheet sheet = workbook.createSheet("明细"+num);

sheet.setDefaultColumnWidth(18);

String [] titles = {"工号","姓名","部门","职务","假期类型","开始日期","结束日期","请假小时","创建时间"};

HSSFRow row = sheet.createRow(0);

for(int i=0; i

HSSFCell cell = row.createCell(i);

cell.setCellStyle(cellStyle);

cell.setCellValue(titles[i]);

}

return sheet;

}

Controller层传给service层一个list集合和outputstream输出流。//导出假期明细列表

@RequiresPermissions("approval:holiday:detail:view")

@RequestMapping("/holidaydetail/excelexport")

public void exportExcel(HolidayItemForm form,HttpServletRequest request,HttpServletResponse response){

Map paramMap = new HashMap<>();

try {

paramMap.put("companyId", form.getCompanyId());

paramMap.put("deployId", form.getDeployId());

paramMap.put("userId", form.getUserId());

//从数据库查找需要的信息集合

List formList = itemService.findPageByParam(paramMap);

String currentTime = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());

response.setContentType("application/vnd.ms-excel");

//解决导出文件IE和其他浏览器中文名乱码问题

String filename = null;

if(request.getHeader("User-Agent").indexOf("Mozilla") != -1){

filename = URLEncoder.encode("假期明细"+currentTime+".xls", "UTF-8");

}else{

filename = new String(("假期明细"+currentTime+".xls").getBytes(),"ISO8859-1");

}

response.setHeader("Content-Disposition", "attachment;filename=" + filename);

ServletOutputStream outputStream = response.getOutputStream();

//将上面查到的集合传给service层处理

itemService.exportExcel(formList,outputStream);

if(outputStream != null){

outputStream.close();

}

} catch (Exception e) {

e.printStackTrace();

}

}

来源网站:太平洋学习网,转载请注明出处:http://www.tpyyes.com/a/javaweb/32.html

android poi导出excel,解决java poi导出excel2003不能超过65536行的问题相关推荐

  1. SQLSERVER导入excel表格时,表中数据超过65536行

    SQLSERVER导入excel表格时,表中数据超过65536行时,可将表格转为CSV文件,导入时在高级选项中将字段属性DataType改为文本流[DA_TXT]

  2. 解决java poi导出excel2003不能超过65536行的问题

    java poi在导出数据到excel2003工作表中时一个工作表只能存储65536行数据,如果超过这个数据就会失败,excel2007并没有这个问题,但是为了兼容性我们通常都是导出到2003版本上的 ...

  3. java 导出excel教程,[Java教程]导出大量数据到Excel的一种方式

    [Java教程]导出大量数据到Excel的一种方式 0 2012-07-09 17:00:11 在Java Web开发中,经常需要导出大量的数据到Excel,使用POI.JXL直接生成Excel,很容 ...

  4. java导出excel限制大小_解决java poi导出excel2003不能超过65536行的问题

    /*** 如果达到50000条数据则重新创建工作表的逻辑*/@Overridepublic void exportExcel(ListformList, ServletOutputStream out ...

  5. java poi 导出excel不能超过65536行

    java poi 导出excel不能超过65536行 报这个异常 Exception in thread "main" java.lang.IllegalArgumentExcep ...

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

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

  7. 使用poi实现Excel的数据分页导出(很全),线上项目可用

    使用poi实现Excel的数据分页导出 第一步,所需jar包 pom.xml引入poi的maven依赖 第二步,创建所需工具类 创建自定义注解类,控制需要导出的标题和字段 创建核心工具类 创建抛出异常 ...

  8. 项目总结23:POI生成Excel文件并浏览器导出

    项目总结23:POI生成Excel文件并浏览器导出 具体的逻辑可以参考Controller层的注释 代码1-前端html <button onclick="downLoad()&quo ...

  9. 解决 Java poi 3.8 等版本 操作 word 插入 图片 不成功的问题

    解决 Java poi 3.8等版本操作word插入图片不成功的问题 问题: 最近有一个需求是将Excel中的数据转换到word中,其中包括了文字和图片, 在使用 poi 3.8 向word中写入图片 ...

  10. npoi的mvc怎么ajax导出,asp.net mvc利用NPOI导入导出Excel解决方法

    asp.net mvc利用NPOI导入导出Excel 导出Excel 2003没有问题,导出Excel2007老是出现无法访问已关闭的流,请帮忙解决,或是哪位有mvc导入导出excel的工具类能提供, ...

最新文章

  1. [置顶] 程序员的奋斗史(十五)——谈性格
  2. 微服务部署:蓝绿部署、滚动部署、灰度发布、金丝雀发布
  3. Jenkins 学习总结(8)—— Jenkins X 入门实践
  4. [BZOJ4756]Promotion Counting
  5. python爬虫实例100例-Python爬虫 实例
  6. Barh函数--Matplotlib
  7. AD ---- 活动目录的日常管理操作(3)
  8. 三菱plc编程软件怎么用c语言,各种三菱PLC编程软件的用途介绍
  9. NOIP2013普及组复赛第一题《计数问题》CA代码
  10. 超好用的录屏软件 captura
  11. ogg格式怎么转mp3格式?
  12. UE4 蓝图事件调度器Event Dispatcher
  13. python调用IP摄像头
  14. Utility.java的使用方法及家庭记账程序的制作
  15. js键盘监听事件及键盘键码对照表
  16. Sharding-Jdbc分库分表集成Mybatis-Plus+多数据源管理
  17. vue i18n 多语言文本指定位置动态改变, 实现占位替换
  18. 呕心沥血总结的Python自动化测试面试题
  19. 利用 Python 分析 MovieLens 1M 数据集
  20. 最优化理论与方法-第二讲-凸集

热门文章

  1. 《JAVA并发编程实战》,分享PDF高清版
  2. oozie ErrorCode含义
  3. AMPL—快速了解,秒懂它。
  4. JS无限弹窗代码实现
  5. Python的基础编程
  6. springboot+Vue在线考试系统
  7. c语言 关键字符,c语言关键字有哪些 c语言关键字解释
  8. Java基本数据类型自动转换
  9. vmlinuz文件解压方法
  10. php 如何去除说有空格,php怎么去除所有空格