工作时遇到了一个excel 导出的问题 , 原本是想直接用前端的table直接做excel 导出,但是又发现有点不满足需求

是 同是将三个小表格放入到一个excel表格中去,于是就上网找资料

这篇贴子就写的比较清楚详细 于是快乐的抄袭就开始了,但是发现一些不足之处,于是就稍微改动了一下,觉得还是满足使用的

#贴上代码


import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;import java.io.*;
import java.util.*;public class ExcelUtil {static HSSFCellStyle style;/*** 导出Excel** @param sheetName sheet名称* @param title     标题* @param values    内容* @param wb        HSSFWorkbook对象* @return*/public static HSSFWorkbook getHSSFWorkbook(String sheetName, String[] title, List<Map<String, Object>> values, HSSFWorkbook wb) {// 第一步,创建一个HSSFWorkbookif (wb == null) {wb = new HSSFWorkbook();style = getStyle(wb);/*创建一个sheet*/HSSFSheet sheet = wb.createSheet(sheetName);/*设置标题*/setTitle(sheet, title);/*将map里的数据设置到sheet 中去*/setData(sheet, values);} else {style = getStyle(wb);HSSFSheet sheet = wb.getSheet(sheetName);setTitle(sheet, title);setData(sheet, values);}return wb;}private static void setTitle(HSSFSheet sheet, String[] title) {int lastRowNum = sheet.getLastRowNum();/*获取 最后一行的行号*/HSSFRow row = sheet.createRow(lastRowNum + 1);for (int i = 0; i < title.length; i++) {HSSFCell cell = row.createCell(i);cell.setCellValue(title[i]);cell.setCellStyle(style);}}/*** 构建样式** @param wb* @return*/private static HSSFCellStyle getStyle(HSSFWorkbook wb) {HSSFCellStyle style = wb.createCellStyle();// 创建一个居中格式style.setAlignment(HSSFCellStyle.ALIGN_CENTER);return style;}/*** 填充数据的方法** @param sheet* @param mapList*/private static void setData(HSSFSheet sheet, List<Map<String, Object>> mapList) {int i = sheet.getLastRowNum();for (Map<String, Object> value : mapList) {HSSFRow row = sheet.createRow(i + 1);int j = 0;for (Map.Entry<String, Object> entry : value.entrySet()) {//将内容按顺序赋给对应的列对象row.createCell(j).setCellValue((String) entry.getValue());j++;}i++;}}public static void main(String[] args) {String sheetName = "学生信息表";//Sheet名称/*说明: 如果是用map的话 必须使用linkHashMap 这样的数据才是有序的,否则就是无序的*/Map<String, Object> map = new LinkedHashMap<>();List<Map<String, Object>> mapList = new ArrayList<>();map.put("name", "小明");map.put("sex", "男");map.put("age", "10");map.put("class", "广东小学");map.put("school", "三年二班");mapList.add(map);String[] title = {"名称", "性别", "年龄", "学校", "班级"};//excel文件名String fileName = "D://学生信息表" + System.currentTimeMillis() + ".xls";//第一次加载数据HSSFWorkbook workbook = getHSSFWorkbook(sheetName, title, mapList, null);//同一个sheet 中添加其他信息Map<String, Object> map1 = new LinkedHashMap<>();List<Map<String, Object>> mapList1 = new ArrayList<>();map1.put("hight", "165cm");map1.put("weight", "80kg");map1.put("like", "打篮球");mapList1.add(map1);String[] titles = {"身高", "体重", "爱好"};workbook = getHSSFWorkbook(sheetName, titles, mapList1, workbook);OutputStream os = null;try {os = new FileOutputStream(new File(fileName));workbook.write(os);os.flush();os.close();System.out.println("successful");} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}

#测试结果是

刚刚好满足我的要求

补充: 由于写日志的时候快要下班了,但是启动项目的时候发现一个异常, 异常就是springBoot 不兼容poi 3.6的版本,所以重新换了4.0.0的版本才得以生效

#贴出前端的代码

/*** 导出excel表格** @param request* @param response* @return* @author Lengff* @time 2018-11-1 18:43:06*/@RequestMapping("export")@ResponseBodypublic void export(HttpServletRequest request, HttpServletResponse response) {String sheetName = "全站概况统计";String fileName = "全站概况统计" + System.currentTimeMillis() + ".xls";String[] title = {"统计", "新增激活设备", "新增注册数", "新增注册转化率", "新增注册数", "启动量", "活跃启动量", "平均启动次数", "登录人数", "登录转化率"};String[] titlB = {"统计", "累计激活设备", "累计注册数", "注册转化率"};List<Map<String, Object>> todayCount = siteCountService.getTodayCount(1);HSSFWorkbook wb = ExcelUtil.getHSSFWorkbook(sheetName, title, todayCount, null);List<Map<String, Object>> countYesterday = siteCountService.getTodayCount(2);wb = ExcelUtil.getHSSFWorkbook(sheetName, title, countYesterday, wb);List<Map<String, Object>> countAll = siteCountService.countAll();wb = ExcelUtil.getHSSFWorkbook(sheetName, titlB, countAll, wb);try {this.setResponseHeader(response, fileName);OutputStream os = response.getOutputStream();wb.write(os);os.flush();os.close();} catch (Exception e) {e.printStackTrace();}}//发送响应流方法private void setResponseHeader(HttpServletResponse response, String fileName) {try {try {fileName = new String(fileName.getBytes(), "ISO8859-1");} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();}response.setContentType("application/octet-stream;charset=ISO8859-1");response.setHeader("Content-Disposition", "attachment;filename=" + fileName);response.addHeader("Pargam", "no-cache");response.addHeader("Cache-Control", "no-cache");} catch (Exception ex) {ex.printStackTrace();}}

成功的导出excel文件

#最后的结果

总结:excel 导出其实是用的比较多的功能 , 实现的方式也有很多种, 之前也做过很多种 , 但是觉得都挺麻烦的, 唯独这次的方式比较方便, 因为是把bean 转成了map , 所以就不需要考虑 对应关系, 但是要注意的是必须是用linkHashMap 要不然就会乱序,一样会让人头疼不已的!

JAVA导出EXCEL表格相关推荐

  1. java 浏览器 excel导出excel_使用Java导出Excel表格并由浏览器直接下载——基于POI框架...

    非异步方法 /** * 使用Java导出Excel表格并由浏览器直接下载--基于POI框架 * * @param response * @return * @throws IllegalAccessE ...

  2. Java导出Excel表格出现文件损坏异常解决方案

    Java导出Excel表格出现文件损坏异常解决方案 问题出现 问题出现 本人遇到这个问题,由于是第一次见,感觉无从下手.但是导出功能很常见,做的也很多,只有这个出现了文件损坏,那很可能是代码写的有问题 ...

  3. 简单的 Java 导出 Excel 表格 小例子《一抹茶CSDN》

    Java 导出 Excel 为什么要有导出Excel表格的功能呢? 因为我们在使用软件时会有,一些数据需要导出来,进行留存,大多数人使用的都是office的办公软件,就会使用常用的Excel表格.因此 ...

  4. java填充excel表格中_填充导出Java导出excel表格

    近期朋友几篇文章介绍了改填充导出的文章. 关联文章的地址 之前做项目的时候需要数据库导出excel格式,由于项目赶没实现,现在分享下如何用java导出excel.话不多说案例如下: 首先要做的是导入一 ...

  5. 使用Java导出Excel表格并由浏览器直接下载——基于POI框架

    目录 背景描述 技术准备 导出Excel--尝鲜版 导出Excel--封装版(通过反射) 导出Excel--深度封装(设置下拉选项) 扩展--多个列分别是不同的下拉选项怎么封装 2019-10-28  ...

  6. java excel 导出 下载_使用Java导出Excel表格并由浏览器直接下载

    声明:本文是基于其他博主的文章,自己再稍微改了一点[公共类+业务类],感谢那个博主 参考地址:https://blog.csdn.net/wzy18210825916/article/details/ ...

  7. java导出excle表格数据,java导出Excel表格

    图片仅供参考 霸气钢铁侠 Thinking:我发现上班时,当一个程序员飞速的敲着代码,大部分情况不是在认真工作,多半是在微信聊天,只有当他键盘敲几下,之后一直在操作鼠标,然后在敲几下键盘,这个时候应该 ...

  8. JAVA导出excel表格标题加粗,【excle特定文字加粗】java如何设置excel单元格中部分文字加粗 例如:标题(加粗): 内容(不加粗)...

    java如何设置excel单元格中部分文字加粗 例如:标题(加粗): 内容(不加粗) HSSFCellStyle style = (HSSFCellStyle) wb.createCellStyle( ...

  9. java导出excel表格设置行高,POI导出Excel设置单元格格式

    使用Apache的POI相关API导出Excel设置单元格格式 栗子,一下各个代码之间的变量是通用的,要是在某个代码块中找不到某个变量,则可以向上找寻 准备工作 InputStream = templ ...

  10. java导出excel表格,文件名称汉字话

    //导出Excel     @RequestMapping("/export")     @ResponseBody     public void createExcel(Htt ...

最新文章

  1. 如何写出符合Python审美的代码风格?
  2. 浅谈Horizon DaaS平台 - 崛起的桌面云平台
  3. 自定义服务器控件ImageButton
  4. C#自定义开关按钮控件--附带第一个私活项目截图
  5. NeurIPS 2021 Spotlight | PCAN: 高效时序建模, 提升多目标追踪与分割性能
  6. 如何从一段视频中一次性修整多个片段
  7. type=file的未选择任何文件修改_Electron应用易“招黑”,轻松被修改并植入后门...
  8. 三维点云数据处理软件-图像重建点云或LiDAR扫描点云
  9. 虚幻引擎C++开发学习(三)
  10. winhex数据恢复linux,winhex数据恢复完整图文教程
  11. 复联4定档 4.24——十一年21部漫威电影,用数据为你梳理口碑、票房、主演最佳......
  12. AMD显卡更新UEFI GOP
  13. 巧用电池小工具 电量问题全掌握
  14. Ubuntu16.04无法连接Wifi解决方案 (绝对有效)
  15. 阿德莱德计算机科学学士好吗,阿德莱德大学哪个专业好
  16. 苹果对NFT敞开怀抱?最新App Store审核指南解读
  17. 常见的因特网应用的协议使用
  18. 10个非主流操作系统
  19. andorid 开发
  20. 基于51单片机PM2.5空气质量检测系统(源程序+仿真+原理图+PCB+论文)

热门文章

  1. Spring整合MyBatis框架
  2. [github高级控件] 带你走近 - CircleIndicator指示器原点动画切换
  3. android进阶(一)Activity加载模式
  4. Android 加载网页进度条
  5. BZOJ3506 [CQOI2014]排序机械臂
  6. strel函数c语言写法,全国计算机等级考试二级C语言题型总结(二)——选择循环结构程序设计部分(5篇范文)...
  7. 算法训练 s01串java_试题 算法训练 s01串
  8. element布局容器大小_Element-UI 技术揭秘(4)— Container 布局容器组件的设计与实现。...
  9. 阿里 java ide_纯JAVA版JAVA IDE环境(源码)
  10. java float 运算_java基础之float、double底层运算