1:通过自定义的View视图可以让请求直接到一个Excel表去。

2:自定义的视图必须继承  AbstractXlsView /AbstractXlsxView / AbstractXlsxStreamingView其中的一个抽象类,并实现buildExcelDocument方法;

3:如果使用的org.springframework.web版本比较老,继承的是AbstractExcelView类,所以说这个类已经过时了。


具体实现:

1.使用Maven或者Gradle导包,这里以Gradle为例。

dependencies {
compile group: 'org.springframework', name: 'spring-webmvc', version: '5.0.4.RELEASE'
compile group: 'org.springframework', name: 'spring-context', version: '5.0.5.RELEASE'
compile group: 'org.springframework', name: 'spring-web', version: '5.0.5.RELEASE'
compile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.1.0'
compile group: 'javax.servlet', name: 'jsp-api', version: '2.0'
/*poi生成Excel*/
compile group: 'org.apache.poi', name: 'poi', version: '4.0.1'
compile group: 'org.apache.poi', name: 'poi-ooxml', version: '4.0.1' testCompile group: 'junit', name: 'junit', version: '4.12'
}

2.创建一个类:

ViewExcel

import com.lwj.pojo.User;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.web.servlet.view.document.AbstractXlsxView; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.util.List;
import java.util.Map; public class ViewExcel extends AbstractXlsxView {
@Override
protected void buildExcelDocument(Map<String, Object> model, Workbook workbook, HttpServletRequest request, HttpServletResponse response) throws Exception {
String fileName = "账号列表.xlsx";
response.setCharacterEncoding("UTF-8");
response.setContentType("application/ms-excel");// 文件下载
response.setHeader("Content-Disposition", "inline; filename=" + new String(fileName.getBytes(), "iso8859-1"));
OutputStream outputStream = response.getOutputStream(); Sheet sheet = workbook.createSheet("账号表"); Row row = sheet.createRow(0); //设置标头
String[] headers = new String[] { "编号", "姓名","密码","年龄" };
for (int i = 0; i < headers.length; i++) {
row.createCell(i).setCellValue(headers[i]);
} List<User> list = (List<User>) model.get("userlist");
for (int i = 0; i < list.size(); i++) {
User user = list.get(i); row = sheet.createRow(i + 1);
row.createCell(0).setCellValue(i + 1);
row.createCell(1).setCellValue(user.getName());
row.createCell(2).setCellValue(user.getPassWord());
row.createCell(3).setCellValue(user.getAge());
} workbook.write(outputStream);
outputStream.flush();
outputStream.close();
}
}

3.配置自定义视图解析器

 <!-- 注册excel视图解析器 -->
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver"/> <bean id="exportExcel" class="com.lwj.custom.view.ViewExcel"/>

4.控制器

package com.lwj.controller;

import com.lwj.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping; import java.util.ArrayList;
import java.util.List; @Controller
@RequestMapping("user")
public class UserController { @RequestMapping("excel")
public String viewExcel(ModelMap map){
List<User> list = new ArrayList<>(); User user = new User();
user.setName("zs1");
user.setPassWord("12345");
user.setAge(27);
list.add(user); user = new User();
user.setName("zs2");
user.setPassWord("12346");
user.setAge(28);
list.add(user); user = new User();
user.setName("zs3");
user.setPassWord("12347");
user.setAge(29);
list.add(user); map.put("userlist", list);
return "exportExcel";
}
}

访问控制器的路径就能直接下载Excel表了

