文件下载需要五步:

1.设置文件ContentType类型

// 设置文件ContentType类型,这样设置,会自动判断下载文件类型
response.setContentType("multipart/form-data");

2.设置文件头

// 设置文件头:最后一个参数是设置下载文件名
response.addHeader("Content-Disposition", "attachment;filename=" + new String(title.getBytes(),"ISO8859-1") + ".xls");

3.获取输出流(out)

// 获取输出流
out = res.getOutputStream();

4.写到输出流(out)中

5.关闭资源

--------华丽的分割线-------web项目导出Excel文档

  POM :

  <dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.15-beta1</version>
  </dependency>

  Class : RestController

package com.xindatai.ibs.device.act;

import java.io.IOException;
import java.io.OutputStream;
import java.util.List; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController; import com.xindatai.common.web.BaseAct;
import com.xindatai.common.web.resp.ModelMapWriter;
import com.xindatai.common.web.resp.PageRespWriter;
import com.xindatai.ibs.device.act.bean.PerfReqParam;
import com.xindatai.ibs.device.act.validate.PerfActValidate;
import com.xindatai.ibs.device.bean.PerfPM25;
import com.xindatai.ibs.device.service.PerfService;
import com.xindatai.ibs.util.ExportExcel; @RestController
public class PerfAct extends BaseAct{ @Resource
private PerfService service;
@Resource
private PerfActValidate validate;
@Resource
private ExportExcel<PerfPM25> exportExcel; @RequestMapping(value = "/perf" , method = RequestMethod.GET)
public String perf(HttpServletRequest req,HttpServletResponse res , PerfReqParam param){
res.setHeader("Access-Control-Allow-Origin", "*");
ModelMapWriter writer = new ModelMapWriter();
validate.perf(param);
if(param.hasErrors()){
writer = ModelMapWriter.createErrWriter(param);
}else{
if(param.getExport()){
OutputStream out = null;
try {
String title = "来福士PM2.5浓度监测值统计报表";
List<PerfPM25> list = service.getPerfsExport(param);
String[] headers = {"监测点","统计时间","PM2.5浓度平均值","温度平均值","湿度平均值"};
String[] headersName = {"name","perfTime","pm25","temp","humi"};
// 设置文件ContentType类型,这样设置,会自动判断下载文件类型
res.setContentType("multipart/form-data");
// 设置文件头:最后一个参数是设置下载文件名
res.addHeader("Content-Disposition", "attachment;filename=" + new String(title.getBytes(),"ISO8859-1") + ".xls");
// 获取输出流
out = res.getOutputStream();
exportExcel.exportExcel(title, headers, headersName, list, out);
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if(null != null){
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}else{
PageRespWriter<PerfPM25> query = service.getPerfs(param);
return toJsonFormatDate(query);
}
}
return toJsonFormatDate(writer);
}
}

  Class : @Service

package com.xindatai.ibs.util;

import java.io.IOException;
import java.io.OutputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.regex.Matcher;
import java.util.regex.Pattern; import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
import org.apache.poi.hssf.usermodel.HSSFComment;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFPatriarch;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.springframework.stereotype.Service; @Service
public class ExportExcel<T> { public void exportExcel(String title, String[] headers,String[] headersName,Collection<T> dataset, OutputStream out) {
exportExcel(title, headers, headersName, dataset, out, "yyyy-MM-dd HH:mm:ss");
} /*
* 这是一个通用的方法,利用JAVA的反射机制,可以将放置在JAVA集合中并且符合一定条件的数据以EXCEL的形式输出到指定IO设备上
* @param title 表格标题名
* @param headers 表格属性列名数组
* @Param headersName 字段数组,用来获取反射方法。
* @param dataset 需要显示的数据集合,集合中一定要放置符合javabean风格的类的对象。此方法支持的javabean属性的数据类型有基本数据类型及String,Date,byte[](图片数据)
* @param out 与输出设备关联的流对象,可以将EXCEL文档导出到本地文件或者网络中。
* @param pattern 如果有时间数据,设定输出格式。默认为“yyyy-MM-dd”
*/
public void exportExcel(String title,String[] headers,String[] headersName, Collection<T> dataset,OutputStream out,String pattern){
// 声明一个工作簿
HSSFWorkbook workbook = new HSSFWorkbook();
// 声明一个表格
HSSFSheet sheet = workbook.createSheet(title);
// 设置表格默认列宽度为15个字节
sheet.setDefaultColumnWidth((short)15);
// 生成一个单元格样式:表头单元格样式
HSSFCellStyle styleCaptaion = workbook.createCellStyle();
// 设置表头单元格样式:设置单元格背景色
// styleCaptaion.setFillBackgroundColor(HSSFColor.SKY_BLUE.index);
// 设置表头单元格样式:指定单元格的填充信息模式和纯色填充单元。
// styleCaptaion.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
// 设置表头单元格样式:设置边框的类型为单元格的右边界
styleCaptaion.setBorderBottom(HSSFCellStyle.BORDER_THIN);
styleCaptaion.setBorderTop(HSSFCellStyle.BORDER_THIN);
styleCaptaion.setBorderLeft(HSSFCellStyle.BORDER_THIN);
styleCaptaion.setBorderRight(HSSFCellStyle.BORDER_THIN);
// 设置表头单元格样式:设置单元格为水平对齐的类型
styleCaptaion.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 生成一个字体:表头字体
HSSFFont fontCaptaion = workbook.createFont();
// 生成一个字体:设置字体颜色
fontCaptaion.setColor(HSSFColor.VIOLET.index);
// 生成一个字体:设置字体大小
fontCaptaion.setFontHeightInPoints((short)12);
// 生成一个字体:字体加粗
fontCaptaion.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
// 把字体应用到当前单元格样式中
styleCaptaion.setFont(fontCaptaion); // 生成内容单元格样式
HSSFCellStyle styleContent = workbook.createCellStyle();
styleContent.setFillBackgroundColor(HSSFColor.LIGHT_YELLOW.index);
styleContent.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
styleContent.setBorderBottom(HSSFCellStyle.BORDER_THIN);
styleContent.setBorderTop(HSSFCellStyle.BORDER_THIN);
styleContent.setBorderLeft(HSSFCellStyle.BORDER_THIN);
styleContent.setBorderRight(HSSFCellStyle.BORDER_THIN);
styleContent.setAlignment(HSSFCellStyle.ALIGN_CENTER);
styleContent.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
// 生成内容字体
HSSFFont fontContent = workbook.createFont();
fontContent.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
// 把字体应用到内容单元格样式中
styleContent.setFont(fontContent); // 声明一个画图的顶级管理器
HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
// 定义注释的大小和位置
HSSFComment comment = patriarch.createComment(new HSSFClientAnchor(0, 0, 0, 0, (short)4, 2, (short)6, 5));
// 设置注释内容
comment.setString(new HSSFRichTextString("可以在POI中添加注释"));
// 设置注释作者,当鼠标移动到单元格上时可以在状态栏中看到该内容
comment.setAuthor("lime"); // 产生表格标题行
HSSFRow row = sheet.createRow(0);
for(short i = 0;i < headers.length;i++){
HSSFCell cell = row.createCell(i);
cell.setCellStyle(styleCaptaion);
HSSFRichTextString text = new HSSFRichTextString(headers[i]);
cell.setCellValue(text);
} // 遍历集合数据,产生数据行
Iterator<T> it = dataset.iterator();
int index = 0;
while(it.hasNext()){
row = sheet.createRow(++index);
T t = (T)it.next();
Class<? extends Object> tCls = t.getClass();
for(short i = 0;i < headers.length;i++){
HSSFCell cell = row.createCell(i);
String getterName = "get" + headersName[i].substring(0, 1).toUpperCase() + headersName[i].substring(1);
Method method = null;
Object value = null;
try {
method = tCls.getDeclaredMethod(getterName);
value = method.invoke(t);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
verify(value, cell, row, pattern, sheet, index, patriarch, workbook, i);
}
}
try {
workbook.write(out);
} catch (IOException e) {
e.printStackTrace();
}finally{
if(null != out){
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
} public void verify(Object value,HSSFCell cell,HSSFRow row, String pattern, HSSFSheet sheet, int index, HSSFPatriarch patriarch, HSSFWorkbook workbook, int i){
// 判断值的类型后进行强制类型转换
String textValue = null;
if(value instanceof Integer){
int intValue = (Integer)value;
cell.setCellValue(intValue);
}else if(value instanceof Float){
float fValue = (Float)value;
cell.setCellValue(fValue);
}else if(value instanceof Double){
double dValue = (Double)value;
cell.setCellValue(dValue);
}else if(value instanceof Long){
long longValue = (Long)value;
cell.setCellValue(longValue);
}else if(value instanceof Boolean){
boolean bValue = (Boolean)value;
textValue ="男";
if(!bValue){
textValue = "女";
}
cell.setCellValue(textValue);
}else if(value instanceof Date){
Date date = (Date)value;
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
textValue = sdf.format(date);
cell.setCellValue(textValue);
}else if(value instanceof byte[]){
// 有图片时,设置行高为60px;
row.setHeightInPoints(60);
// 设置图片所在列宽度为80px,注意这里单位的一个换算
sheet.setColumnWidth(i,(short)35.7*80);
// sheet.autoSizeColumn(i);
byte[] bsValue = (byte[])value;
HSSFClientAnchor anchor = new HSSFClientAnchor(0,0,1023,255,(short)6,index,(short)6,index);
// anchor.setAnchorType(2);
patriarch.createPicture(anchor, workbook.addPicture(bsValue, HSSFWorkbook.PICTURE_TYPE_JPEG));
}else{
// 其他数据类型都当作字符串简单处理
if(null == value){
value = "未知区域";
}
textValue = value.toString();
}
// 如果不是图片数据,就利用正则表达式判断textValue是否全部有数字组成
if(textValue != null){
Pattern p = Pattern.compile("^//d+(//.//d+)?$");
Matcher matcher = p.matcher(textValue);
if(matcher.matches()){
// 是数字当double处理
cell.setCellValue(Double.parseDouble(textValue));
}else{
HSSFRichTextString richString = new HSSFRichTextString(textValue);
HSSFFont font3 = workbook.createFont();
font3.setColor(HSSFColor.BLUE.index);
richString.applyFont(font3);
cell.setCellValue(richString);
}
}
} }

啦啦啦

啦啦啦

啦啦啦

啦啦啦

JAVA WEB ------ 文件下载及导出数据到office Execl表格的更多相关文章

  1. Java Web文件下载

    Web文件下载有两种.一种是文件在站点文件夹下.在浏览器中直接输入文件路径就可以下载.如http://www.xxx.com/file.zip.第二种是文件不在站点文件夹下或者文件是动态生成的(导出报 ...

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

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

  3. 【Servlet】java web 文件下载功能实现

    需求:实现一个具有文件下载功能的网页,主要下载压缩包和图片 两种实现方法: 一:通过超链接实现下载 在HTML网页中,通过超链接链接到要下载的文件的地址 <!DOCTYPE html> & ...

  4. java使用jxl,自动导出数据excle,quartz自动发送邮件

    =============JAVA后台代码===================== package com.qgc.service.autoSendMsg.AutoSendMsg import ja ...

  5. Java WEB中的HttpServletResponse数据传递

    1.什么是HttpServletResponse 2.使用HttpServletResponse向浏览器发送数据及相关实例. 实例1:实现文件下载功能 实例2:实现验证码注册 实例3:实现页面3秒后跳 ...

  6. 借助 AOP 为 Java Web 应用记录性能数据

    作为开发者,应用的性能始终是我们最感兴趣的话题之一.然而,不是所有的开发者都对自己维护的应用的性能有所了解,更别说快速定位性能瓶颈并实施解决方案了. 今年北京 Velocity 的赞助商大多从事 AP ...

  7. java web文件下载功能实现 (转)

    http://blog.csdn.net/longshengguoji/article/details/39433307 需求:实现一个具有文件下载功能的网页,主要下载压缩包和图片 两种实现方法: 一 ...

  8. java POI技术之导出数据优化(15万条数据1分多钟)

    专针对导出excel2007 ,用到poi3.9的jar package com.cares.ynt.util; import java.io.File; import java.io.FileOut ...

  9. java从ldap中导出数据到ldif文件中

    原创:http://www.cnblogs.com/dqcer/p/7814034.html 导入ldap.jar包,笔者已对下面两个文件测试并通过.若有疑问欢迎留言 LDAPExport.java ...

随机推荐

  1. Android训练课程(Android Training) - 高效的显示图片

    高效的显示图片(Displaying BitmapsEfficiently) 了解如何使用通用的技术来处理和读取位图对象,让您的用户界面(UI)组件是可响应的,并避免超过你的应用程序内存限制的方式.如 ...

  2. SpringBoot的文件下载

    SpringBoot的文件下载 2017年11月29日 10:32:20 阅读数:3907 SpringBoot的文件下载方法有很多,此处只记录使用Spring的Resource实现类FileSyst ...

  3. CSS Notes

    Margin vs. PaddingMargin is on the outside of block elements while padding is on the inside. Use mar ...

  4. print、print_r、echo到底有什么区别?

    echo和print都可以做输出,不同的是,echo不是函数,没有返回值,而print是一个函数有返回值,所以相对而言如果只是输出 echo 会更快,而print_r通常用于打印变量的相关信息,通常在 ...

  5. css之-webkit-scrollbar

    在IE中可以自定义滚动条的样式 ,基于webkit的浏览器现在也可以自定义其样式: ::-webkit-scrollbar              { /* 1 */ }   ::-webkit-s ...

  6. Opengl绘制我们的小屋(三)纹理绘制

    本准备先说光照相关实现,但是发现对那个模型实在看不下去了,于是先绘制纹理. 先看下基本纹理贴上去的显示效果.具体模型图请看上篇文章的实现,这篇只讲纹理实现. 我们常见的纹理绘制差不多如下,先写一个纹理 ...

  7. 64位debian系统下安装inodeClient

    linux下的inodeClient下载: 链接:http://pan.baidu.com/s/1jIoX6Zk 密码:vnws 里面包括一份说明书,一个32位的,一个64位的文件: 对于64位的客户 ...

  8. e799. 限制JSlider的数值在标记以内

    By default, the slider can take on any value from the minimum to the maximum. It is possible to conf ...

  9. (转)FFMPEG的一些使用技巧

    1.查看FFMPEG的日志信息 在vc中使用ffmpeg静态库做二次开发的时候,如果不是控制台应用程序,又需要查看ffmpeg的日志信息,可使用 av_log_set_callback 函数注册一个回 ...

  10. CI框架 -- 核心文件 之 Output.php(输出类文件)

    CI输出类Output.php的功能是将最终web页面发送给浏览器,这里面的东西可能是你用的最少的.你使用装载器加载了一个视图文件, 这个视图文件的内容会自动传递给输出类对象, 然后呢,在方法执行完毕 ...