设计一个模型,在针对多中数据类型进行拓展

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文件的更多相关文章

  1. 前端下载excel文件功能的三种方法

    1 从后端接收json数据,前端处理生成excel下载 JsonExportExcel的github地址:https://github.com/cuikangjie/JsonExportExcel 这 ...

  2. 前端调用后端接口下载excel文件的几种方式

    今天有一个导出相应数据为excel表的需求.后端的接口返回一个数据流,一开始我用axios(ajax类库)调用接口,返回成功状态200,但是!但是浏览器没有自动下载excel表,当时觉得可能是ajax ...

  3. 在线读取Mongodb数据库下载EXCEL文件

    版本:Mongodb2.4.8 通过页面下载Excel文件 jsp <%@ page language="java" contentType="text/html; ...

  4. Xshell5下利用sftp上传下载传输文件

    sftp是Secure File Transfer Protocol的缩写,安全文件传送协议.可以为传输文件提供一种安全的加密方法.sftp 与 ftp 有着几乎一样的语法和功能.SFTP 为 SSH ...

  5. C# 之 下载EXCEL文件,自动用迅雷下载aspx

    在浏览器中导出 Excel 得时候,如果浏览器绑定了迅雷,则会下载aspx文件. 解决:下载EXCEL文件,自动用迅雷下载aspx if (Request.QueryString["id&q ...

  6. jsp下载excel文件

    jsp下载excel文件的的实现方法很多,今天也遇到这个问题,乱敲了一阵,终于搞定了,记下来和朋友们分享吧. 假设需要下载excel文件的jsp页面名为:down.jsp 对应的后台action名为: ...

  7. JAVA web端JS下载excel文件

    JSP代码如下: JSP端引入jquery.easyui.min.js库: <script type="text/javascript" src="<c:ur ...

  8. angularJS通过post方法下载excel文件

    最近工作中遇到,要使用angularJS的post方法来下载excel的情况.网上找到一个帖子:http://stackoverflow.com/questions/22447952/angularj ...

  9. NodeJs实现下载Excel文件

    nodejs作为一门新的语言,报表功能也不是十分完善. (1).js-xlsx : 目前 Github 上 star 数量最多的处理 Excel 的库,支持解析多种格式表格XLSX / XLSM / ...

随机推荐

  1. 2018-10-19-jekyll-添加-Valine-评论

    title author date CreateTime categories jekyll 添加 Valine 评论 lindexi 2018-10-19 09:10:40 +0800 2018-2 ...

  2. egg-socket在egg中的使用

    WebSocket 的产生源于 Web 开发中日益增长的实时通信需求,对比基于 http 的轮询方式,它大大节省了网络带宽,同时也降低了服务器的性能消耗: socket.io 支持 websocket ...

  3. ZR10.1青岛集训三地联考

    ZR10.1青岛集训三地联考 谢谢dijk和smy A 题目大意: 已知斐波那契数列\(f\) 设 \[ F_i = \sum_{i = 0}^nf_if_{n - i} \] 求 \[ \sum_{ ...

  4. sort排序,按指定字段进去重,sort -t "^" -k 8 -su,ls给文件名中数字排序sort -k1.5n,Tab符要转义

    sort sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出.如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序. sort语法 ...

  5. 2018-2-13-git-合并两个仓库

    title author date CreateTime categories git 合并两个仓库 lindexi 2018-2-13 17:23:3 +0800 2018-2-13 17:23:3 ...

  6. vue移动端图片上传压缩

    上传压缩方法 import {api} from '../../api/api.js'; import axios from 'axios'; export function imgPreview ( ...

  7. <QluOJ2018NewCode>约数个数

    题目描述 p^q表示p的q次方,正整数M可以分解为M=(p1^a1)*(p2^a2)*(p3^a3)*……*(pn^an)的形式,其中p1,p2……pn为质数(大于1并且只能被1和自身整除的数叫做质数 ...

  8. 用postman验证接口是否可掉通

    1.结合fidder抓包工具 2.打开postman 3.点击Launchpad右边“+” 4.选择postman,url粘贴fidder抓出来的数据 5.Header中粘贴fidder抓出来的KEY ...

  9. .NetCore集成Dapr踩坑经历

    该篇内容由个人博客点击跳转同步更新!转载请注明出处 前言 之前自己有个core2.2的项目一直是用的Surging作为微服务框架的,后来了解到了Dapr,发现比较轻量级,开发部署等也非常方便,故将自己 ...

  10. zabbix脚本监控mysql

    Zabbix监控mysql 1.1 客户端配置 1.1.1 安装客户端包 yum -y install unixODBC rpm -ivh zabbix-agent--.el6.x86_64.rpm ...