将数据库数据在后台生成表格数据,在前端页面下载
xl_echo编辑整理,欢迎转载,转载请声明文章来源。更多IT、编程案例请联系QQ:1280023003
百战不败,依不自称常胜,百败不颓,依能奋力前行。——这才是真正的堪称强大!!!
一般来说生成Excel表的生成格式是比较固定的,基本就是和我们平时在电脑上做Excel表差不多。
主要步骤为:
- 创建表格
- 生成表头(将列名生成出来)
- 在表格中插入数据
- 编写一个浏览器下载这个表格的方法
一下为源码
public void downloadExcel(List<Object> list) throws IOException {
if (list == null) {
return;
} else if (list.size() == 1) {
return;
}
// 得到结果,生成Excel文件
HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
HSSFSheet sheet = hssfWorkbook.createSheet("表格数据");
// 生成表头
HSSFRow headRow = sheet.createRow(0);
headRow.createCell(0).setCellValue("表格列1");
headRow.createCell(1).setCellValue("表格列2");
headRow.createCell(2).setCellValue("表格列3");
headRow.createCell(3).setCellValue("表格列4");
headRow.createCell(4).setCellValue("表格列5");
headRow.createCell(5).setCellValue("表格列6");
headRow.createCell(6).setCellValue("表格列7");
// 将数据插入表中
for (Object obj : list) {
HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum() + 1);
dataRow.createCell(0).setCellValue("obj对象的对应列名属性");
dataRow.createCell(1).setCellValue("obj对象的对应列名属性");
dataRow.createCell(2).setCellValue("obj对象的对应列名属性");
dataRow.createCell(3).setCellValue("obj对象的对应列名属性");
dataRow.createCell(4).setCellValue("obj对象的对应列名属性");
dataRow.createCell(5).setCellValue("obj对象的对应列名属性");
dataRow.createCell(6).setCellValue("obj对象的对应列名属性");
}
// 通过浏览器下载导出
// 设置表头信息
ServletActionContext.getResponse().setContentType("application/vnd.ms-excel");
String filename = "表格数据.xls";
String agent = ServletActionContext.getRequest().getHeader("user-agent");
filename = FileUtils.encodeDownloadFilename(filename, agent);
ServletActionContext.getResponse().setHeader("Content-Disposition", "attachment;filename=" + filename);
ServletOutputStream outputStream = ServletActionContext.getResponse().getOutputStream();
hssfWorkbook.write(outputStream);
// 关闭
hssfWorkbook.close();
}
//下载浏览器识别工具类一个
package com.echo.maven.utils;
import java.io.IOException;
import java.net.URLEncoder;
import sun.misc.BASE64Encoder;
public class FileUtils {
/**
* 下载文件时,针对不同浏览器,进行附件名的编码
*
* @param filename
* 下载文件名
* @param agent
* 客户端浏览器
* @return 编码后的下载附件名
* @throws IOException
*/
public static String encodeDownloadFilename(String filename, String agent)
throws IOException {
if (agent.contains("Firefox")) { // 火狐浏览器
filename = "=?UTF-8?B?"
+ new BASE64Encoder().encode(filename.getBytes("utf-8"))
+ "?=";
filename = filename.replaceAll("\r\n", "");
} else { // IE及其他浏览器
filename = URLEncoder.encode(filename, "utf-8");
filename = filename.replace("+"," ");
}
return filename;
}
}