最近在项目开发中遇到这样一个需求,用户聊天模块产品要求记录用户聊天信息,但只保存当天的,每天都要刷新清空数据,但聊天记录要以Excel的形式打印出来,于是就引出了将数据库的数据导出成Excel表格的需求。直奔主题。

  在java中其实已经有了封装好的jar包,我们这里只要导入相应的jar包即可,具体如下(忘了是那几个了,所以就全截图了=_=)

  然后就是工具类,代码如下:

  

  1. import java.io.BufferedOutputStream;
  2. import java.lang.reflect.Field;
  3. import java.lang.reflect.Method;
  4. import java.util.Collection;
  5. import java.util.Iterator;
  6.  
  7. import javax.servlet.http.HttpServletResponse;
  8.  
  9. import org.apache.poi.xssf.usermodel.XSSFCell;
  10. import org.apache.poi.xssf.usermodel.XSSFRichTextString;
  11. import org.apache.poi.xssf.usermodel.XSSFRow;
  12. import org.apache.poi.xssf.usermodel.XSSFSheet;
  13. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  14.  
  15. public class ExportExcelUtil<T> {
  16.  
  17. public void exportExcel(String[] headers,Collection<T> dataset, String fileName,HttpServletResponse response) {
  18. // 声明一个工作薄
  19. XSSFWorkbook workbook = new XSSFWorkbook();
  20. // 生成一个表格
  21. XSSFSheet sheet = workbook.createSheet(fileName);
  22. // 设置表格默认列宽度为15个字节
  23. sheet.setDefaultColumnWidth((short) 20);
  24. // 产生表格标题行
  25. XSSFRow row = sheet.createRow(0);
  26. for (short i = 0; i < headers.length; i++) {
  27. XSSFCell cell = row.createCell(i);
  28. XSSFRichTextString text = new XSSFRichTextString(headers[i]);
  29. cell.setCellValue(text);
  30. }
  31. try {
  32. // 遍历集合数据,产生数据行
  33. Iterator<T> it = dataset.iterator();
  34. int index = 0;
  35. while (it.hasNext()) {
  36. index++;
  37. row = sheet.createRow(index);
  38. T t = (T) it.next();
  39. // 利用反射,根据javabean属性的先后顺序,动态调用getXxx()方法得到属性值
  40. Field[] fields = t.getClass().getDeclaredFields();
  41. for (short i = 0; i < headers.length; i++) {
  42. XSSFCell cell = row.createCell(i);
  43. Field field = fields[i];
  44. String fieldName = field.getName();
  45. String getMethodName = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
  46. Class tCls = t.getClass();
  47. Method getMethod = tCls.getMethod(getMethodName, new Class[] {});
  48. Object value = getMethod.invoke(t, new Object[] {});
  49. // 判断值的类型后进行强制类型转换
  50. String textValue = null;
  51. // 其它数据类型都当作字符串简单处理
  52. if(value != null && value != ""){
  53. textValue = value.toString();
  54. }
  55. if (textValue != null) {
  56. XSSFRichTextString richString = new XSSFRichTextString(textValue);
  57. cell.setCellValue(richString);
  58. }
  59. }
  60. }
  61. getExportedFile(workbook, fileName,response);
  62. } catch (Exception e) {
  63. e.printStackTrace();
  64. }
  65. }
  66.  
  67. /**
  68. *
  69. * 方法说明: 指定路径下生成EXCEL文件
  70. * @return
  71. */
  72. public void getExportedFile(XSSFWorkbook workbook, String name,HttpServletResponse response) throws Exception {
  73. BufferedOutputStream fos = null;
  74. try {
  75. String fileName = name + ".xlsx";
  76. response.setContentType("application/x-msdownload");
  77. response.setHeader("Content-Disposition", "attachment;filename=" + new String( fileName.getBytes("gb2312"), "ISO8859-1" ));
  78. fos = new BufferedOutputStream(response.getOutputStream());
  79. workbook.write(fos);
  80. } catch (Exception e) {
  81. e.printStackTrace();
  82. } finally {
  83. if (fos != null) {
  84. fos.close();
  85. }
  86. }
  87. }
  88.  
  89. }

  在使用时,调用如下:(我这里是使用的springMVC,所以直接写在了接口中,为了省事就全部截取了~_~)

  1. /**
  2. * 导出数据库
  3. * @param response
  4. */
  5. @RequestMapping(value="exportExcel.do",method=RequestMethod.GET,
  6. produces="application/json;charset=utf-8")
  7. @ResponseBody
  8. public void exportExcel(HttpServletResponse response){
  9. Map<String, Object> map = new HashMap<String, Object>();
  10. map = msgService.findAllMsg();
  11. List<Msg> msgList = (List<Msg>) map.get("data");
  12. ExportExcelUtil<Msg> ee= new ExportExcelUtil<Msg>();
  13. String[] headers = { "序号", "发送用户", "接收用户", "时间" ,"聊天信息"};
  14. String fileName = "用户聊天信息表";
  15. ee.exportExcel(headers,msgList,fileName,response);
  16. }

至此,将数据库信息导出成Excel表格的功能就实现了。

