1.pom.xml配置依赖包

<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.9</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.9</version>
</dependency>

2.excel导出工具类

import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.Map;import javax.servlet.http.HttpServletResponse;import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFDataFormat;public class ExportExcel {/*** 导出excel* * @param response*            HttpServletResponse* @param list*            导出数据集合* @param lables           *            表头数组* @param fields*            key数组* @param title            *            文件名*/public static void export(HttpServletResponse response,List<Map<String, Object>> list,String[] lables,String[] fields,String title) {            response.setContentType("application/octet-stream");//告诉浏览器输出内容为流String filename = "";try {filename = new String(title.getBytes("UTF-8"), "ISO_8859_1");} catch (UnsupportedEncodingException e1) {e1.printStackTrace();}response.setHeader("Content-Disposition","attachment;filename=" + filename);OutputStream os = null;SXSSFWorkbook sxssfWorkbook = null;try {        // 获取SXSSFWorkbooksxssfWorkbook = new SXSSFWorkbook();Sheet sheet = sxssfWorkbook.createSheet("Sheet1");// 冻结第一行sheet.createFreezePane(0, 1);  // 创建第一行,作为header表头Row header = sheet.createRow(0);// 循环创建header单元格for (int cellnum = 0; cellnum < lables.length; cellnum++) {Cell cell = header.createCell(cellnum);//cell.setCellStyle(getAndSetXSSFCellStyleHeader(sxssfWorkbook));//设置表头单元格样式,根据需要设置cell.setCellValue(lables[cellnum]);//设置每列固定宽度sheet.setColumnWidth(cellnum, 20 * 256);}// 遍历创建行,导出数据for (int rownum = 1; rownum <= list.size(); rownum++) {Row row = sheet.createRow(rownum);Map<String, Object> map = list.get(rownum-1);// 循环创建单元格for (int cellnum = 0; cellnum < fields.length; cellnum++) {Cell cell = row.createCell(cellnum);//cell.setCellStyle(getAndSetXSSFCellStyleOne(sxssfWorkbook));//设置数据行单元格样式,根据需要设置cell.setCellValue(map.get(fields[cellnum]) == null ? "" : map.get(fields[cellnum]).toString());}}//自定义各列宽度//setSheet(sheet);os = response.getOutputStream(); sxssfWorkbook.write(os);} catch (Exception e) {e.printStackTrace();} finally {try {if(sxssfWorkbook != null) {//处理SXSSFWorkbook导出excel时,产生的临时文件sxssfWorkbook.dispose();}if(os != null) {os.close();}} catch (IOException e) {e.printStackTrace();}}}/*** 导出excel带标题* * @param response*            HttpServletResponse* @param list*            导出数据集合* @param lables           *            表头数组* @param fields*            key数组* @param title            *            文件名* @param headTitle            *            文件标题*/public static void titleExport(HttpServletResponse response,List<Map<String, Object>> list,String[] lables,String[] fields,String title,String headTitle) {             response.setContentType("application/octet-stream");//告诉浏览器输出内容为流String filename = "";try {filename = new String(title.getBytes("UTF-8"), "ISO_8859_1");} catch (UnsupportedEncodingException e1) {e1.printStackTrace();}response.setHeader("Content-Disposition","attachment;filename=" + filename);OutputStream os = null;SXSSFWorkbook sxssfWorkbook = null;try {        // 获取SXSSFWorkbooksxssfWorkbook = new SXSSFWorkbook();Sheet sheet = sxssfWorkbook.createSheet("Sheet1");// 创建第一行,作为标题Row headline = sheet.createRow(0);Cell c = headline.createCell(0);//设置居中XSSFCellStyle xssfCellStyle = (XSSFCellStyle) sxssfWorkbook.createCellStyle();xssfCellStyle.setAlignment(HorizontalAlignment.CENTER);c.setCellStyle(xssfCellStyle);c.setCellValue(headTitle);sheet.addMergedRegion(new CellRangeAddress(0,0,0,lables.length-1));//合并单元格(起始行号,终止行号,起始列号,终止列号)// 冻结第二行sheet.createFreezePane(0, 2);  // 创建第二行,作为header表头Row header = sheet.createRow(1);// 循环创建header单元格for (int cellnum = 0; cellnum < lables.length; cellnum++) {Cell cell = header.createCell(cellnum);//cell.setCellStyle(getAndSetXSSFCellStyleHeader(sxssfWorkbook));//设置表头单元格样式,根据需要设置cell.setCellValue(lables[cellnum]);//设置每列固定宽度sheet.setColumnWidth(cellnum, 10 * 256);}// 遍历创建行,导出数据for (int rownum = 1; rownum <= list.size(); rownum++) {Row row = sheet.createRow(rownum+1);Map<String, Object> map = list.get(rownum-1);// 循环创建单元格for (int cellnum = 0; cellnum < fields.length; cellnum++) {Cell cell = row.createCell(cellnum);//cell.setCellStyle(getAndSetXSSFCellStyleOne(sxssfWorkbook));//设置数据行单元格样式,根据需要设置cell.setCellValue(map.get(fields[cellnum]) == null ? "" : map.get(fields[cellnum]).toString());}}//自定义各列宽度//setSheet(sheet);os = response.getOutputStream(); sxssfWorkbook.write(os);} catch (Exception e) {e.printStackTrace();} finally {try {if(sxssfWorkbook != null) {//处理SXSSFWorkbook导出excel时,产生的临时文件sxssfWorkbook.dispose();}if(os != null) {os.close();}} catch (IOException e) {e.printStackTrace();}}}/*** 导出excel(多个工作薄)* * @param response*            HttpServletResponse* @param datas*            导出数据集合* @param title            *            文件名*/public static void exportSheets(HttpServletResponse response,List<Map<String, Object>> datas,String title) {              response.setContentType("application/octet-stream");//告诉浏览器输出内容为流String filename = "";try {filename = new String(title.getBytes("UTF-8"), "ISO_8859_1");} catch (UnsupportedEncodingException e1) {e1.printStackTrace();}response.setHeader("Content-Disposition","attachment;filename=" + filename);OutputStream os = null;SXSSFWorkbook sxssfWorkbook = null;try {        // 获取SXSSFWorkbooksxssfWorkbook = new SXSSFWorkbook();// 根据集合的数量创建sheetfor(int i=0; i<datas.size(); i++){Sheet sheet = sxssfWorkbook.createSheet("Sheet"+(i+1));// 冻结第一行sheet.createFreezePane(0, 1);  // 创建第一行,作为header表头Row header = sheet.createRow(0);// 循环创建header单元格String[] lables = (String[]) datas.get(i).get("lables");String[] fields = (String[]) datas.get(i).get("fields");for (int cellnum = 0; cellnum < lables.length; cellnum++) {Cell cell = header.createCell(cellnum);//cell.setCellStyle(getAndSetXSSFCellStyleHeader(sxssfWorkbook));//设置表头单元格样式,根据需要设置cell.setCellValue(lables[cellnum]);//设置每列固定宽度sheet.setColumnWidth(cellnum, 20 * 256);}// 遍历创建行,导出数据List<Map<String, Object>> list = (List<Map<String, Object>>) datas.get(i).get("list");for (int rownum = 1; rownum <= list.size(); rownum++) {Row row = sheet.createRow(rownum);Map<String, Object> map = list.get(rownum-1);// 循环创建单元格for (int cellnum = 0; cellnum < fields.length; cellnum++) {Cell cell = row.createCell(cellnum);//cell.setCellStyle(getAndSetXSSFCellStyleOne(sxssfWorkbook));//设置数据行单元格样式,根据需要设置cell.setCellValue(map.get(fields[cellnum]) == null ? "" : map.get(fields[cellnum]).toString());}}}os = response.getOutputStream(); sxssfWorkbook.write(os);} catch (Exception e) {e.printStackTrace();} finally {try {if(sxssfWorkbook != null) {//处理SXSSFWorkbook导出excel时,产生的临时文件sxssfWorkbook.dispose();}if(os != null) {os.close();}} catch (IOException e) {e.printStackTrace();}}}/*** 自定义各列宽度(单位为:字符宽度的1/256)*/private static void setSheet(Sheet sheet) {       sheet.setColumnWidth(0, 32 * 256);sheet.setColumnWidth(1, 32 * 256);sheet.setColumnWidth(2, 20 * 256);sheet.setColumnWidth(3, 20 * 256);sheet.setColumnWidth(4, 20 * 256);sheet.setColumnWidth(5, 20 * 256);sheet.setColumnWidth(6, 20 * 256);sheet.setColumnWidth(7, 20 * 256);sheet.setColumnWidth(8, 20 * 256);sheet.setColumnWidth(9, 20 * 256);sheet.setColumnWidth(10, 32 * 256);}/*** 获取并设置header样式*/private static XSSFCellStyle getAndSetXSSFCellStyleHeader(SXSSFWorkbook sxssfWorkbook) {XSSFCellStyle xssfCellStyle = (XSSFCellStyle) sxssfWorkbook.createCellStyle();Font font = sxssfWorkbook.createFont();// 字体大小font.setFontHeightInPoints((short) 14);// 字体粗细font.setBoldweight((short) 20);// 将字体应用到样式上面xssfCellStyle.setFont(font);// 是否自动换行xssfCellStyle.setWrapText(false);// 水平居中xssfCellStyle.setAlignment(HorizontalAlignment.CENTER);// 垂直居中xssfCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);return xssfCellStyle;}/*** 获取并设置样式*/private static XSSFCellStyle getAndSetXSSFCellStyleOne(SXSSFWorkbook sxssfWorkbook) {XSSFCellStyle xssfCellStyle = (XSSFCellStyle) sxssfWorkbook.createCellStyle();XSSFDataFormat format = (XSSFDataFormat)sxssfWorkbook.createDataFormat();// 是否自动换行xssfCellStyle.setWrapText(false);// 水平居中xssfCellStyle.setAlignment(HorizontalAlignment.CENTER);// 垂直居中xssfCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);// 前景颜色xssfCellStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);xssfCellStyle.setFillForegroundColor(IndexedColors.AQUA.getIndex());// 边框xssfCellStyle.setBorderBottom(BorderStyle.THIN);xssfCellStyle.setBorderRight(BorderStyle.THIN);xssfCellStyle.setBorderTop(BorderStyle.THIN);xssfCellStyle.setBorderLeft(BorderStyle.THIN);xssfCellStyle.setBottomBorderColor(IndexedColors.BLACK.getIndex());xssfCellStyle.setRightBorderColor(IndexedColors.BLACK.getIndex());xssfCellStyle.setTopBorderColor(IndexedColors.BLACK.getIndex());xssfCellStyle.setLeftBorderColor(IndexedColors.BLACK.getIndex());// 防止数字过长,excel导出后,显示为科学计数法,如:防止8615192053888被显示为8.61519E+12xssfCellStyle.setDataFormat(format.getFormat("0"));return xssfCellStyle;}
}

3.业务层调用

//导出
@RequestMapping("/export")
public String export(Model model,HttpServletRequest request,HttpServletResponse response) {SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println("导出开始时间:"+format.format(new Date()));List<Map<String, Object>> list = jkconfigDao.exportByRksj();//查询业务数据String[] lables = new String[]{"号码","入库时间"};//表头数组String[] fields = new String[]{"HM","RKSJ"};//查询数据对应的属性数组String title = "测试.xlsx";ExportExcel.export(response, list, lables, fields, title);  System.out.println("导出结束时间:"+format.format(new Date()));return null;
}

Java实现excel大数据量导出相关推荐

  1. java百万级大数据量导出

    java实现百万级大数据量导出 实现方式一 一,分析 excel导出如果数据量过大,会出现两个内存溢出的问题 查绚数据量过大,导致内存溢出(可通过分批查绚解决) 下载的时候大EXCEL转换的输出流内存 ...

  2. Java实现excel大数据量导入

    情景分析: 通常我们通过poi读取excel文件时,若在用户模式下,由于数据量较大.Sheet较多,很容易出现内存溢出的情况 用户模式读取excel的典型代码如下: FileInputStream f ...

  3. java大数据量导出csv文件并压缩

    java大数据量导出csv文件并压缩 java使用POI大数据量导出excel一般会存在以下几个问题: 一次从数据库查询出这么大数据,查询缓慢 查询数据量过大时会内存溢出 解决方案:分页查询数据,比如 ...

  4. 大数据导出excel大小限制_大数据量导出Excel的方案

    测试共同条件: 数据总数为110011条,每条数据条数为19个字段. 电脑配置为:P4 2.67GHz,1G内存. 一.POI.JXL.FastExcel比较 POI.JXL.FastExcel均为j ...

  5. 大数据导出excel大小限制_EXCEL大数据量导出的解决方案

    将web页面上显示的报表导出到excel文件里是一种很常见的需求.润乾报表的类excel模型,支持excel文件数据无失真的导入导出,使用起来非常的方便.然而,当数据量较大的情况下,excel本身的支 ...

  6. 【Apache POI】Excel操作(四):Excel大数据量的写入

    迷茫代表着你身边还有选择,焦虑意味着你手上还有时间. 有目录,不迷路 前言 超量数据 速率比较 原因剖析 超级版本大救星 往期回顾 前言 之前在下面这期Excel操作: [Apache POI]Exc ...

  7. EasyExcel 分Sheet实现大数据量导出

    EasyExcel 分 Sheet 实现大数据量导出 [场景]平台用户导出数据量达 w 级别的数据时界面白屏或按钮无响应. [解决方案]做异步导出,用户触发点击时创建导出消息并开启单独线程处理导出,处 ...

  8. Apache POI和EasyExcel 第三集:Apache POI的Excel大数据量写入(分为03版的xls、07版的xlsx、升级版SXSSF)

    Apache POI和EasyExcel 第三集:Apache POI的Excel大数据量写入(分为03版的xls.07版的xlsx.升级版SXSSF) 一.结果 我的03跑了1.204秒,07跑了5 ...

  9. 读取excel大数据量详解

    需求:导入大数据量excel文件到数据库(测试11MB,40w行数据) 首先说结论:都是大概时间,且其中有两个参数需要调,这里统一下参数大小. 监听器中的缓存list一次性存100000(测试过100 ...

最新文章

  1. 非凡推崇_2015年值得推崇的25位编码者
  2. mysql join order by_MySQL 14 慢查询优化join、order by、group by
  3. 有赞分层自动化测试实践
  4. Linux内核实现中断和中断处理(二)
  5. word List 43
  6. API 层实现语音录制
  7. vue 新建的页面如何访问_Vue.js—实现前后端分离架构中前端页面搭建(四)(完)...
  8. 洛谷 P2167 [SDOI2009]Bill的挑战
  9. Ubuntu使用——9(搜狗输入法安装)
  10. Office word for Mac 如何并排查看两个文档
  11. 【打一局王者荣耀掉星的时间,我制作了一款支持 重力感应 的 3D动态壁纸】
  12. 根据HttpServletRequest获取用户IP地址及判断当前IP是否是内网IP
  13. 穆斯林的葬礼-(爱情,是人类最美好的感情)
  14. 数据挖掘_task2数据探索分析
  15. plt.title 设置标题或标注和图片之间的距离
  16. 思维模型 塔西陀陷阱
  17. thinkphp6控制器
  18. symbian学习转载
  19. openwrt的dns无法解析内网地址的问题解决方案
  20. 富爸爸,穷爸爸读后的一些认知

热门文章

  1. java实验及答案_JAVA实验4-1答案
  2. 上海迪士尼度假区将推出一系列节庆活动和全新“萌聚达菲月”
  3. ajax中英文切换,vue-i18n中英切换插件使用
  4. 关于Win10上Program File和Program File(X86)没有写权限的问题
  5. c语言图像压缩编码,基于C语言的图像压缩算法
  6. HC-SR04超声波模块程序原理和Proteus ISIS仿真
  7. while(n)什么意思?
  8. 1w存银行一年多少利息_我把100万存银行一年利息是多少钱?
  9. uni-app 地图手绘图覆盖方案,类似智慧景区小程序
  10. 一起学Python吧~Python3调用Ansible项目实战