excel导出_SpringBoot实现快速导出Excel

d20508be9e48da04309b33cdfe115e70.pngf86ef807d219aa8e2f6a8719d52cb22c.gif

 阅读本文约需要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数据。

继承关系如下:

9a5cf018059d29725db7a10ef4bb269f.png

/** * 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) ); }); } }}

d20508be9e48da04309b33cdfe115e70.png

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会了多少欢迎在留言区评论,对于有价值的留言,我们都会一一回复的。如果觉得文章对你有一丢丢帮助,请点右下角【在看】,让更多人看到该文章。

d20508be9e48da04309b33cdfe115e70.png

    dbfd032f1f4267958f66cdaaf5ea20e0.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/394601.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

fifo算法_缓存算法FIFO、LFU、LRU

阅读文本大概需要3分钟。0x01&#xff1a;FIFO算法FIFO(First in First out)&#xff0c;先进先出。其实在操作系统的设计理念中很多地方都利用到了先进先出的思想&#xff0c;比如作业调度(先来先服务)&#xff0c;为什么这个原则在很多地方都会用到呢&#xff1f;因为这个原则…

怎样设置计算机远程桌面,电脑如何设置远程连接,手把手教你如何远程

说起远程桌面很多用户都认为是从WIN2000 SERVER才开始引入的&#xff0c;实际上我们可以在WIN98甚至是DOS中看到他的身影。远程桌面采用的是一种类似TELNET的技术&#xff0c;他是从TELNET协议发展而来的。那么如何设置自动开机&#xff0c;下面&#xff0c;我们就来看看如何设…

inputstream转fileinputstream对象_FileInputStream类:文件字节输入流

API ----IO ----字节输入输出流练习 java.lang.Object 继承者 java.io.InputStream 继承者 java.io.FileInputStreampublic FileInputStream类速查速记&#xff1a;直接包装File用于从记事本中读数据 in是针对java来说的&#xff0c;从记事本读入到java* 构造方法&#xff1a;…

IBM将推NVMe存储解决方案

先前&#xff0c;IBM曾对外宣称将开发新的NVMe解决方案&#xff0c;并推动行业参与者进一步探索新协议&#xff0c;以支持更快的数据传输。周日&#xff0c;IBM表示新的语言协议——NVMe&#xff08;非易失性存储器&#xff09;正在逐步取代SAS和SATA等旧有的固态硬盘存储标准。…

BZOJ 1113: [Poi2008]海报PLA

1113: [Poi2008]海报PLA Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1025 Solved: 679[Submit][Status][Discuss]Description N个矩形,排成一排. 现在希望用尽量少的矩形海报Cover住它们. Input 第一行给出数字N,代表有N个矩形.N在[1,250000] 下面N行,每行给出矩形的长…

opengl三维图形图形颜色_【图形学基础】基本概念

右手坐标系。类似OpenGL遵循的右手坐标系&#xff1a;首先它是三维的笛卡尔坐标系&#xff1a;原点在屏幕正中&#xff0c;x轴从屏幕左向右&#xff0c;最左是-1&#xff0c;最右是1&#xff1b;y轴从屏幕下向上&#xff0c;最下是-1&#xff0c;最上是1&#xff1b;z轴从屏幕里…

xp职称计算机考试题库,2015年职称计算机考试XP题库.doc

2015年职称计算机考试XP题库.doc (7页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;9.90 积分&#xfeff;2015年职称计算机考试XP题库职称计算机考试考点精编&#xff1a;工具栏的设置与操作XP中将…

第一个python爬虫_Python爬虫01——第一个小爬虫

Python小爬虫——贴吧图片的爬取 在对Python有了一定的基础学习后&#xff0c;进行贴吧图片抓取小程序的编写。 目标&#xff1a; 首先肯定要实现图片抓取这个基本功能 然后实现对用户所给的链接进行抓取 最后要有一定的交互&#xff0c;程序不能太傻吧 一、页面获取 要让pytho…

Mac下,如何把项目托管到Github上(Github Desktop的使用)

在上一篇中&#xff0c;详细讲解了使用X-code和终端配合上传代码的方法&#xff0c;这种方法比较传统&#xff0c;中间会有坑&#xff0c;英文看起来也费劲&#xff0c;不过Github官方提供了一个Mac版的客户端&#xff0c;如下图&#xff1a; 附上下载链接&#xff1a;传送门 下…

大数据实验报告总结体会_建设大数据中台架构思考与总结

简介本文介绍完善的大数据中台架构了解这些架构里每个部分的位置&#xff0c;功能和含义及背后原理及应用场景。帮助技术与产品经理对大数据技术体系有个全面的了解。数据中台定义&#xff1a;集成离线数仓与实时数仓&#xff0c;并以多数据源统一整合采集到kafka,再通过kafka进…

半数集问题

给定一个自然数n&#xff0c;由n开始可以依次产生半数集set(n)中的数如下&#xff1a; (1) n ∈set(n)&#xff1b; (2) 在n的左边加上一个自然数&#xff0c;但该自然数不能超过最近添加的数的一半&#xff1b; (3) 按此规则进行处理&#xff0c;直到不能再添加自然数为止。…

maven的profile详解

详细内容请见&#xff1a;https://www.cnblogs.com/wxgblogs/p/6696229.html Profile能让你为一个特殊的环境自定义一个特殊的构建&#xff1b;profile使得不同环境间构建的可移植性成为可能。Maven中的profile是一组可选的配置&#xff0c;可以用来设置或者覆盖配置默认值。有…

夏至未至计算机版音乐,夏至未至有哪些插曲背景音乐 夏至未至所有bgm歌曲汇总...

夏至未至有哪些插曲背景音乐 夏至未至所有bgm歌曲汇总夏至未至第一集插曲是什么?夏至未至插曲曝光。夏至未至是由陈学冬、郑爽、白敬亭等联袂主演的青春偶像剧,昨晚已经开播了&#xff0c;那么第一集的插曲是什么呢?和小编一起去看看吧!夏至未至第一集插曲《那些花儿》那片笑…

nmap常用参数详解

nmap常用参数详解 作者&#xff1a;尹正杰 版权声明&#xff1a;原创作品&#xff0c;谢绝转载&#xff01;否则将追究法律责任。 借用英雄联盟的一个英雄赵信的一句话&#xff1a;“即使敌众我寡,末将亦能万军丛中取敌将首级!”。三国关羽&#xff0c;万军丛中斩了颜良&#x…

模板变量,过滤器和静态文件引用

模板变量&#xff0c;过滤器和静态文件引用 模板路径 Djiango先到settings里面找templates下的DIRS查看是否有路径&#xff0c;也是从上往下依次寻找&#xff0c;找到就返回。如果DIRS没有&#xff0c;就到APP_DIRS里面寻找。但是APP要先在INSTALLED_APPS里面进行注册然后根据I…

antd option宽度自适应_WordPress文章中添加自适应宽度的表格——墨涩网

WordPress文章中添加自适应表格&#xff0c;前面写文章的时候需要用到表格来表达阵列信息&#xff0c;但是在WordPress添加表格不想是在office中那样方便&#xff0c;需要借助插件或者代码才可以实现&#xff0c;今天分享一个不需要安装插件纯代码实现WordPress文章中添加自适应…

OO第一单元总结

OO第一单元总结 第一次作业总结 这是我第一次接触Java和面向对象思想&#xff0c;最一开始&#xff0c;我建立了简单的类和对象的概念&#xff0c;多亏了第一次作业难度和复杂度较低&#xff0c;我才没有崩掉hhh。 第一次作业我只分了三个类&#xff0c;一个main&#xff0c;一…

接口开发指的是什么_企业在什么情况下要选择定制开发软件

软件定制开发是指软件开发商依据我们的需求停止量身定制的开发&#xff0c;软件定制开发相关于单纯产品的施行周期长、本钱高、风险大。假如根据定制开发的工作量或水平来分&#xff0c;我们能够分为完整定制开发和局部定制开发&#xff0c;完整定制开发是指软件开发公司依据我…

计算机没有搜索筛选功能,EXCEL中筛选工具怎么没有搜索功能

EXCEL中筛选工具怎么没有搜索功能卡饭网本站整理2018-04-01excel是一款数据处理工具&#xff0c;可以在众多的数据中找到想要的经过处理之后的数据&#xff0c;而最直接方便的功能就是筛选。请阅读下文&#xff0c;了解如何对数据进行筛选。如下图所示的学生成绩中&#xff0c;…

51nod 1851 俄罗斯方块(思维题)

分析&#xff1a;假设n>m&#xff0c;m为1,2单独讨论下&#xff0c;否则可以用第二行第一个把所有黑块搞到2x2的格子里&#xff0c;不断用凸出来的那个角一列一列把黑的变白就行了。然后只要黑色有偶数块都可以构造出来。复杂度O(nm) #include <iostream> #include &l…