zoukankan      html  css  js  c++  java
  • springMvc使用自定义View生成Excel表格

    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'
    }
    View Code

    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();
        }
    }
    View Code

    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";
        }
    }
    View Code

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

  • 相关阅读:
    练习二(米奇老鼠)
    Photoshop笔记一
    HTML笔记1
    用IDEA写出第一个java web
    TCP协议怎么关闭?
    Sql Server2008R2与IDEA的连接
    通过HttpServer向Prometheus暴露端点
    了解Prometheus到底是什么?
    SPI扩展机制在框架中的使用
    motan系列1——与spring的集成原理
  • 原文地址:https://www.cnblogs.com/lwjQAQ/p/10176184.html
Copyright © 2011-2022 走看看