springMvc使用自定义View生成Excel表格的更多相关文章

  1. H5纯前端生成Excel表格

    H5纯前端生成Excel表格方法如下: <!DOCTYPE html> <html> <head> <title></title> < ...

  2. Java操作Jxl实现导出数据生成Excel表格数据文件

    实现:前台用的框架是Easyui+Bootstrap结合使用,需要引入相应的Js.Css文件.页面:Jsp.拦截请求:Servlet.逻辑处理:ClassBean.数据库:SQLserver. 注意: ...

  3. 详解python操作生成excel表格,并且填充数据

    最近在研究python操作excel表格的问题,首先读取excel表格觉得平时用的多,不怎么有难度,就是pyhon生成excel表格的时候,平时不怎么用,所以重点研究了一下,现总结如下: 1.首先用到 ...

  4. EPPlus生成Excel表格(只支持2007及以上)

    主要来源: https://www.cnblogs.com/rumeng/p/3785748.html http://epplus.codeplex.com/ FileInfo newFile = n ...

  5. PHP生成excel表格文件并下载

    本文引自网络,仅供自己学习之用. 利用php导出excel我们大多会直接生成.xls文件,这种方便快捷. function createtable($list,$filename){ header(& ...

  6. 数据库数据生成Excel表格(多用在导出数据)

    最近在项目开发中遇到这样一个需求,用户聊天模块产品要求记录用户聊天信息,但只保存当天的,每天都要刷新清空数据,但聊天记录要以Excel的形式打印出来,于是就引出了将数据库的数据导出成Excel表格的需 ...

  7. JavaWeb开发中采用FreeMarker生成Excel表格

            最近做了一个需求,要求导出一个采购合同的Excel表格,这个表格样式比较多.由于是合同,这个Excel表格里面有好多格式要求,比如结尾处签字那部分就有格式要求.这里介绍种采用FreeM ...

  8. 使用Aspose插件将程序中的表格,导出生成excel表格

    http://www.cnblogs.com/lanyue52011/p/3372452.html这个是原文地址 /// <summary> /// 点击按钮,将内存表导出excel表格! ...

  9. Table生成Excel表格

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. Java 利用poi生成excel表格

    所需jar包,如下所示 写一个excel工具类 ExcelUtils .java import java.lang.reflect.Field; import java.util.Iterator; ...

随机推荐

  1. Yii 实现数据库SUM操作

    方法一:这种方法有个坑儿,就是as 后面的别名,必须是属性范围内的名字. $criteria = new CDbCriteria(); $criteria->select = 'sum(amou ...

  2. 记一次bug排除心得

    问题背景 要做一个需求,大概是检测到某输入重启,于是写一个demo调试一下 c语言程序,交叉编译后在adb shell下运行 思路 用 am 命令直接重启 我们先手动验证一下,发现这个设备不支持am命 ...

  3. Java 中 hashCode 和 equals 方法是什么?它们和 == 各有什么区别?

    在 Java 中,hashCode 和 equals 方法都是 Object 类的方法.它们的作用分别如下: hashCode 方法返回对象的哈希码,用于支持基于哈希表的集合,如 HashMap.Ha ...

  4. JS中BOM事件,JS样式特效,表格对象和表单操作

    DOM事件 1.DOM中的事件可以分为两类 1.浏览器行为 如:文档加载完成,图片加载完成 2.用户行为 如:输入框输入数据,点击按钮 (2).常见的DOM事件 onload 浏览器已完成页面的加载 ...

  5. 【论文笔记】SegNet

    [深度学习]总目录 SegNet是Cambridge提出旨在解决自动驾驶或者智能机器人的图像语义分割深度网络,开放源码,基于caffe框架.SegNet运用编码-解码结构和最大池化索引进行上采样,最主 ...

  6. 一文教你在MindSpore中实现A2C算法训练

    本文分享自华为云社区<MindSpore A2C 强化学习>,作者:irrational. Advantage Actor-Critic (A2C)算法是一个强化学习算法,它结合了策略梯度 ...

  7. #9134.反转eehniy

    blog 题面 yinhee 去面试 Google 总裁. 面试官给他了一个长度为 \(n\) 的 \(01\) 串. 面试官给他以下两种操作是的这个序列前 \(n-m\) 个数字与后 \(n-m\) ...

  8. Mysql常见使用问题的解决方法

    问题一:Mysql插入中文数据时,报错"incorrect string value"字符转换不正确 解决方法: 第一种方式: 1.更改Mysql安装目录下的文件my.ini(一般 ...

  9. [TinyRenderer] Chapter1 p3 Line

    (注:本小节不是对划线算法事无巨细的证明,如果你需要更加系统的学习,请跳转至文末的参考部分) 如果你是一名曾经学习过图形学基础的学生,那么你一定对画线算法稔熟于心,中点划线算法,Bresenham算法 ...

  10. Kubernetes(K8s)最新版搭建

    Kubernetes简单介绍 Kubernetes意为舵手,简称K8s. 前身是Google的Borg.所以一开源就吸引了一大批注意力. 因为谷歌,所以墙.在国内搭建K8s非常头疼. 下面我就来介绍一 ...