开发工具:eclipse

jar包管理:maven

框架使用:springboot+poi+thymeleaf

1.首先导入pom.xml

<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.16</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.16</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml-schemas -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.16</version>
</dependency>

2.前端查询数据库

展示要导出的列表

3.点击导出通过js提交页面对应的标签值

例如:function export(){

window.location.href = resqURL;

}

注意!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

页面不能通过ajax访问url。 
必须通过页面window.location.href = resqURL;属性来访问

resqURL带参

//前端
<td id="sadd" name="oo">sadd</td>
//js
var oo=$("#sadd").text();
window.location.href = "ha?sadd="+oo;
//后端@RequestMapping("ha")public String ha(Model m,@RequestParam String sadd) {String oosda=sadd;System.out.println(oosda);m.addAttribute("name", "hah");return "hello";}

我在这个地方吃了好大的亏,,,唉

4.后台到controller层接受参数定制表头初始化数据

@RequestMapping("export")public ResponseEntity<byte[]> userExcel() throws Exception {/*所有表头*/Map<String,Map<String,String>> titleMaps=new LinkedHashMap<String,Map<String,String>>();/*所有数据*/Map<String,List<Map>> results=new HashMap<String,List<Map>>();/*每个表格的列标题*/Map<String,String> title=new LinkedHashMap<String, String>();title.put("uid", "Id");title.put("username", "用户名");title.put("password", "密码");//行初始化为空值List<Map> nullRows=new ArrayList<Map>();Map nullMap=new HashMap();nullMap.put("uid", "");nullMap.put("username", "");nullMap.put("password", "");nullRows.add(nullMap);//文件名String filename="用户信息";titleMaps.put(filename, title);//从数据库查询数据List<Map> collentList=userService.userExcel();        results.put(filename, collentList);ByteArrayOutputStream out = new ByteArrayOutputStream();ExcelUtilNew.exportExcelDocument(titleMaps, results,out);System.out.println("我来了");HttpHeaders headers = new HttpHeaders();headers.add("Content-Disposition", "attchement;filename=" + URLEncoder.encode(filename, "utf-8")+".xlsx");return new ResponseEntity<byte[]>(out.toByteArray(), headers, HttpStatus.CREATED);}

3.调用poi工具类导出excel

/*** 导出Excel文档* * @throws FileNotFoundException*/public static void exportExcelDocument(Map<String, String> titleMap, List<Map> result, OutputStream out)throws Exception {Map<String, Map<String, String>> titleMaps = new HashMap<String, Map<String, String>>();titleMaps.put("Sheet1", titleMap);Map<String, List<Map>> results = new HashMap<String, List<Map>>();results.put("Sheet1", result);exportExcelDocument(titleMaps, results, out);}public static void exportExcelDocument(Map<String, Map<String, String>> titleMaps, Map<String, List<Map>> results,OutputStream out) throws Exception {// 声明一个工作薄Workbook workbook = new HSSFWorkbook();for (String s : titleMaps.keySet()) {Map<String, String> titleMap = titleMaps.get(s);List<Map> result = results.get(s);// 生成一个表格Sheet sheet = workbook.createSheet((s == null || "".equals(s)) ? "未命名" : s);// 网格线sheet.setDisplayGridlines(true);// 设置默认表宽sheet.setDefaultColumnWidth(20);// 产生表格标题行Row row = sheet.createRow(0);// 生成一个样式CellStyle titleStyle = workbook.createCellStyle();// 设置这些样式
            titleStyle.setAlignment(CellStyle.ALIGN_CENTER);titleStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);// 生成一个字体Font titleFont = workbook.createFont();titleFont.setFontName("Arial");titleFont.setFontHeightInPoints((short) 12);titleFont.setBoldweight(Font.BOLDWEIGHT_BOLD);// 把字体应用到当前的样式
            titleStyle.setFont(titleFont);int count = 0;for (String key : titleMap.keySet()) {Cell cell = row.createCell(count);cell.setCellStyle(titleStyle);cell.setCellValue(titleMap.get(key));count++;}if (result != null) {for (int i = 0, iSize = result.size(); i < iSize; i++) {Map<String, Object> resultMap = result.get(i);// 生成一个字体Font contentFont = workbook.createFont();contentFont.setFontName("宋体");contentFont.setFontHeightInPoints((short) 10);contentFont.setBoldweight(Font.BOLDWEIGHT_NORMAL);// 生成一个样式CellStyle contentStyle = workbook.createCellStyle();contentStyle.setAlignment(CellStyle.ALIGN_LEFT);contentStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);row = sheet.createRow(i + 1);// 把字体添加到样式中去
                    contentStyle.setFont(contentFont);count = 0;for (String key : titleMap.keySet()) {Cell cell = row.createCell(count);cell.setCellStyle(contentStyle);cell.setCellValue(String.valueOf(resultMap.get(key)));count++;}}}}workbook.write(out);out.flush();out.close();}

4.结束总结:

通过springmvc封装的下载实现ResponseEntity将字符串输出成文件下载。

ResponseEntity<byte[]> entity = new ResponseEntity<byte[]>(body, headers, statusCode);

转载于:https://www.cnblogs.com/DIVEY/p/10213312.html

