使用POI导出大批量数据到Excel操作步骤: 第一步: 你的自己准备一个大批量的数据 最好能超过65536条以上 第二部: 开始编写代码,查询所有的数据,将结果集出传递给导出的工具类进行导出 使用POI导出大批量数据到Excel操作步骤: 第一步: 你的自己准备一个大批量的数据 最好能超过65536条以上 分享一个SQL文件 链接:https://pan.baidu.com/s/13sL7hATEWUTZCqrUHAbzJA 第二部: 开始编写代码,查询所有的数据,将结果集出传递给导出的工具类进行导出 @RequestMapping("/export") public void exportBigDataToExcel(User user,HttpServletRequest request, HttpServletResponse respose) { // 创建时间格式变量后面要重新格式化日期时间 SimpleDateFormat sdf_1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 设置文件名称 String exportFileName = "用户信息"; // 根据条件获取数据库中的所有数据 List<User> bigDataList= userService.exportBigDataToExcel(user); // 获取数据总行 int totalRowNum = memberIntegralDtoList.size(); try { //创建SXSSFWorkbook对象(excel的文档对象) SXSSFWorkbook wb = new SXSSFWorkbook(); /* 设定单个sheet的最大数据行数 博主选的是2003 提醒: excel单个sheet的最大行 2003版:65536行 256列; 2007版:1048576行 16384列; 2010版:1048576行 16384列; 2013版:1048576行 16384列 */ int maxRowNum = 60000; // 根据查询的数据总条数计算需要多少个sheet 来存储数据 int sheets = totalRowNum % 60000 == 0 ? (totalRowNum / maxRowNum) : (totalRowNum / maxRowNum + 1); // 循环创建sheet 并写入数据 for (int i = 0; i < sheets; i++) { // 创建SheetName SXSSFSheet sheet = wb.createSheet("用户" + i); // 计算单sheet的数据起止范围 int begin = (i - 1) * maxRowNum; int end = maxRowNum * i; // 此处需要进行结束数据范围的比对 当 i=3时数据截止是18W 但我们查询出来的数据是15W 就会异常 所以需要进行比对 end = Math.min(end, totalRowNum); // 设定一个Excel的行数用来进行Excel数据写入换行的 int num = 0; // 最重要的 写入数据到了 for (int j = begin; j < end; j++) { // 定义一个Excel的行对象 SXSSFRow rowContent = null; // 写入表头信息 if (num == 0) { //在sheet里创建第一行,参数为行索引(excel的行),可以是0~60000之间的任何一个 SXSSFRow rowTitle = sheet.createRow(num); //创建单元格并设置单元格内容 rowTitle.createCell(0).setCellValue("用户编号"); rowTitle.createCell(1).setCellValue("用户名称"); rowTitle.createCell(2).setCellValue("用户性别"); rowTitle.createCell(3).setCellValue("用户电话"); rowTitle.createCell(4).setCellValue("用户身份证"); rowTitle.createCell(5).setCellValue("家庭住址"); rowTitle.createCell(6).setCellValue("用户昵称"); rowTitle.createCell(7).setCellValue("用户状态"); } rowContent = sheet.createRow(++num); //在sheet里创建第三行 rowContent.createCell(0).setCellValue(bigDataList.get(j).getUserId() == null ? "未知" : bigDataList.get(j).getUserId()); rowContent.createCell(1).setCellValue(bigDataList.get(j).getUserName() == null ? "未知" : bigDataList.get(j).getUserName()); rowContent.createCell(2).setCellValue(bigDataList.get(j).getUserSex() == null ? "未知" : bigDataList.get(j).getUserSex()); rowContent.createCell(3).setCellValue(bigDataList.get(j).getUserPhone() == null ? "未知" : bigDataList.get(j).getUserPhone()); rowContent.createCell(4).setCellValue(bigDataList.get(j).getUserCard() == null ? "未知" : bigDataList.get(j).getUserCard()); rowContent.createCell(5).setCellValue(bigDataList.get(j).getAddress() == null ? "未知" : bigDataList.get(j).getAddress()); rowContent.createCell(6).setCellValue(bigDataList.get(j).getNickName() == null ? "未知" : bigDataList.get(j).getNickName()); rowContent.createCell(7).setCellValue(bigDataList.get(j).getUserState() == null ? "未知" : bigDataList.get(j).getUserState()); } } //输出Excel文件 OutputStream output = response.getOutputStream(); response.reset(); // 设置输出类型和文件名称 response.setHeader("Content-disposition", "attachment; filename="+exportFileName+".xls"); response.setContentType("application/msexcel"); wb.write(output); output.close(); } catch (Exception e) { e.getMessage(); } logger.info("数据导出完成,共导出:"+totalRowNum+" 条数用户信息") } ———————————————— 版权声明:本文为CSDN博主「刘信晨」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_36481052/article/details/105413145 |
|