springmvc导出excel(POI)
/**
* 导出excel表格
*/
@RequestMapping(value = "/doExportData", method = {RequestMethod.POST, RequestMethod.GET})
public void doExportUserData(HttpServletRequest request, HttpServletResponse response,ModelMap modelMap){
String enddate = (String) request.getParameter("enddate");
//查询数据列表
List<User> userList = aService.findByDate(enddate); // 生成提示信息,
response.setContentType("application/vnd.ms-excel"); try{
//拼凑文件名称:时间+随机数
String fileName = "" ;
String[] date2 = enddate.split("-");
for(int i=0;i<date2.length;i++){
fileName = fileName+date2[i];
}
//方法二:
//String fileName = enddate.replace("-", "");
fileName = fileName+Math.round(Math.random()*10000);//添加随机数
response.setHeader("content-disposition", "attachment;filename=" + fileName + ".xls");
// 产生工作簿对象
HSSFWorkbook workbook = new HSSFWorkbook();
//产生工作表对象
HSSFSheet sheet = workbook.createSheet("用户列表"); //设置sheet页名称
HSSFRow row = sheet.createRow(0);
HSSFCellStyle style = workbook.createCellStyle();
style.setAlignment(CellStyle.ALIGN_CENTER); // 创建一个居中格式
HSSFCell cell = row.createCell(0);
cell.setCellValue("部门名称");
cell.setCellStyle(style);
cell = row.createCell(1);
cell.setCellValue("工号");
cell.setCellStyle(style);
cell = row.createCell(2);
cell.setCellValue("姓名");
cell.setCellStyle(style);
cell = row.createCell(3);
cell.setCellValue("时间");
cell.setCellStyle(style); //循环数据
for (int i = 0; i < userList.size(); i++){
row = sheet.createRow(i + 1);
User user = userList.get(i);
//创建单元格,并设置值
row.createCell(0).setCellValue(user.getDeptName());
row.createCell(1).setCellValue(user.getUserid());
row.createCell(2).setCellValue(user.getName());
row.createCell(3).setCellValue(enddate);
}
//文件导出路径,项目中的exportfile文件下
String path = request.getSession().getServletContext()
.getRealPath("/");
String filePath =path+"exportfile\\"+fileName+".xls";
OutputStream os = new FileOutputStream(filePath);
workbook.write(os);
os.close(); //下载文件(只是导出到了相应的文件下面,下载中没有,不添加此方法,在谷歌浏览器中不能直接可以打开文件,提示保存文件名称不一致,打开是空的)
File templateFile = new File(filePath);
FileUtil.downloadFile(response, templateFile);
}catch (Exception e){
e.printStackTrace();
}
}
FileUtil.java 下载相关的工具类
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.StringUtils; /**
* 文件工具类
*/
public class FileUtil { /**
* 下载文件
*
* @param response
* @param file
* @throws Exception
*/
public static void downloadFile(HttpServletResponse response, File file)
throws Exception { if (null == response || null == file)
return; InputStream is = null;
OutputStream os = null; if (file.exists()) {
// 2 文件名称
String fileName = getFileNameByCompleteFilePath(file.getName());
// 3 文件大小
String fileLength = String.valueOf(file.length());
// 4 下载文件名称
String realDownLoadFileName = new String(fileName.getBytes(),
"8859_1");
// 5 设置响应参数
response.reset();
response.setContentType("application/x-msdownload;");
response.setHeader("Content-disposition", "attachment; filename="
+ realDownLoadFileName);
response.setHeader("Content-Length", fileLength);
response.setHeader("Cache-Control",
"must-revalidate, post-check=0, pre-check=0");
response.setHeader("Pragma", "public");
response.setDateHeader("Expires",
System.currentTimeMillis() + 1000L);
try {
is = new BufferedInputStream(new FileInputStream(file));
os = new BufferedOutputStream(response.getOutputStream());
byte[] buffer = new byte[1024];
while (true) { int size = is.read(buffer, 0, 1024);
if (size == -1) { break;
}
os.write(buffer, 0, size);
} } catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (is != null) {
is.close();
}
} catch (IOException e) { e.printStackTrace();
}
try {
if (os != null) {
os.close();
}
} catch (IOException e) { e.printStackTrace();
}
}
response.setStatus(HttpServletResponse.SC_OK);
try { response.flushBuffer(); } catch (IOException e) { }
} else {
// System.out.println("下载文件不存在,文件路径: " + file.getAbsolutePath());
// 如果文件不存在,则创建异常对象并向上抛出
throw new Exception();
}
} public static String getFileNameByCompleteFilePath(String path) { if (StringUtils.isBlank(path))
return "";
// 1 转化路径为本地串
path = toLocalPath(path);
// 2 处理
if (StringUtils.isNotBlank(path)) {
int index = path.lastIndexOf(File.separator);
return path = path.substring(index + 1);
}
return "";
} public static final String toLocalPath(String pathString) { if (StringUtils.isBlank(pathString))
return "";
pathString = replace(pathString, "/", File.separator);
pathString = replace(pathString, "\\", File.separator);
return pathString;
}
public static final String replace(String line, String oldString,
String newString) { // 递归算法
int i = 0;
if ((i = line.indexOf(oldString, i)) >= 0) {
char[] line2 = line.toCharArray();
char[] newString2 = newString.toCharArray();
int oLength = oldString.length();
StringBuffer buf = new StringBuffer(line2.length);
buf.append(line2, 0, i).append(newString2);
i += oLength;
int j = i;
while ((i = line.indexOf(oldString, i)) > 0) {
buf.append(line2, j, i - j).append(newString2);
i += oLength;
j = i;
}
buf.append(line2, j, line2.length - j);
return buf.toString();
}
return line;
} }
springmvc导出excel(POI)的更多相关文章
- springmvc 导出excel
1.pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www ...
- Springmvc导出Excel(maven)
一.导入依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</ar ...
- Java中导入导出Excel -- POI技术
一.介绍: 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已经习惯用Excel打印.这样在我们实 ...
- SpringMVC导出Excel
import java.math.BigDecimal; import java.net.URLEncoder; import java.text.SimpleDateFormat; import j ...
- springmvc导出excel并弹出下载框
https://my.oschina.net/aptx4869/blog/298507
- springMVC框架+POI组件导出Excel
目的:访问url(http://localhost:8080/POIOutputExcel/outputexcel.do)实现excel导出,效果图如下: 文件目录(配置文件就不多说了,跟前面的随笔一 ...
- poi合并单元格同时导出excel
poi合并单元格同时导出excel POI进行跨行需要用到对象HSSFSheet对象,现在就当我们程序已经定义了一个HSSFSheet对象sheet. 跨第1行第1个到第2个单元格的操作为 sheet ...
- POI导入和导出Excel总结
POI导入和导出Excel总结 POI使用总结 1.POI读取Excel 打开工作簿的方式有以下两种简单的应用,POI读取和输出工作簿文件都可以通过以下两种方式来声明: //通过输入流的方式打开本 ...
- 关于EasyPoi导出Excel
如果你觉得Easypoi不好用,喜欢用传统的poi,可以参考我的这篇博客:Springmvc导出Excel(maven) 当然了,万变不离其宗.Easypoi的底层原理还是poi.正如MyBatis ...
随机推荐
- unity5之代码创建状态机,玩的666
http://blog.csdn.net/litaog00/article/details/50483189 最近做项目的时候用到了状态机,网上搜了一下帖子,大部分都是简单介绍使用方法的,讲解的详细的 ...
- jzoj5984. 【北大2019冬令营模拟2019.1.1】仙人掌 (分块)
题面 题解 数据结构做傻了.jpg 考虑每一个节点,它的儿子的取值最多只有\(O(\sqrt {m})\)种,那么可以用一个双向链表维护儿子的所有取值以及该取值的个数,那么对儿子节点修改一个值就是\( ...
- JDK1.7 和 jetty配置教程
系统是windows 7 64位版本,32位版本同理,xp系统的自己google设置环境变量 打开设置环境变量窗口,右键计算机->我的电脑,选择属性 点击高级系统设置 选择环境变量 红线为需要设 ...
- git合并某次提交到某个分支
有的时候,在develop分支开发,是大家公用的开发分支,但是只想合并自己提交的到master,如何操作呢?那就要用cherry-pick了. 语法 git cherry-pick commitid ...
- python错误之RuntimeError: dictionary changed size during iteration
pythonn报错信息: C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32\python.exe C:/Users/Ad ...
- 如何使用LESS 深度定制Bootstrap
一.LESS是什么? Less 是一门 CSS 预处理语言,它扩展了 CSS 语言,增加了变量.Mixin.函数等特性,使 CSS 更易维护和扩展. 中文介绍:http://lesscss.cn/ 有 ...
- [coci2015-2016 coii] dijamant【图论】
传送门:http://www.hsin.hr/coci/archive/2015_2016/ 进去之后的最下面的国家赛.顺便说一句,dijamant是克罗地亚语的“钻石”的意思. 官方题解是说压位的暴 ...
- 2个rman自动恢复的脚本
### scripts 1--the scirpt is used for restore db from vcs to a point to time recovery--and the targe ...
- 牛客网Java刷题知识点之什么是迭代器
不多说,直接上干货! https://www.nowcoder.com/ta/review-java/review?query=&asc=true&order=&page=20 ...
- php post提交超过1000个字段的时候服务器会截断多余部分
采取将子字段转化为json的形式,合并多个字段于一个字段