springboot_poi思路相关推荐

  1. 【Design pattern】设计模式思路总结(一)

    看了一周的设计模式,跟着小菜的思路走! 从简单工厂过渡策略,后面看的这几个模式都是在单一职责,开放--封闭原则,依赖倒转原则下不断的改进,采用模式写出的代码更容易扩展,维护! 比较容易懂. 装饰模式: ...

  2. 二叉树线索化示意图_103-线索化二叉树思路图解

    2.网上数据结构和算法的课程不少,但存在两个问题: 1)授课方式单一,大多是照着代码念一遍,数据结构和算法本身就比较难理解,对基础好的学员来说,还好一点,对基础不好的学生来说,基本上就是听天书了 2) ...

  3. 业务层战略制定的思路和方法_智能商业时代的一种敏捷战略框架

    关键信息:如何在技术和市场快速变化的智能商业时代构建敏捷的战略,是一件非常重要但又极富挑战的任务.本文结合理论和实践提出了一种带内外反馈系统的敏捷战略框架,并在战略执行时构建了"网状式前端执 ...

  4. python粘性拓展_Python基础之:拓展解决问题的思路

    0.锤子原理 在手里拿着一把锤子的人眼中,世界就像一根钉子. 大多人试图以一种思维模型来解决问题,而其思维往往只来自某一专业学科, 但你必须知道各种重要学科的重要理论. 一一<穷查理宝典> ...

  5. centos 7 局域网丢包排查_Nginx搭建局域网yum源问题补充及解决思路与方法转发收藏...

    上一篇文章描述了利用Nginx搭建局域网yum源,安装完成后可以使用,但是有的老铁反馈说出现如下错误,可以查询到包,但是安装的时候,提示找不到路径,我这里做了测试,总结到这篇文章中. 这里是用安装te ...

  6. RTD 比率式温度测量传感器设计思路

    目录 1.共模低通RC滤波器 2.电阻和电容考虑 3.实践:用比率式测量法测得的ADuCM360噪声性能 许多系统设计人员使用Σ-Δ型ADC和RTD(电阻式温度检测器)进行温度测量,但实现ADC数据手 ...

  7. 2020考研 管理类联考数学 【题型分析及解题思路】

    第一章 整式分式 1.若一元n次多项式A被(或者是B的因式)一元1次多项式B整除,求解A中的几个系数a,b(解题思路:代入法,让因式值为0,也可以配合多元多项式基本公式将复杂的B变成简单的几个一次多项 ...

  8. 用什么心态对待水平糟糕的程序员[不靠谱的程序员、思路紊乱的程序员]?

    这些年遇到了很多糟糕的程序员,其实真正是写程序料的人,普通IT公司大概只占1/3左右吧,其实有2/3的人都太适合当程序员,还不如早点儿改行该干啥就干啥了,其中有1/10的人往往是相对比较糟糕的. 01 ...

  9. 【C++】【十一】二叉树递归遍历与非递归遍历的实现及思路

    非递归遍历实现思路:   #include <stdlib.h> #include <stdio.h> #include <iostream> #include & ...

  10. 一种在注入进程中使用WTL创建无焦点不在任务栏出现“吸附”窗口的方法和思路

    最近一直在做沙箱项目,在项目快接近结尾的时候,我想给在我们沙箱中运行的程序界面打上一个标记--标识其在我们沙箱中运行的.我大致想法是:在被注入程序的顶层窗口上方显示一个"标题性"窗 ...

最新文章

  1. matlab中repmat的用法,Matlab: sum的用法、每一行求和、repmat的用法、sum和repmat结合使用减少循环...
  2. UA MATH567 高维统计I 概率不等式10 Bernstein不等式
  3. windows令牌学习
  4. 签名build apk: Could not resolve all files for configuration ':app:lintClassPath' 问题
  5. 鸿蒙与安卓系统简单对比,绝非追求三分天下。
  6. 为 Windows 用户准备的简明 Linux 词汇表
  7. 关于maven项install时报找不到符号的错误
  8. Redis问题:ERR max number of clients reached
  9. Itext 7 生成PDF总结
  10. 学生党什么价位蓝牙耳机性价比高?2021这五款蓝牙耳机发烧友都爱了
  11. mean shift 跟踪算法
  12. JavaScript设计模式之享元模式
  13. java locale string_java.lang.String.toUpperCase(Locale locale)方法实例
  14. USDP使用笔记(四)打通双集群HDFS实现跨nameservice访问
  15. 什么是XGS-PON?XGS-PON如何与GPON、XG-PON共存?
  16. Android onTouch事件传递机制
  17. 甜度超标,程序员的尿竟是甜的,但更可怕的却是...
  18. SOCKET_RAW 手动封装TCP协议
  19. Forter宣布推出Smart Payments解决方案 帮助企业提升数字商务转化率和营收
  20. 电脑控制手机软件---total contral

热门文章

  1. String和StringBuffer与StringBuilder的区别
  2. Loadrunner关联
  3. MySQL innoDB数据插入性能优化
  4. 8.python之面相对象part.6(反射__call__,__setattr__,__delattr__,__getattr__)
  5. laravel自定义错误页和错误日志处理
  6. SQL Server的还原
  7. ps aux、ps -aux、ps -ef之间的区别
  8. centos不同版本的防火墙命令
  9. Spark一系列入门流程
  10. 举世闻名的 SQL 注入是什么?这个漫画告诉你!