springboot-实现csv文件导出功能
excle文件导出,会遇到一个65535行限制的问题,就是导出的数据行数超过65535行就会导出失败,这个是excle本生的限制,这种情况下通常将导出的格式改成csv这样就可以跨过这个限制,同时生成的csv文件用office打开浏览效果与打开excle没有区别可以完美替代。
1、依赖(比导出excle还少两个依赖)
<!--csv导出依赖 --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.1</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.1</version> </dependency>
2、代码
@PostMapping("/csvExport") @ResponseBody public void csvExport(HttpServletResponse response) { //表头 List<String> headerList = Arrays.asList("编号", "姓名"); // 创建工作簿 Workbook workbook = new XSSFWorkbook(); // 创建工作表 Sheet sheet = workbook.createSheet("Sheet1"); // 创建表头行 Row headerRow = sheet.createRow(0); // 写入表头 for (int i = 0; i < headerList.size(); i++) { Cell cell = headerRow.createCell(i); cell.setCellValue(headerList.get(i)); } // 组织数据 List<List<Object>> data = new ArrayList<>(); List list1 = Arrays.asList("001","张三"); List list2 = Arrays.asList("002","李四"); List list3 = Arrays.asList("003","王五"); List list4 = Arrays.asList("004","王五"); data.add(list1); data.add(list2); data.add(list3); data.add(list4); // 写入数据 for (int i = 0; i < data.size(); i++) { Row row = sheet.createRow(i + 1); List<Object> rowData = data.get(i); for (int j = 0; j < rowData.size(); j++) { Cell cell = row.createCell(j); cell.setCellValue(rowData.get(j).toString()); } } //response为HttpServeltReponse对象 response.setContentType(MediaType.TEXT_PLAIN_VALUE + ";charset=utf-8"); response.setHeader("Content-Disposition", "attachment;filename=1.csv"); try { workbook.write(response.getOutputStream()); } catch (IOException e) { e.printStackTrace(); } finally { // 关闭工作簿,释放内存 try { workbook.close(); } catch (IOException e) { e.printStackTrace(); } } }
3、postman调用
4、导出效果
源码获取方式(免费):
(1)登录-注册:http://resources.kittytiger.cn/
(2)签到获取积分
(3)搜索:springboot-csvExport csv文件导出