阅读本文约需要6分钟 

大家好,我是你们的导师,我每天都会在这里给大家分享一些干货内容(当然了,周末也要允许老师休息一下哈)。上次老师跟大家分享了下MyBatis 几种通用的写法的相关知识,今天跟大家分享SpringBoot实现快速导出Excel的知识。

1 SpringBoot实现快速导出Excel

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

1.引入依赖

<dependency> <groupId>org.apache.poigroupId> <artifactId>poi-ooxmlartifactId> <version>3.17version>dependency>

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<String, Object> 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"); ListString>>> sheets = (List 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(); ListString>> 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(){ ListString>> sheet1 = Arrays.asList( Arrays.asList("1", "11", "111", "1111"), Arrays.asList("2", "22", "222", "2222"), Arrays.asList("3", "33", "333", "3333") ); ListString>> sheet2 = Arrays.asList( Arrays.asList("4", "44", "444", "4444"), Arrays.asList("5", "55", "555", "5555"), Arrays.asList("6", "66", "666", "6666") ); ListString>>> sheets = Arrays.asList(sheet1, sheet2); Map<String, Object> map = new HashMap<>(); map.put("ExcelSheetSetting", ExcelSheetSettingEnum.REPORT_TEST2); map.put("data", sheets); ExcelView excelView = new ExcelView(); return new ModelAndView(excelView, map); }}
参考来源:toutiao.com/i6818009760873316875/

今天就分享这么多,于SpringBoot实现快速导出Excel会了多少欢迎在留言区评论,对于有价值的留言,我们都会一一回复的。如果觉得文章对你有一丢丢帮助,请点右下角【在看】,让更多人看到该文章。

excel导出_SpringBoot实现快速导出Excel相关推荐

  1. mysql快速导入导出数据库_mysql快速导出与导入

    前言:目前各种客户端越来越智能,数据库也随之越来越大,如果要做个什么数据库备份,如果数据库较小还好说,数据库随随便便几十个G,光导出就要耗费大量时间,更别说导入,那么有什么办法可以快速导出,导入呢? ...

  2. mysql user导出权限_mysql快速导出user权限

    总是有各种各样的mysql数据库用户权限的导出,在此总结一条命令,快速导出,提高效率. echo select concat(show grants for ,user,@,host, ;') fro ...

  3. ps导出内容快捷键 快速导出png

    PHOTOSHOP常用快捷键大全 PS快速导出为png快捷键是什么啊 ps导出内容快捷键 == ps快速导出png没有快捷键, 可以自己设置. ==

  4. excel查找命令_快速查找Excel功能区命令

    excel查找命令 If you have been using the Ribbon in Excel 2007 or Excel 2010 for a while, you can probabl ...

  5. 如何在ex表格导入php_怎么使用php把表格中的数据导入到excel中,php如何快速导入excel表格数据...

    php怎么导入大量数据的excel php导出数据的Excel: PHP从数据库分多次读取100万行记录,和分将100万入文本文件都没问题 Excel可以支100万行记录,Excel 2003最大支持 ...

  6. 计算机一级常用函数英语翻译,用一个Excel公式实现中英文快速翻译-excel公式

    近日,刷到一条抖音,看到用Excel进行中英文翻译,今天给大家讲解一种实现的方法. 在A列输入中文句子或英文句子,在B列便能得到翻译的结果,如下所示: 在B列只需要输入一个公式,便可以得到结果: 在B ...

  7. php 快速导出csv,php快速导出csv格式数据程序代码

    $exportdata = '规则111,规则222,审222,规222,服2222,规则1,规则2,规则3,匹配字符,设置时间,有效期'."\n"; $date = date(& ...

  8. asp.net导出excel-一行代码实现excel、xml、pdf、word、html、csv等7种格式文件导出功能而且美观-SNF快速开发平台...

    分享: 腾讯微博  新浪微博   搜狐微博   网易微博  腾讯朋友  百度贴吧  豆瓣   QQ好友  人人网 作者:王春天  原文地址:http://www.cnblogs.com/spring_ ...

  9. vb用数组方式快速导出MSFlexGrid表格数据到Excel表格中

    本来从MSFlexGrid或MSHFlexGrid导出数据到Excel中,是一个非常简单的问题,但论坛里还是经常有人问如何导出,有的虽然知道用单元格赋值方式循环导出,但速度太慢,因此写了一个通用的数据 ...

最新文章

  1. Codeforces Round #744 (Div. 3)【A-E1】
  2. nssl1193-地主【dp】
  3. 趣话题:git三部曲(一)-bug之争,到底谁才是该背锅的那个人?
  4. python的坐标代码_基于Python的地图坐标服务接口调用代码实例
  5. 回溯算法 思路清晰,通俗易懂!!!!!!!
  6. cython加密代码python_python通过cython加密代码
  7. 再见虚拟机!在Win10中使用Linux版本的R和Python
  8. 物联网之感知-分布式光纤传感-应用前景分析
  9. android风格ppt模板下载,PPT模板大全app下载
  10. 边打游戏边学编程,是一种怎样的体验?
  11. JDK 9-17 新特性介绍
  12. html里如何打出五角星,html5中怎么做五角星
  13. iphone4卡贴机(有锁版)解决通话长途助理以及号码不显示的解决办法
  14. 99.99%人都不知道的“##“里用法
  15. 苹果xr电池容量_2019销量最高的苹果手机,不是iPhone11,更不是iPhone8
  16. FFMpeg杂音问题解决方案
  17. 十进制转二进制(C语言)
  18. css如何制作横幅,程序员使用CSS3的创建网站横幅
  19. 具象业务需求再抽象分解——系统设计
  20. 计算机应用基础实训报告,计算机应用基础教学小结

热门文章

  1. 操作系统04进程同步与通信
  2. 语音对话系统的设计要点与多轮对话的重要性
  3. Citrix、Microsoft、VMware虚拟桌面之网页接口登录对比
  4. Mac下,如何把项目托管到Github上(Github Desktop的使用)
  5. 极乐科技CEO应邀出席2017微信小程序生态课
  6. Jenkins持续集成——用户管理
  7. mysql日志(介绍 路径修改 备份)
  8. 使用了BeanUtils的简单操作
  9. KeyMob:为国内应用开发者管理的广告聚合平台
  10. Android listview addHeaderView 和 addFooterView 详解