ExportExcel(用poi導出Excel文件:用List >)


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";

       }

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM