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

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. MySQL Workbench: mysqldump version mismatch

    Windows10 64bit系统下,步骤就是: Edit --> preferences --> Administrator --> Path to mysqldump tool: ...

  2. vue-learning:33 - component - 内置组件 - 过渡组件transition

    vue内置过渡组件transition 目录 什么是过渡 基本过渡或动画实现的语法 css过渡动画:transition / animation js过渡:特定事件钩子函数 各种情形下的过渡实现,使用 ...

  3. HDU 6444 Neko's loop(单调队列)

    Neko has a loop of size nn. The loop has a happy value aiai on the i−th(0≤i≤n−1)i−th(0≤i≤n−1) grid.  ...

  4. buerdepepeqi 的模版

    buerdepepeqi的模板 头文件 #include <set> #include <map> #include <deque> #include <qu ...

  5. 17.python内置函数2

    python内置函数1:https://www.cnblogs.com/raitorei/p/11813694.html # max,min高级玩法 # l=[1,3,100,-1,2] # prin ...

  6. 亲测可用的优雅的在已经安装了python的Ubuntu上安装python3.5

    我的Ubuntu上已经安装了python2.7和3.4. 用以下方法可以方便的顺利的安装python3.5,使用的时候也不会发生冲突. 一条一条输入以下语句 wget https://www.pyth ...

  7. mysql主丛之基于binlog的不停业务配置主从

    一 环境准备 主:192.168.132.121 从:192.168.132.122 主的数据库上面已经有数据,而且还在不断的写入 mysql> select * from darren.tes ...

  8. 精选腾讯技术干货200+篇,云加社区全年沙龙PPT免费下载!

    2019年已经过去,小编为大家整理了这一年以来云加社区发布的 200多篇腾讯干货,点击文章标题即可跳转到原文,请速速收藏哦~ 看腾讯技术: 腾讯成本优化黑科技:整机CPU利用率最高提升至90%: 腾讯 ...

  9. python接口自动化测试-unittest-生成测试报告

    用例的管理问题解决了后,接下来要考虑的就是报告我问题了,这里生成测试报告主要用到 HTMLTestRunner.py 这个模块,下面简单介绍一下如何使用: 一.下载HTMLTestRunner下载: ...

  10. 小小知识点(二十一)如何修改PPT母版上无法直接点击修改的文字

    1. 进入PPT后,选择下图右上角红色圈出的“视图”,接着选择下方红色圈出的“幻灯片母版”: 2.点击进入母版,如下图所示,最上面一栏第一个选项变成了“幻灯片母版”,在下面一栏最右边变成了“关闭母版视 ...