zoukankan      html  css  js  c++  java
  • ExportExcel(用poi导出Excel文件:用List<Map<String,Object>>)

    1.导入jar包(maven)

                  <dependency>

                                <groupId>org.apache.poi</groupId>

                                <artifactId>poi</artifactId>

                                <version>3.10.1</version>

                         </dependency>

    2.ExportExcel工具类

    package com.zhiyou100.kfs.util;

    import java.io.IOException;

    import java.io.OutputStream;

    import java.io.UnsupportedEncodingException;

    import java.util.List;

    import java.util.Map;

    import javax.servlet.http.HttpServletResponse;

    import org.apache.poi.hssf.usermodel.HSSFRow;

    import org.apache.poi.hssf.usermodel.HSSFSheet;

    import org.apache.poi.hssf.usermodel.HSSFWorkbook;

    /**

     * 用poi导出Excel文件的工具类

     *

     * @author KFS

     *

     */

    public class ExportExcel {

           /**

            *   用poi导出Excel文件的静态方法

            * @param list                    数据:只能是List<Map<String, Object>>类型

            * @param sheetname        Excel的sheet名字

            * @param filepath             保存文件的地址

            * @throws IOException

            */

           public void exportExcel(List<Map<String, Object>> list,String sheetname,String fileName,HttpServletResponse response) throws IOException {

                  //新建工作簿

                  HSSFWorkbook workbook=new HSSFWorkbook();

                  //创建Excel的sheet

                  HSSFSheet sheet=workbook.createSheet(sheetname);

                 

                  //从list任意一个Map对象里获取标题(字段名或属性名)放到sheet的第一行上,若第一条记录某字段值没有,则会没有该字段

                  Map<String, Object> map=list.get(0);

                  int num=0;

                  HSSFRow first=sheet.createRow(0);//创建sheet的第一行

                  for(String key:map.keySet()) {

                         first.createCell(num).setCellValue(key);//创建num+1行并在第num+1列上赋值(字段名)

                         num++;

                  }

                 

                  //从list取第一行到最后一行的内容并放到对应的Excel里,若记录里某字段值没有会有问题

                  int rownum=1;//行数

                  for(Map<String, Object> data:list) {

                         HSSFRow row=sheet.createRow(rownum);//创建sheet的第rownum+1行

                         int n=0;//列数

                         for(String key:data.keySet()) {

                                row.createCell(n).setCellValue(data.get(key).toString());//创建n+1行并在第n+1列上赋值

                                n++;

                         }

                         rownum++;

                  }

                 

                  //1.通过IO流把数据写到文件上:只能写到服务器端

                  /*FileOutputStream out=new FileOutputStream(fileName);

                  workbook.write(out);

                  out.close();*/

                 

                  //2.响应到客户端:可以下载到客户端(两个选一个)

                  try {

                         this.setResponseHeader(response, fileName);

                         OutputStream os = response.getOutputStream();

                         workbook.write(os);

                         os.flush();

                         os.close();

                  } catch (Exception e) {

                         e.printStackTrace();

                  }

                 

           }

           // 发送响应流方法

           public void setResponseHeader(HttpServletResponse response, String fileName) {

                  try {

                         try {

                                fileName = new String(fileName.getBytes(), "ISO8859-1");

                         } catch (UnsupportedEncodingException e) {

                                e.printStackTrace();

                         }

                         response.setContentType("application/octet-stream;charset=ISO8859-1");

                         response.setHeader("Content-Disposition", "attachment;filename=" + fileName);

                         response.addHeader("Pargam", "no-cache");

                         response.addHeader("Cache-Control", "no-cache");

                  } catch (Exception ex) {

                         ex.printStackTrace();

                  }

           }

          

    }

    3.mapper.xml和对应的接口

    1. mapper.xml:

    <?xml version="1.0" encoding="UTF-8"?>

    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

    <mapper namespace="com.zhiyou100.kfs.dao.UserMapper">

          

           <sql id="baseSql">

           id,user_name username,password,name,age,sex,birthday,created,updated

           </sql>

          

           <select id="selectListMap" resultType="java.util.LinkedHashMap">

                  select

                  <include refid="baseSql"/>

                  from tb_user

           </select>

    </mapper>

    1. 对应的接口:

    package com.zhiyou100.kfs.dao;

    import java.util.List;

    import java.util.Map;

    public interface UserMapper{

           /**

            *   ExportExcel:导出Excel

            * @return

            */

           List<Map<String, Object>> selectListMap();

    }

    4.service层

    package com.zhiyou100.kfs.service;

    import java.util.List;

    import java.util.Map;

    import org.springframework.beans.factory.annotation.Autowired;

    import org.springframework.stereotype.Service;

    import com.github.pagehelper.PageHelper;

    import com.github.pagehelper.PageInfo;

    import com.zhiyou100.kfs.dao.UserMapper;

    @Service("userService")

    public class UserServiceImp {

           @Autowired

           private UserMapper userMapper;

          

           public List<Map<String, Object>> selectListMap(Integer pageNum,Integer pageSize){

                  PageHelper.startPage(pageNum, pageSize);

                  List<Map<String, Object>> list = userMapper.selectListMap();

                  PageInfo<Map<String, Object>> pageinfo=new PageInfo<>(list);

                  return pageinfo.getList();

           }

    }

    5.测试代码:controller层

    package com.zhiyou100.kfs.controller;

    import java.io.IOException;

    import java.util.List;

    import java.util.Map;

    import org.springframework.beans.factory.annotation.Autowired;

    import org.springframework.stereotype.Controller;

    import org.springframework.web.bind.annotation.RequestMapping;

    import com.zhiyou100.kfs.service.UserServiceImp;

    import com.zhiyou100.kfs.util.ExportExcel;

    @Controller

    @RequestMapping("user")

    public class UserController {

           @Autowired

           private UserServiceImp userServiceImp;

          

           @RequestMapping("exportExcel")

           public String exportExcel(Integer page,Integer rows) throws IOException {

                  List<Map<String, Object>> list = userServiceImp.selectListMap(page,rows);

                  String sheetname="用户管理";

                  String filepath="d://用户管理:第"+page+"页,每页"+rows+"记录.xls";

                  ExportExcel.exportExcel(list, sheetname, filepath);

                  return "redirect:/rest/user/toUsers";

           }

    }

  • 相关阅读:
    PHP识别二维码功能,php-zbarcode 安装
    《架构即未来》读后感(三)
    MVC设计模式案例分析
    SOA
    《架构即未来》读后感(二)
    基于网络拓扑及告警的故障根因定位系统实现及算法研究赛题需求分析
    《架构即未来》读后感(一)
    《大型网站技术架构》读后感(二)
    《一线架构师实践指南》读后感(三)
    《大型网站技术架构》读后感(三)
  • 原文地址:https://www.cnblogs.com/kfsrex/p/11644737.html
Copyright © 2011-2022 走看看