/**
* 导出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)的更多相关文章

  1. springmvc 导出excel

    1.pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www ...

  2. Springmvc导出Excel(maven)

    一.导入依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</ar ...

  3. Java中导入导出Excel -- POI技术

    一.介绍: 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已经习惯用Excel打印.这样在我们实 ...

  4. SpringMVC导出Excel

    import java.math.BigDecimal; import java.net.URLEncoder; import java.text.SimpleDateFormat; import j ...

  5. springmvc导出excel并弹出下载框

    https://my.oschina.net/aptx4869/blog/298507

  6. springMVC框架+POI组件导出Excel

    目的:访问url(http://localhost:8080/POIOutputExcel/outputexcel.do)实现excel导出,效果图如下: 文件目录(配置文件就不多说了,跟前面的随笔一 ...

  7. poi合并单元格同时导出excel

    poi合并单元格同时导出excel POI进行跨行需要用到对象HSSFSheet对象,现在就当我们程序已经定义了一个HSSFSheet对象sheet. 跨第1行第1个到第2个单元格的操作为 sheet ...

  8. POI导入和导出Excel总结

    POI导入和导出Excel总结   POI使用总结 1.POI读取Excel 打开工作簿的方式有以下两种简单的应用,POI读取和输出工作簿文件都可以通过以下两种方式来声明: //通过输入流的方式打开本 ...

  9. 关于EasyPoi导出Excel

    如果你觉得Easypoi不好用,喜欢用传统的poi,可以参考我的这篇博客:Springmvc导出Excel(maven) 当然了,万变不离其宗.Easypoi的底层原理还是poi.正如MyBatis ...

随机推荐

  1. HDU3038【种类并查集】

    题意: 给出m组区间[a,b],以及其区间的和,问有矛盾的有几组: 思路: 种类并查集. 主要是几个关系:同类元素的关系,父亲与儿子的关系,不同类元素的关系: 我们可以类似看作一个前缀和,sum[x] ...

  2. 如何实现一个无边框Form的移动和改变大小(二)

    接着上文:这里写链接内容 我们来说说一个比较复杂的实现, 效果如图: 注意为了能够凸显没有NC(NotClient)区域,我们额外用了3个panel分别放在窗体的左右和下部.用来模拟客户自己的控件. ...

  3. java 阻塞队列(转)

    转自 http://ifeve.com/java-blocking-queue/ 1. 什么是阻塞队列? 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列.这两个附加的操作是:在队列 ...

  4. UINavigationController 的一些坑

    坑一:自定义导航栏返回键 iOS7及之后版本 手势边缘右滑返回失效 解决方案: -(void)viewDidLoad{ [super viewDidLoad]; //self 为 UINavigati ...

  5. Centos 7.x 安装 MongoDB

    官方安装资料:点击直达 本次以Centos为安装主机 1:首先先导入MongoDB的yum源,因为Centos默认是没有MongoDB的yum源,创建文件:/etc/yum.repos.d/mongo ...

  6. C# 获取当前ip

    1.获取局域网ip IPAddress ipAddr = Dns.Resolve(Dns.GetHostName()).AddressList[0];//获得当前IP地址 string ip=ipAd ...

  7. flask_之参数传递

    参数篇 request接收数据 request对象 method:当前请求方法(POST,GET等) url:当前链接地址 path:当前链接的路径 environ:潜在的WSGI环境 headers ...

  8. BZOJ1415(期望dp)

    解法: 首先bfs预处理go数组:可可在j点时聪聪在点i是怎样贪心走的,这是为了之后O(1)获取转移线路. 然后dfs记忆化一下f[i][j],代表从i到j的期望,对于每层:将所有情况的期望值相加.边 ...

  9. 基于阿里云SLB/ESS/EIP/ECS/VPC的同城高可用方案演练

    今天基于阿里云SLB/ESS/EIP/ECS/VPC等产品进行了一次同城高可用方案演练: 基本步骤如下: 1. 在华东1创建VPC网络VPC1,在华东1可用区B和G各创建一个虚拟交换机vpc1_swi ...

  10. Incorrect configuration: namenode address dfs.namenode.servicerpc-address or dfs.namenode.rpc-address is not configured.

    在搭建Hadoop集群的时候,遇到了这样的一个报错. 就在启动HDFS调用命令: start-dfs.sh 的时候,报错: 然后输密码就一直很奇怪,反正一直运行不成功. 百度了半天,确定是core-s ...