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和對應的接口
|
<?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>
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"; } } |
