利用Springmvc的AbstractXlsxView下载Excel文件
设计一个模型,在针对多中数据类型进行拓展
public abstract class ExcelView extends AbstractXlsxView {
public CellStyle cellStyle;
/**
* 设置样式
*/
protected abstract void setStyle(Workbook workbook);
/**
* 设置row由子类实现
*/
protected abstract void setRowStyle(Sheet sheet, Map<String, Object> map);
@Override
protected void buildExcelDocument(
Map<String, Object> model, Workbook workbook, HttpServletRequest request, HttpServletResponse response)
throws Exception{
//自定义文件名称
String excelName = DateUtil.getSdfTimes()+".xlsx";
String Agent = request.getHeader("User-Agent");
if (null !=Agent){
Agent = Agent.toLowerCase();
//针对火狐乱码的处理
if (Agent.indexOf("firebox") !=-1){
response.setHeader("content-disposition", String.format("attachment;filename*=utf-8'zh_cn'%s", URLEncoder.encode(excelName, "utf-8")));
} else {
response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(excelName, "utf-8"));
}
}
response.setContentType("application/ms-excel; charset=UTF-8");
Sheet sheet = workbook.createSheet("User Detail");
sheet.setDefaultColumnWidth(30);
this.setStyle(workbook);
setRowStyle(sheet, model);
}
}
拓展的数据类型
public class OrdersExcleView extends ExcelView{
//样式设置
@Override
protected void setStyle(Workbook workbook) {
}
@Override
protected void setRowStyle(Sheet sheet, Map<String, Object> map) {
//创建行的头部
Row header = sheet.createRow(0);
header.createCell(0).setCellValue("订单ID");
header.getCell(0).setCellStyle(super.cellStyle);
header.createCell(1).setCellValue("订单总价");
header.getCell(1).setCellStyle(super.cellStyle);
header.createCell(2).setCellValue("收货人");
header.getCell(2).setCellStyle(super.cellStyle);
header.createCell(3).setCellValue("手机号码");
header.getCell(3).setCellStyle(super.cellStyle);
header.createCell(4).setCellValue("省份");
header.getCell(4).setCellStyle(super.cellStyle);
header.createCell(5).setCellValue("地址");
header.getCell(5).setCellStyle(super.cellStyle);
List<PageData> orderList= (List<PageData>) map.get("orderList");
int rowCount = 1;
for (PageData pageData : orderList) {
// String totalprice = pageData.getString("TOTALPRICE");
String totalprice = String.valueOf(pageData.get("TOTALPRICE"));
System.out.println(totalprice);
Row userRow = sheet.createRow(rowCount++);
userRow.createCell(0).setCellValue(pageData.getString("ORDERSN"));
userRow.createCell(1).setCellValue(totalprice);
userRow.createCell(2).setCellValue(pageData.getString("CONSIGNEE"));
userRow.createCell(3).setCellValue(pageData.getString("MOBILE"));
userRow.createCell(4).setCellValue(pageData.getString("PROVINCENAME"));
userRow.createCell(5).setCellValue(pageData.getString("ADDRESS"));
}
}
}
下面是controller
@RequestMapping(value = "/download",method = RequestMethod.GET)
public ModelAndView download() throws Exception {
PageData pageData = new PageData();
List<PageData> list = ordersService.listAll(pageData); Map<String, Object> map = new HashMap<String, Object>();
map.put("orderList",list);
// ExcelView excelView = new ExcelView();
ExcelView view = new OrdersExcleView();
return new ModelAndView(view, map);
}
利用Springmvc的AbstractXlsxView下载Excel文件的更多相关文章
- 前端下载excel文件功能的三种方法
1 从后端接收json数据,前端处理生成excel下载 JsonExportExcel的github地址:https://github.com/cuikangjie/JsonExportExcel 这 ...
- 前端调用后端接口下载excel文件的几种方式
今天有一个导出相应数据为excel表的需求.后端的接口返回一个数据流,一开始我用axios(ajax类库)调用接口,返回成功状态200,但是!但是浏览器没有自动下载excel表,当时觉得可能是ajax ...
- 在线读取Mongodb数据库下载EXCEL文件
版本:Mongodb2.4.8 通过页面下载Excel文件 jsp <%@ page language="java" contentType="text/html; ...
- Xshell5下利用sftp上传下载传输文件
sftp是Secure File Transfer Protocol的缩写,安全文件传送协议.可以为传输文件提供一种安全的加密方法.sftp 与 ftp 有着几乎一样的语法和功能.SFTP 为 SSH ...
- C# 之 下载EXCEL文件,自动用迅雷下载aspx
在浏览器中导出 Excel 得时候,如果浏览器绑定了迅雷,则会下载aspx文件. 解决:下载EXCEL文件,自动用迅雷下载aspx if (Request.QueryString["id&q ...
- jsp下载excel文件
jsp下载excel文件的的实现方法很多,今天也遇到这个问题,乱敲了一阵,终于搞定了,记下来和朋友们分享吧. 假设需要下载excel文件的jsp页面名为:down.jsp 对应的后台action名为: ...
- JAVA web端JS下载excel文件
JSP代码如下: JSP端引入jquery.easyui.min.js库: <script type="text/javascript" src="<c:ur ...
- angularJS通过post方法下载excel文件
最近工作中遇到,要使用angularJS的post方法来下载excel的情况.网上找到一个帖子:http://stackoverflow.com/questions/22447952/angularj ...
- NodeJs实现下载Excel文件
nodejs作为一门新的语言,报表功能也不是十分完善. (1).js-xlsx : 目前 Github 上 star 数量最多的处理 Excel 的库,支持解析多种格式表格XLSX / XLSM / ...
随机推荐
- linux内存池
在内核中有不少地方内存分配不允许失败. 作为一个在这些情况下确保分配的方式, 内核 开发者创建了一个已知为内存池(或者是 "mempool" )的抽象. 一个内存池真实地只是一 类 ...
- 消息驱动Bean
消息驱动bean是专门用来处理基于消息请求的组件.MDB负责处理消息,而EJB容器则负责处理服务(事务,安全,并发,消息确认等),使Bean的开发者集中精力在处理消息的业务逻辑上. 消息驱动Bean. ...
- 2019牛客多校第二场 A Eddy Walker(概率推公式)
2019牛客多校第二场 A Eddy Walker(概率推公式) 传送门:https://ac.nowcoder.com/acm/contest/882/A 题意: 给你一个长度为n的环,标号从0~n ...
- Libra和中国央行数字货币(DCEP)的对比
最近偶然和朋友讨论起Libra,对Libra和央行的数字货币方案很感兴趣.梳理了阅读资料(参考见文末)和自己的思考,发知乎留个记录. Libra 是什么? 无国界货币 + 为全球数十亿人服务的金融基础 ...
- 根据经纬度查询附近几公里的门店(<5)代表5公里
select * from 表名 where status=1 and isopen =0 and jingyingtype=1 and waimai=1 and bstatus = 1 and (a ...
- VRchat模型之unity
VRChat模型制作及上传总篇(包含总流程和所需插件):https://www.cnblogs.com/raitorei/p/12015876.html 0.新建工程, 导入VRCSDK及动态骨骼插件 ...
- C#反射与特性(一):反射基础
目录 C#反射与特性(一):反射基础 1. 说明 1.1 关于反射.特性 2. 程序集操作 2.1 获取 程序集对象(Assembly) 2.2 Assembly 使用 2.3 获取程序集的方式 C# ...
- windows7下mysql8.0.18部署安装
一.前期准备(windows7+mysql-8.0.18-winx64) 1.下载地址:https://dev.mysql.com/downloads/ 2.选择直接下载不登录账号,下载的压缩包大概两 ...
- 分布式事务框架-seata初识
一.事务与分布式事务 事务,在数据库中指的是操作数据库的最小单位,往大了看,事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消. 那为什么会有分布式事务呢 ...
- $CF912E\ Prime\ Gift$ 二分+搜索
正解:二分+搜索 解题报告: 传送门$QwQ$ 因为翻译真的很$umm$所以还是写下题目大意$QwQ$,就说给定一个大小为$n$的素数集合,求出分解后只含这些质数因子的第$K$小整数 考虑先把质数分两 ...