@RequestMapping(value = "downloadExcel", method = RequestMethod.GET)
public String download(HttpServletRequest request,HttpServletResponse response) throws IOException{
String fileName="excel文件";
//填充projects数据
ExcelUtil excelUtil = new ExcelUtil();
List<Project> projects = excelUtil.createData();
List<Map<String,Object>> list = excelUtil.createExcelRecord(projects);
String columnNames[]={"ID","项目名","销售人","负责人","所用技术","备注"};//列名
String keys[] = {"id","name","saler","principal","technology","remarks"};//map中的key
ByteArrayOutputStream os = new ByteArrayOutputStream();
try {
ExcelUtil.createWorkBook(list,keys,columnNames).write(os);
} catch (IOException e) {
e.printStackTrace();
}
byte[] content = os.toByteArray();
InputStream is = new ByteArrayInputStream(content);
// 设置response参数,可以打开下载页面
response.reset();
response.setContentType("application/vnd.ms-excel;charset=utf-8");
response.setHeader("Content-Disposition", "attachment;filename="+ new String((fileName + ".xls").getBytes(), "utf-8"));
ServletOutputStream out = response.getOutputStream();
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
bis = new BufferedInputStream(is);
bos = new BufferedOutputStream(out);
byte[] buff = new byte[2048];
int bytesRead;
while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
bos.write(buff, 0, bytesRead);
}
bos.flush();
} catch (final IOException e) {
logger.error("导出Excel异常:",e);
throw e;
} finally {
if (bis != null)
bis.close();
if (bos != null)
bos.close();
}
return null;
}
/**
* 导出Excel
* @param request
* @param response
*/
@RequestMapping(value = "ProcessRequestExcel", method = RequestMethod.GET)
public void ProcessRequest(HttpServletRequest request,HttpServletResponse response){
java.text.SimpleDateFormat format = new java.text.SimpleDateFormat("yyyyMMddhhmmss");
String now = format.format(new Date());
String exportFileName = "信息导出_"+now+".xls";//导出文件名
List<Basicinfo> list = getInfoList();
HSSFWorkbook workBook = null;
String[] cellTitle = {"序号", "姓名", "性别", "部门"};
try {
workBook = new HSSFWorkbook();//创建工作薄
HSSFSheet sheet = workBook.createSheet();
workBook.setSheetName(0, "订单信息");//工作簿名称
HSSFFont font = workBook.createFont();
font.setColor(HSSFFont.COLOR_NORMAL);
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
HSSFCellStyle cellStyle = workBook.createCellStyle();//创建格式
cellStyle.setFont(font);
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
//创建第一行标题
HSSFRow titleRow = sheet.createRow((short) 0);//第一行标题
for(int i = 0,size = cellTitle.length; i < size; i++){//创建第1行标题单元格
sheet.setColumnWidth(i,4000);
HSSFCell cell = titleRow.createCell(i,0);
cell.setCellStyle(cellStyle);
cell.setCellValue(cellTitle[i]);
}
//从第二行开始写入数据
for(int i=1,size = list.size();i<size;i++){
HSSFRow row = sheet.createRow((short) i);
Basicinfo entity = list.get(i);
for (int j = 0,length=cellTitle.length; j < length; j++) {
HSSFCell cell = row.createCell(j, 0);// 在上面行索引0的位置创建单元格
cell.setCellType(HSSFCell.CELL_TYPE_STRING);// 定义单元格为字符串类型
switch(j){// 在单元格中输入一些内容
case 0:
cell.setCellValue(String.valueOf(i));
break;
case 1:
cell.setCellValue(entity.getName());
break;
case 2:
cell.setCellValue(entity.getSex());
break;
case 3:
cell.setCellValue(entity.getDepart());
break;
}
}
}
// 表示以附件的形式把文件发送到客户端
response.setHeader("Content-Disposition", "attachment;filename=" + new String((exportFileName).getBytes(), "ISO8859-1"));//设定输出文件头
response.setContentType("application/vnd.ms-excel;charset=UTF-8");// 定义输出类型
// 通过response的输出流把工作薄的流发送浏览器形成文件
OutputStream outStream = response.getOutputStream();
workBook.write(outStream);
outStream.flush();
outStream.close();
}catch(IOException e){
System.out.println("IO 异常!"+e.getMessage());
e.printStackTrace();
}finally{
}
}
/**
* 模拟数据库获取信息
* @return
*/
@SuppressWarnings("unchecked")
public List<Basicinfo> getInfoList(){
List<Basicinfo> list = new ArrayList();
for(int i=1;i<101;i++){
Basicinfo entity = new Basicinfo();
entity.setName("员工"+i);
entity.setSex(i%2==1?"男":"女");
entity.setDepart(i>80?"销售部":"财务部");
list.add(entity);
}
return list;
}
- java导出excel报错:getOutputStream() has already been called for this response
对于java导出excel报错的问题,查了很多都说是在使用完输出流以后调用以下两行代码即可 out.clear(); out = pageContext.pushBody(); 但这也许是页面上输出时 ...
- java导出excel表格
java导出excel表格: 1.导入jar包 <dependency> <groupId>org.apache.poi</groupId> <artifac ...
- java导出excel报表
1.java导出excel报表: package cn.jcenterhome.util; import java.io.OutputStream;import java.util.List;impo ...
- Java导出Excel和CSV(简单Demo)
Java导出Excel和CSV的简单实现,分别使用POI和JavaCSV. JavaBean public class ReportInfo { int id; String date; int nu ...
- Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类
Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类 ============================== ©Copyright 蕃薯耀 20 ...
- java导出excel模板数据
Java导出excel数据模板,这里直接贴代码开发,流程性的走下去就是步骤: String[] colName=new String[]{"期间","科目代码" ...
- java导出excel工具类
java导出excel须要使用HSSFWorkbook这个类,须要导入poi-3.6-20091214.jar 工具类调用例如以下: package com.qlwb.business.util; i ...
- [转载]Java导出Excel
一.需求介绍 当前B/S模式已成为应用开发的主流,而在开发企业办公系统的过程中,常常有客户这样子要求:把系统数据库中的数据导出到Excel,用户查看报表时直接用Excel打开.或者是:用户已经习惯用E ...
- java 通过Apache poi导出excel代码demo实例
package com.zuidaima.excel.util; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutput ...
随机推荐
- python爬虫踩坑教程
我们的目标是爬取下面这个个网址上的2010~2018年的数据 http://stockdata.stock.hexun.com/zrbg/Plate.aspx?date=2015-12-31 获取我们 ...
- 目标检测之YOLO V2 V3
YOLO V2 YOLO V2是在YOLO的基础上,融合了其他一些网络结构的特性(比如:Faster R-CNN的Anchor,GooLeNet的\(1\times1\)卷积核等),进行的升级.其目的 ...
- [FromBody]与[FromForm]区别
[FromBody]与[FromForm]区别 1,fromBody:在cation方法传入参数后添加[frombody]属性,参数将以一个整体的josn对象的形式传递. 2,fromform:在ca ...
- 处理安卓和ios当页面原生键盘弹出,输入框不显示
$('input').on('click', function () { var target = this; // 使用定时器是为了让输入框上滑时更加自然 setTimeout(function() ...
- Java实现发送手机验证码功能(短信+语音)
利用第三方平台可以实现发送手机短信验证码和语音验证码的功能,本文使用框架是struts2+spring+hibernate,现就action层给出核心代码功能. public class Verify ...
- Fork/Jion框架详解
◆Fork/Jion框架可以干什么◆ 如果你要处理1万条数据,但是你的能力暂时还不够,一个简单快捷的办法就是你可以把每次只处理100条,等到处理100次之后再把所有的结果聚合起来你就处理完了这1万条数 ...
- 模式识别笔记4-集成学习之AdaBoost
目前集成学习(Ensemble Learning) 分为两类: 个体学习器间存在强依赖关系.必须串行化生成的序列化方法:Boosting 个体学习器间不存在强依赖关系,可同时生成的并行化方法:Bagg ...
- 前端性能优化之gzip
前言: 如果你是个前端开发人员,你肯定知道线上环境要把js,css,图片等压缩,尽量减少文件的大小,提升响应速度,特别是对移动端,这个非常重要.常用的前端性能优化方法有如下几种 一.减少http请求 ...
- Postman:传递的参数是List类型时 传参格式的写法
Postman传递的参数是List类型 实体类中引用了一个List,泛型为其他实体类 参数是List集合时,Postman中参数格式如下图所示: 有不明白的地方,欢迎留言
- .NET Core微服务之基于App.Metrics+InfluxDB+Grafana实现统一性能监控
Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.关于App.Metrics+InfluxDB+Grafana 1.1 App.Metrics App.Metrics是一款开源的支持. ...