数据库数据生成Excel表格(多用在导出数据)的更多相关文章

  1. Java操作Jxl实现导出数据生成Excel表格数据文件

    实现:前台用的框架是Easyui+Bootstrap结合使用,需要引入相应的Js.Css文件.页面:Jsp.拦截请求:Servlet.逻辑处理:ClassBean.数据库:SQLserver. 注意: ...

  2. 详解python操作生成excel表格,并且填充数据

    最近在研究python操作excel表格的问题,首先读取excel表格觉得平时用的多,不怎么有难度,就是pyhon生成excel表格的时候,平时不怎么用,所以重点研究了一下,现总结如下: 1.首先用到 ...

  3. Java使用poi从数据库读取数据生成Excel表格

    想要使用POI操作以xsl结尾的Excel,首先要下载poi相关的jar包,用到的jar有: poi-3.9.jar poi-ooxml-3.9.jar poi-ooxml-schemas-3.9.j ...

  4. Java导出数据生成Excel表格

    事先准备: 工具类: package com.wazn.learn.util.export; import java.sql.Connection; import java.sql.DriverMan ...

  5. 导出数据到Excel表格

    开发工具与关键技术:Visual Studio 和 ASP.NET.MVC,作者:陈鸿鹏撰写时间:2019年5月25日123下面是我们来学习的导出数据到Excel表格的总结首先在视图层写导出数据的点击 ...

  6. Python导出数据到Excel表格-NotImplementedError: formatting_info=True not yet implemented

    在使用Python写入数据到Excel表格中时出现报错信息记录:“NotImplementedError: formatting_info=True not yet implemented” 报错分析 ...

  7. 将Highcharts图表数据生成Table表格

    有的时候,我们不仅仅需要漂亮的统计图来显示统计结果,还需要在统计图下方一个表格可以更加直观的展现各类数据.既然统计图都显示出来了,那我们可以根据统计图的各元素生成表格了. 首先,先显示统计图. Htm ...

  8. H5纯前端生成Excel表格

    H5纯前端生成Excel表格方法如下: <!DOCTYPE html> <html> <head> <title></title> < ...

  9. php动态导出数据成Excel表格

    一.封装 Excel 导出类 include/components/ExecExcel.php <?php /*** * @Excel 导入导出类. */ class ExecExcel { / ...

随机推荐

  1. CSPS模拟94

    我好菜啊...... %%%迪神AK 虽然考试成绩不太好,但至少能想到正解了,也不会菜到打不出暴力. T1:想了半天不会,发现直接打高精可以拿到80分,就赶紧码完扔了,结果正解是利用double避免了 ...

  2. fatal: 'origin' does not appear to be a git repository

    git push时报以下错误: fatal: 'origin' does not appear to be a git repository fatal: Could not read from re ...

  3. [bzoj 4872][六省联考2017]分手是祝愿

    传送门 Description N个灯按照1~N标号,按下一个开关i,所有标号是i的约数的开关都改变状态,目标是关掉所有的灯,如果当前最优策略≤k就直接按照最优策略走.否则随机按下一个开关.给出每个灯 ...

  4. 微信小程序入门与实战 从0到1进行细致讲解 涵盖小程序开发核心技能下载

    第1章 什么是微信小程序? 第2章 小程序环境搭建与开发工具介绍 第3章 从一个简单的“欢迎“页面开始小程序之旅 第4章 第二个页面:新闻阅读列表 第5章 小程序的模板化与模块化 第6章 构建新闻详情 ...

  5. Dockerfile HEALTHCHECK详解

    Dockerfile中使用HEALTHCHECK的形式有两种: 1.HEALTHCHECK [options] CMD command(本次详细解释) 2.HEALTHCHECK NODE 意思是禁止 ...

  6. 2018-2019-2 网络对抗技术 20165202 Exp9 Web安全基础

    博客目录 一.实践内容 跨站脚本攻击XSS 跨站请求伪造CSRF SQL注入攻击 二.实验中遇到的问题及解决 三.基础问题回答 四.实验总结 一.实践内容 本实践的目标理解常用网络攻击技术的基本原理. ...

  7. RT-Thread 柿饼GUI

    目前主流的嵌入式GUI开发技术中,RT-Thread/Persimmon.TouchGFX和emWin是最受人瞩目的.   RT-Thread/ Persimmon是国内主导开发的实时线程操作系统RT ...

  8. github免费私有仓库使用

    本文链接:https://blog.csdn.net/subfate/article/details/86147645github仓库前不久开放了个人私有仓库(原来要收费),个人使用无数量限制.对于想 ...

  9. python笔记9 线程进程 threading多线程模块 GIL锁 multiprocessing多进程模块 同步锁Lock 队列queue IO模型

    线程与进程 进程 进程就是一个程序在一个数据集上的一次动态执行过程.进程一般由程序.数据集.进程控制块三部分组成.我们编写的程序用来描述进程要完成哪些功能以及如何完成:数据集则是程序在执行过程中所需要 ...

  10. python 日期计算

    from datetime import timedelta,datetime import time tdy = datetime.today() tdy = tdy.strftime(" ...