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

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. C# 在 构造函数添加 CallerMemberName 会怎样

    在 C# 中有一个特性 CallerMemberName 可以给方法知道调用这个方法的方法名,在 UWP 中用这个特性很多,特别是在使用 MVVM 绑定 如果在构造函数使用这个特性会发生什么? 构造函 ...

  2. 浏览器的内核分别是什么?经常遇到的浏览器的兼容性有哪些?原因,解决方法是什么,常用hack的技巧 ?

    * IE浏览器的内核Trident. Mozilla的Gecko.google的WebKit.Opera内核Presto: * png24为的图片在iE6浏览器上出现背景,解决方案是做成PNG8. * ...

  3. 一个基于 Slab 缓存的 scull: scullc

    是时候给个例子了. scullc 是一个简化的 scull 模块的版本, 它只实现空设备 -- 永久 的内存区. 不象 scull, 它使用 kmalloc, scullc 使用内存缓存. 量子的大小 ...

  4. 【转】AUC(Area Under roc Curve )计算及其与ROC的关系

    让我们从头说起,首先AUC是一种用来度量分类模型好坏的一个标准.这样的标准其实有很多,例如:大约10年前在machine learning文献中一统天下的标准:分类精度:在信息检索(IR)领域中常用的 ...

  5. Linux中找不到ifconfig命令的解决方法

    1.ifconfig命令是设置或显示网络接口的程序,可以显示出我们机器的网卡信息,可是有些时候最小化安装CentOS等Linux发行版的时候会默认不安装ifconfig等命令,这时候你进入终端,运行i ...

  6. LeetCode150_Evaluate Reverse Polish Notation评估逆波兰表达式(栈相关问题)

    题目: Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are+, ...

  7. A non well formed numeric value encountered

    在从数据库获取时间戳数据的时候返回的结果是varchar类型 然后在用date("Y-m-d H:i:s", 时间戳)的时候会报错A non well formed numeric ...

  8. 基于python的二分搜索和例题

    二分搜索 二分概念 二分搜索是一种在有序数组中查找某一特定元素的搜索算法. 搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束: 如果某一特定元素大于或者小于中间元素,则在数 ...

  9. win32简单的sockeTCP协议通信

    什么也不说了看代码 首先是服务端代码 #include <stdio.h> #include <stdlib.h> #include <WinSock2.h> #i ...

  10. 【题解】NOIP2017 提高组 简要题解

    [题解]NOIP2017 提高组 简要题解 小凯的疑惑(数论) 不讲 时间复杂度 大力模拟 奶酪 并查集模板题 宝藏 最优解一定存在一种构造方法是按照深度一步步生成所有的联通性. 枚举一个根,随后设\ ...