/**
* 导出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. Codeforces 749C【模拟】

    FST的时候好像挂了挺多人的~ 其实思路没啥难的,就是更好地理解题意吧,1到n一直循环,直到没有人能vote,一个人能vote也能叉掉一个人,一个人被叉就不能vote,判谁赢. 其实我管vote干嘛, ...

  2. CodeForces 689B【最短路】

    题意: 给你一副图,给出的点两两之间的距离是abs(pos1-pos2),然后给你n个数是表示该pos到x的距离是1. 思路: 直接建边,跑spfa就好了.虽然说似乎题意说边很多,其实只要建一下相邻的 ...

  3. bzoj 3158: 千钧一发【最小割】

    这个条件非常妙啊,奇数和奇数一定满足1,因为\( (2a+1)^2+(2b+1)^2=4a^2+4a+4b^2+4b+2=2(2(a^2+a+b^2+b)+1) \)里面这个一定不是平方数因为除二后是 ...

  4. 微信小程序云开发之云函数的创建与环境配置

    云函数的使用与环境配置: 1.创建云函数 右键cloudfunctions文件选择新建Node.js云函数,云函数命名为updateVoice用于修改用户语音数量. 2.安装node.js及npm: ...

  5. C#主从表查询

    软件的使用必然涉及到主表和子表的操作,我们先在SQLite中创建子表.比如 创建一学生信息表做主表,再创建一个学生成绩表做子表.然后我们在程序中成绩 方法来连接子表. 判断bindingsource中 ...

  6. Linux 软连接和硬连接(转)

    1.Linux链接概念Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接. [硬连接]硬连接指通过索引节点 ...

  7. vijos次小生成树

    xiaomengxian的哥哥是一个游戏迷,他喜欢研究各种游戏.这天,xiaomengxian到他家玩,他便拿出了自己最近正在研究的一个游戏给xiaomengxian看.这个游戏是这样的:一个国家有N ...

  8. springMVC 类型转换

    springMVC 类型转换 https://www.cnblogs.com/hafiz/p/5812873.html

  9. SpringBoot | Thymeleaf | 局部更新

    建立一个实体类: public class Fruit { int id; String name; public Fruit() { } public Fruit(int id, String na ...

  10. [题解](区间质数筛)POJ_2689 Prime Distance

    区间筛素数:先筛出1~sqrt(R)的素数,然后对于每个询问只要用这些素数筛掉区间内的合数即可. 几个细节:1.特判和1有关的一些情况 2.每次减去L偏移量,数组只开区间大小 3.POJ无法使用万能头 ...