zoukankan      html  css  js  c++  java
  • Excel文件导出

    1、首先导入依赖jar包

    首先需要jar包依赖。POI提供API给Java程序对Microsoft Office格式档案读和写的功能

            <!--poi依赖-->
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>3.10.1</version>
            </dependency>

     2、创建工具类

    导入一个接口Constants
    package com.zero.util;
    
    public interface Constants {
    
        public String DATE = "yyyy-MM-dd";
    
        public String DATE_TIME = "yyyy-MM-dd hh:mm:ss";
    
    }

    只是定义了两个日期格式。

    创建工具类

    UserExcelView
    这个工具类需要继承特定的抽象类AbstractExcelView


    package com.zero.view;
    
    import java.util.List;
    import java.util.Map;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.zero.pojo.User;
    import com.zero.util.Constants;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.joda.time.DateTime;
    import org.springframework.web.servlet.view.document.AbstractExcelView;
    
    
    public class UserExcelView extends AbstractExcelView {
    
        @Override
        protected void buildExcelDocument(Map<String, Object> model, HSSFWorkbook workbook, HttpServletRequest request, HttpServletResponse response) throws Exception {
            // 从model对象中获取userList
            @SuppressWarnings("unchecked")
            List<User> userList = (List<User>) model.get("userList");
            // 创建Excel的sheet
            HSSFSheet sheet = workbook.createSheet("会员列表");
    
            // 创建标题行
            HSSFRow header = sheet.createRow(0);
            header.createCell(0).setCellValue("ID");
            header.createCell(1).setCellValue("用户名");
            header.createCell(2).setCellValue("姓名");
            header.createCell(3).setCellValue("年龄");
            header.createCell(4).setCellValue("性别");
            header.createCell(5).setCellValue("出生日期");
            header.createCell(6).setCellValue("创建时间");
            header.createCell(7).setCellValue("更新时间");
            
            // 填充数据
            int rowNum = 1;
            for (User user : userList) {
                HSSFRow row = sheet.createRow(rowNum);
                row.createCell(0).setCellValue(user.getId());
                row.createCell(1).setCellValue(user.getUserName());
                row.createCell(2).setCellValue(user.getName());
                row.createCell(3).setCellValue(user.getAge());
                String sexStr;
                if (user.getSex() == 1) {
                    sexStr = "男";
                } else if (user.getSex() == 2) {
                    sexStr = "女";
                } else {
                    sexStr = "未知";
                }
                row.createCell(4).setCellValue(sexStr);
                row.createCell(5).setCellValue(new DateTime(user.getBirthday()).toString(Constants.DATE));
                row.createCell(6).setCellValue(new DateTime(user.getCreated()).toString(Constants.DATE_TIME));
                row.createCell(7).setCellValue(new DateTime(user.getUpdated()).toString(Constants.DATE_TIME));
    
                rowNum++;
            }
            // 设置相应头信息,以附件形式下载并且指定文件名
            response.setHeader("Content-Disposition", "attachment;filename=" + new String("会员列表.xls".getBytes(),"ISO-8859-1"));
        }
    
    }
    View Code
    AbstractExcelView是springmvc提供的,
    在springmvc中

    有一个view,它代表视图,json也是属于视图的一种。

      继承是为了实现一个方法,buildExcelDocument。这个方法是用来构建Excel的。具体怎么构建不管,只是提供。

      

    exportUser方法将数据装到mv中,然后传到export-user。但是需要对export-user进行配置,因为他不是一个jsp页面,需要在配置文件中进行配置。

        <!--配置自定义的视图-->
        <bean  class="com.zero.view.UserExcelView" name="export-user"></bean>

    这个时候是找不到export-user视图的

    原因:当前的视图解析器是内部资源解析器,会按照下面的方式去查找视图名。

        <!--视图解析器-->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/views/"></property>
            <property name="suffix" value=".jsp"></property>
            <property name="order" value="2"></property>
        </bean>

    不满足现在的需求,需要定义其他的视图解析器。目的是可以寻找到自定义的视图。

    <!--定义其他的视图解析器:可以寻找到自定义的视图,按照bean的name的属性值,当初一个视图名称去查询视图-->
        <bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
            <!--order表示视图解析器的顺序,值越小优先级越高,默认值是int的最大值,最低-->
            <!--顺序为先在这个视图解析器找,找不到再去上面找,上面的默认值是int的最大值-->
            <property name="order" value="1"></property>
        </bean>

    视图解析器可以定义多个。但是视图解析器并不会知道从哪个视图解析器去找,如果不配置order仍然会报错。order是用来给视图解析器排序的。

    视图解析器会优先使用优先级高的解析器,如果找不到再依据优先级去其他的视图解析器查找。

    
    
    坚持就是胜利
  • 相关阅读:
    iptables和DNS
    centos6.5下载
    linux 系统版本信息
    如何挂载
    Linux网络命令
    端口网络等
    linux安装tomcat
    ip设置
    最全DOS的CMD命令,程序员必会
    c语言文件分割与合并
  • 原文地址:https://www.cnblogs.com/xiaotieblog/p/8579305.html
Copyright © 2011-2022 走看看