工作中经常遇到导出Ecxel功能,这里就给出完整示例代码,可以直接使用。

1.引入依赖

org.apache.poi poi-ooxml 3.17

2. ExcelSheetSettingEnum

定义Excel的一些配置信息

public enum ExcelSheetSettingEnum { REPORT_TEST("report_test", "Excel文件名称", new String[]{"Sheet名称1", "Sheet名称2"}, new String[]{"标题1", "标题2"}, new String[][]{ {"字段名称A", "字段名称B", "字段名称C", "字段名称D"}, {"字段名称A", "字段名称B", "字段名称C", "字段名称D"} }), REPORT_TEST2("report_test2", "Excel文件名称", new String[]{"标题1", "标题2"}), REPORT_TEST3("report_test3", "Excel文件名称") ; ExcelSheetSettingEnum(String code, String filename) { this.code = code; this.filename = filename; } ExcelSheetSettingEnum(String code, String filename, String[] titles) { this.code = code; this.filename = filename; this.titles = titles; } ExcelSheetSettingEnum(String code, String filename, String[] sheetnames, String[] titles, String[][] headers) { this.code = code; this.filename = filename; this.sheetnames = sheetnames; this.titles = titles; this.headers = headers; } /** 代码标识(必选) */ private String code; /** 代码标识(必选) */ private String filename; /** Sheet名称(可选) */ private String[] sheetnames; /** Sheet标题(可选) */ private String[] titles; /** 表头名称(可选) */ private String[][] headers; // Getter & Setter}

3. ExcelView

定义Excel视图,继承自AbstractXlsxView或者AbstractXlsView, 需要实现一个abstract方法buildExcelDocument用于创建Sheet,构造Excel数据。

继承关系如下:

/** * Excel视图 * * 支持多个Sheet, Sheet名称、标题和表头不是必须的 * AbstractPdfView和AbstractXlsxView原理大致相同 *  * @author mengday zhang */public class ExcelView extends AbstractXlsxView { @Override protected void buildExcelDocument(Map map, Workbook workbook, HttpServletRequest request, HttpServletResponse response) throws Exception { ExcelSheetSettingEnum setting = (ExcelSheetSettingEnum) map.get("ExcelSheetSetting"); // 设置文件名称 String filename = setting.getFilename(); filename = new String(filename.getBytes("UTF-8"),"ISO8859-1"); response.setHeader(HttpHeaders.CONTENT_DISPOSITION,"attachment;filename=" + filename + ".xlsx"); List>> sheets = (List>>) map.get("data"); for (int i = 0; i < sheets.size(); i++) { // 创建sheet String[] sheetNames = setting.getSheetnames(); String sheetName = "Sheet" + (i + 1); if (sheetNames != null && sheetNames.length > 0) { sheetName = sheetNames[i]; } Sheet sheet = workbook.createSheet(sheetName); // 如果标题不为空的话,将表格的第一行作为标题行,并合并第一行的N个单元格 int index = 0; String[] titles = setting.getTitles(); String[][] headerss = setting.getHeaders(); List> rowsForTable = sheets.get(i); if (titles != null && titles.length > 0) { // 合并标题单元格 下标从0开始 起始行号,终止行号, 起始列号,终止列号 CellRangeAddress region = new CellRangeAddress(0, 0, 0, rowsForTable.get(0).size() - 1); sheet.addMergedRegion(region); Row titleRow = sheet.createRow(index++); Cell titleCell = titleRow.createCell(0); CellStyle cellStyle = workbook.createCellStyle(); cellStyle.setAlignment(HorizontalAlignment.CENTER); Font font = workbook.createFont(); font.setFontName("黑体"); font.setBold(true); font.setFontHeightInPoints((short) 15); cellStyle.setFont(font); titleCell.setCellStyle(cellStyle); titleCell.setCellValue(titles[i]); } // 创建表头行 if (headerss != null && headerss.length > 0) { Row headerRow = sheet.createRow(index++); String[] headers = headerss[i]; for(int j = 0; j < headers.length; j++) { headerRow.createCell(j).setCellValue(headers[j]); } } // 创建数据行 AtomicInteger rowIndex = new AtomicInteger(index); rowsForTable.forEach(rowList -> { Row row = sheet.createRow(rowIndex.getAndIncrement()); AtomicInteger x = new AtomicInteger(); rowList.forEach(cell -> row.createCell(x.getAndIncrement()).setCellValue(cell) ); }); } }}

4.controller

mvc方法中方法的返回值是ModelAndView, 当代码执行new ModelAndView(excelView, map)时会执行ExcelView#buildExcelDocument的方法

@RestController@RequestMapping("/excel")public class ExcelController { @RequestMapping("/export") public ModelAndView export(){ List> sheet1 = Arrays.asList( Arrays.asList("1", "11", "111", "1111"), Arrays.asList("2", "22", "222", "2222"), Arrays.asList("3", "33", "333", "3333") ); List> sheet2 = Arrays.asList( Arrays.asList("4", "44", "444", "4444"), Arrays.asList("5", "55", "555", "5555"), Arrays.asList("6", "66", "666", "6666") ); List>> sheets = Arrays.asList(sheet1, sheet2); Map map = new HashMap<>(); map.put("ExcelSheetSetting", ExcelSheetSettingEnum.REPORT_TEST2); map.put("data", sheets); ExcelView excelView = new ExcelView(); return new ModelAndView(excelView, map); }} 

springboot导出excel_在SpringBoot中如何在一分钟内实现快速导出Excel相关推荐

  1. java datagrid导出excel_从datagridview中导出数据到excel

    第一种办法:直接在button的Click事件中写代码进行导出:private void button6_Click(object sender, EventArgs e) { SaveFileDia ...

  2. exp导出excel oracle_如何从Oracle快速导出数据到Excel

    [摘要] 在生产系统使用过程中,常常会有从数据库中导出数据的需求.支持多种导出方式,例如使用spool.utl_file等内置方法导出,利用plsql developer.等第三方工具等. [正文] ...

  3. xd导出标注html,Adobe XD免费交付神器 标记狮MarkLion 一键导出离线标注网页

    开发是否能高质.高效的将设计稿变为最终产品,很大程度取决于设计师的标注工作是否做的细致.使用Adobe XD进行设计,它自带的功能就能一键生成标注链接,常用的蓝湖.PxCook.摹客.Zeplin也都 ...

  4. adobe xd导出标注html,Adobe XD免费交付神器 标记狮MarkLion 一键导出离线标注网页

    开发是否能高质.高效的将设计稿变为最终产品,很大程度取决于设计师的标注工作是否做的细致.使用Adobe XD进行设计,它自带的功能就能一键生成标注链接,常用的蓝湖.PxCook.摹客.Zeplin也都 ...

  5. SpringBoot图文教程9—SpringBoot 导入导出 Excel 「Apache Poi」(亲测)

    有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 来源:Springboot使用POI实现导出Excel文件示例的搜索结果-阿里云开 ...

  6. SpringBoot图文教程9—SpringBoot 导入导出 Excel 「Apache Poi」

    有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1「概念+ ...

  7. spring-boot框架dubbo在controlle中r注解@Reference注入service,但是调用方法时候,service报null空指针异常

    spring-boot框架dubbo在controlle中r注解@Reference注入service,但是调用方法时候,service报null空指针异常 参考文章: (1)spring-boot框 ...

  8. SpringBoot学习笔记(4)----SpringBoot中freemarker、thymeleaf的使用

    1. freemarker引擎的使用 如果你使用的是idea或者eclipse中安装了sts插件,那么在新建项目时就可以直接指定试图模板 如图: 勾选freeMarker,此时springboot项目 ...

  9. SpringBoot学习笔记(9)----SpringBoot中使用关系型数据库以及事务处理

    在实际的运用开发中,跟数据库之间的交互是必不可少的,SpringBoot也提供了两种跟数据库交互的方式. 1. 使用JdbcTemplate 在SpringBoot中提供了JdbcTemplate模板 ...

  10. ELK日志分析系统搭建以及springboot日志发送到ELK中

    前言 安装之前服务器必须装了Java环境,我们这里安装的是7.7.0版本,而且7.7.0版本还必须要求jdk11以上.,最好跟我安装的路径保持一致/usr/local/elk,千万不要在root 安装 ...

最新文章

  1. TSQL语句中的Like用法
  2. 听说你想去大厂看学妹,带你看看字节跳动后端开发面试长啥样?
  3. 模板设计模式,简单Java代码实现
  4. 目标检测系列(七)——CornerNet:detecting objects as paired keypoints
  5. java将图片写入pdf
  6. 阿里云构建Jenkins服务
  7. [Java]toString的用法
  8. Yandex安装第三方crx插件的方法
  9. python中的MRO
  10. 批量tracert脚本
  11. 龙芯3U板卡学习资料第706篇: GEC-2K1000 龙芯3U板卡
  12. 20P27 Premiere预设70种超酷电影级白天黑夜调色预设模板
  13. Kinect与KinectFusion重建
  14. 【C语言】消失的数字
  15. GPS坐标偏移与转换
  16. 工作日志之Sonar扫描错误处理-Sonar扫描结果入库 java.sql.BatchUpdateException: Incorrect string value: '\xF3\xA3\xAC\xB
  17. 利用三星S3C6410源码实现同时压缩视频和图片
  18. 关于OC语言基础的总结
  19. sql server 子查询的两种方式
  20. timewrap 算法

热门文章

  1. 证券公司财务帐单分析报告自动生成系统
  2. Codeforces Round #155 (Div. 2) C YY题目
  3. ATL 线程触发事件解决方案
  4. 公司周刊-非常6+1—营销平台小组
  5. UL/OL与LI 标签结合CSS的运用
  6. 第十三章 确定性策略梯度(Deterministic Policy Gradient Algorithms,DPG)-强化学习理论学习与代码实现(强化学习导论第二版)
  7. 机器学习前沿热点--Deep Learning
  8. 智能优化算法:晶体结构算法-附代码
  9. dataframe 绘图——按照每列出一个图(df.plot)
  10. numpy的广播机制