数据库数据生成Excel表格(多用在导出数据)
最近在项目开发中遇到这样一个需求,用户聊天模块产品要求记录用户聊天信息,但只保存当天的,每天都要刷新清空数据,但聊天记录要以Excel的形式打印出来,于是就引出了将数据库的数据导出成Excel表格的需求。直奔主题。
在java中其实已经有了封装好的jar包,我们这里只要导入相应的jar包即可,具体如下(忘了是那几个了,所以就全截图了=_=)
然后就是工具类,代码如下:
- import java.io.BufferedOutputStream;
- import java.lang.reflect.Field;
- import java.lang.reflect.Method;
- import java.util.Collection;
- import java.util.Iterator;
- import javax.servlet.http.HttpServletResponse;
- import org.apache.poi.xssf.usermodel.XSSFCell;
- import org.apache.poi.xssf.usermodel.XSSFRichTextString;
- import org.apache.poi.xssf.usermodel.XSSFRow;
- import org.apache.poi.xssf.usermodel.XSSFSheet;
- import org.apache.poi.xssf.usermodel.XSSFWorkbook;
- public class ExportExcelUtil<T> {
- public void exportExcel(String[] headers,Collection<T> dataset, String fileName,HttpServletResponse response) {
- // 声明一个工作薄
- XSSFWorkbook workbook = new XSSFWorkbook();
- // 生成一个表格
- XSSFSheet sheet = workbook.createSheet(fileName);
- // 设置表格默认列宽度为15个字节
- sheet.setDefaultColumnWidth((short) 20);
- // 产生表格标题行
- XSSFRow row = sheet.createRow(0);
- for (short i = 0; i < headers.length; i++) {
- XSSFCell cell = row.createCell(i);
- XSSFRichTextString text = new XSSFRichTextString(headers[i]);
- cell.setCellValue(text);
- }
- try {
- // 遍历集合数据,产生数据行
- Iterator<T> it = dataset.iterator();
- int index = 0;
- while (it.hasNext()) {
- index++;
- row = sheet.createRow(index);
- T t = (T) it.next();
- // 利用反射,根据javabean属性的先后顺序,动态调用getXxx()方法得到属性值
- Field[] fields = t.getClass().getDeclaredFields();
- for (short i = 0; i < headers.length; i++) {
- XSSFCell cell = row.createCell(i);
- Field field = fields[i];
- String fieldName = field.getName();
- String getMethodName = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
- Class tCls = t.getClass();
- Method getMethod = tCls.getMethod(getMethodName, new Class[] {});
- Object value = getMethod.invoke(t, new Object[] {});
- // 判断值的类型后进行强制类型转换
- String textValue = null;
- // 其它数据类型都当作字符串简单处理
- if(value != null && value != ""){
- textValue = value.toString();
- }
- if (textValue != null) {
- XSSFRichTextString richString = new XSSFRichTextString(textValue);
- cell.setCellValue(richString);
- }
- }
- }
- getExportedFile(workbook, fileName,response);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- *
- * 方法说明: 指定路径下生成EXCEL文件
- * @return
- */
- public void getExportedFile(XSSFWorkbook workbook, String name,HttpServletResponse response) throws Exception {
- BufferedOutputStream fos = null;
- try {
- String fileName = name + ".xlsx";
- response.setContentType("application/x-msdownload");
- response.setHeader("Content-Disposition", "attachment;filename=" + new String( fileName.getBytes("gb2312"), "ISO8859-1" ));
- fos = new BufferedOutputStream(response.getOutputStream());
- workbook.write(fos);
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- if (fos != null) {
- fos.close();
- }
- }
- }
- }
在使用时,调用如下:(我这里是使用的springMVC,所以直接写在了接口中,为了省事就全部截取了~_~)
- /**
- * 导出数据库
- * @param response
- */
- @RequestMapping(value="exportExcel.do",method=RequestMethod.GET,
- produces="application/json;charset=utf-8")
- @ResponseBody
- public void exportExcel(HttpServletResponse response){
- Map<String, Object> map = new HashMap<String, Object>();
- map = msgService.findAllMsg();
- List<Msg> msgList = (List<Msg>) map.get("data");
- ExportExcelUtil<Msg> ee= new ExportExcelUtil<Msg>();
- String[] headers = { "序号", "发送用户", "接收用户", "时间" ,"聊天信息"};
- String fileName = "用户聊天信息表";
- ee.exportExcel(headers,msgList,fileName,response);
- }
至此,将数据库信息导出成Excel表格的功能就实现了。
数据库数据生成Excel表格(多用在导出数据)的更多相关文章
- Java操作Jxl实现导出数据生成Excel表格数据文件
实现:前台用的框架是Easyui+Bootstrap结合使用,需要引入相应的Js.Css文件.页面:Jsp.拦截请求:Servlet.逻辑处理:ClassBean.数据库:SQLserver. 注意: ...
- 详解python操作生成excel表格,并且填充数据
最近在研究python操作excel表格的问题,首先读取excel表格觉得平时用的多,不怎么有难度,就是pyhon生成excel表格的时候,平时不怎么用,所以重点研究了一下,现总结如下: 1.首先用到 ...
- Java使用poi从数据库读取数据生成Excel表格
想要使用POI操作以xsl结尾的Excel,首先要下载poi相关的jar包,用到的jar有: poi-3.9.jar poi-ooxml-3.9.jar poi-ooxml-schemas-3.9.j ...
- Java导出数据生成Excel表格
事先准备: 工具类: package com.wazn.learn.util.export; import java.sql.Connection; import java.sql.DriverMan ...
- 导出数据到Excel表格
开发工具与关键技术:Visual Studio 和 ASP.NET.MVC,作者:陈鸿鹏撰写时间:2019年5月25日123下面是我们来学习的导出数据到Excel表格的总结首先在视图层写导出数据的点击 ...
- Python导出数据到Excel表格-NotImplementedError: formatting_info=True not yet implemented
在使用Python写入数据到Excel表格中时出现报错信息记录:“NotImplementedError: formatting_info=True not yet implemented” 报错分析 ...
- 将Highcharts图表数据生成Table表格
有的时候,我们不仅仅需要漂亮的统计图来显示统计结果,还需要在统计图下方一个表格可以更加直观的展现各类数据.既然统计图都显示出来了,那我们可以根据统计图的各元素生成表格了. 首先,先显示统计图. Htm ...
- H5纯前端生成Excel表格
H5纯前端生成Excel表格方法如下: <!DOCTYPE html> <html> <head> <title></title> < ...
- php动态导出数据成Excel表格
一.封装 Excel 导出类 include/components/ExecExcel.php <?php /*** * @Excel 导入导出类. */ class ExecExcel { / ...
随机推荐
- CSPS模拟94
我好菜啊...... %%%迪神AK 虽然考试成绩不太好,但至少能想到正解了,也不会菜到打不出暴力. T1:想了半天不会,发现直接打高精可以拿到80分,就赶紧码完扔了,结果正解是利用double避免了 ...
- 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 ...
- [bzoj 4872][六省联考2017]分手是祝愿
传送门 Description N个灯按照1~N标号,按下一个开关i,所有标号是i的约数的开关都改变状态,目标是关掉所有的灯,如果当前最优策略≤k就直接按照最优策略走.否则随机按下一个开关.给出每个灯 ...
- 微信小程序入门与实战 从0到1进行细致讲解 涵盖小程序开发核心技能下载
第1章 什么是微信小程序? 第2章 小程序环境搭建与开发工具介绍 第3章 从一个简单的“欢迎“页面开始小程序之旅 第4章 第二个页面:新闻阅读列表 第5章 小程序的模板化与模块化 第6章 构建新闻详情 ...
- Dockerfile HEALTHCHECK详解
Dockerfile中使用HEALTHCHECK的形式有两种: 1.HEALTHCHECK [options] CMD command(本次详细解释) 2.HEALTHCHECK NODE 意思是禁止 ...
- 2018-2019-2 网络对抗技术 20165202 Exp9 Web安全基础
博客目录 一.实践内容 跨站脚本攻击XSS 跨站请求伪造CSRF SQL注入攻击 二.实验中遇到的问题及解决 三.基础问题回答 四.实验总结 一.实践内容 本实践的目标理解常用网络攻击技术的基本原理. ...
- RT-Thread 柿饼GUI
目前主流的嵌入式GUI开发技术中,RT-Thread/Persimmon.TouchGFX和emWin是最受人瞩目的. RT-Thread/ Persimmon是国内主导开发的实时线程操作系统RT ...
- github免费私有仓库使用
本文链接:https://blog.csdn.net/subfate/article/details/86147645github仓库前不久开放了个人私有仓库(原来要收费),个人使用无数量限制.对于想 ...
- python笔记9 线程进程 threading多线程模块 GIL锁 multiprocessing多进程模块 同步锁Lock 队列queue IO模型
线程与进程 进程 进程就是一个程序在一个数据集上的一次动态执行过程.进程一般由程序.数据集.进程控制块三部分组成.我们编写的程序用来描述进程要完成哪些功能以及如何完成:数据集则是程序在执行过程中所需要 ...
- python 日期计算
from datetime import timedelta,datetime import time tdy = datetime.today() tdy = tdy.strftime(" ...