利用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 / ...
随机推荐
- Canvas动画:地球绕着太阳转
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...
- redux.js的基本使用
1.先是安装reduxJx, cnpm i --save rudux 2.创建一个store的js文件 3.使用import来引用 redux import { createStore } from ...
- MySQL查询语句积累
#查询名字中带李且名字是两个字的所有学生信息 SELECT * FROM user_test WHERE user_name LIKE '李_';
- 2019-2-27-win10-uwp-去掉-Flyout-边框
title author date CreateTime categories win10 uwp 去掉 Flyout 边框 lindexi 2019-02-27 17:48:46 +0800 201 ...
- dotnet 手动解决 json 解析中不合法字符串
如果使用 Newtonsoft Json 解析字符串,字符串里面有不清真的格式,那么默认的解析将会炸掉.如果想要自己解决字符串中的不清真格式,可以使用传入 JsonSerializerSettings ...
- java 环境 笔记
1. 下载idea https://blog.csdn.net/yl1712725180/article/details/80309862 破解方法: 针对20 ...
- [板子]KMP
KMP板子,你甚至可以用这个板子A掉luogu的3375 基础懒得说,要求一个Next数组. #include<cstdio> #include<algorithm> #inc ...
- 谈谈IC、ASIC、SoC、MPU、MCU、CPU、GPU、DSP、FPGA、CPLD
IC (integrated circuit) 集成电路:微电路.微芯片.芯片:集成电路又分成:模拟集成电路(线性电路).数字集成电路.数/模混合集成电路: 模拟集成电路:产生.放大.处理各种模拟信号 ...
- Microsoft Edge 离线安装包下载
Microsoft Edge 现已准备就绪 下一版 Microsoft Edge 已准备好进行企业评估. 立即下载离线安装程序.查看管理策略并尝试 Internet Explorer 模式. http ...
- Java面试思路
一.javaSE基础 1.java IO流 2.java NIO 3.java集合 4.java注解 5.java泛型 6.java反射 7.java多线程 8.常用String.数组.日期操作 二. ...