此功能基於maven工程
第一步:使用maven導入所需的包(這個包名很好聽,poi~,我記得有個番的某個妹子的口頭禪叫poi~):
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.14</version>
</dependency>
第二步:寫一個工具類
package com.turntable.utils; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.springframework.web.servlet.view.document.AbstractExcelView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.OutputStream; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Map; public class ViewExcel extends AbstractExcelView { private String[] titles; //傳入指定的標題頭 public ViewExcel(String[] titles) { this.titles=titles; } @Override protected void buildExcelDocument(Map<String, Object> model, HSSFWorkbook workbook, HttpServletRequest request, HttpServletResponse response) throws Exception { //獲取數據 List<Map<String, String>> list = (List<Map<String, String>>) model.get("excelList"); //在workbook添加一個sheet HSSFSheet sheet = workbook.createSheet(); sheet.setDefaultColumnWidth(15); HSSFCell cell=null; //遍歷標題 for (int i = 0; i < titles.length; i++) { //獲取位置 cell = getCell(sheet, 0, i); setText(cell, titles[i]); } //數據寫出 for (int i = 0; i < list.size(); i++) { //獲取每一個map Map<String, String> map=list.get(i); //一個map一行數據 HSSFRow row = sheet.createRow(i+1); for (int j = 0; j < titles.length; j++) { //遍歷標題,把key與標題匹配 String title=titles[j]; //判斷該內容存在mapzhong if(map.containsKey(title)){ row.createCell(j).setCellValue(map.get(title)); } } } //設置下載時客戶端Excel的名稱 String filename = new SimpleDateFormat("yyyy-MM-dd").format(new Date())+".xls"; response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-disposition", "attachment;filename=" + filename); OutputStream ouputStream = response.getOutputStream(); workbook.write(ouputStream); ouputStream.flush(); ouputStream.close(); } }
第三步:映射xml,服務層寫好
XML:
<select id="listwinning" resultMap="BaseResultMap"> select * from winning </select>
服務實現類:
public List<Map<String, String>> selectAllAssetInlibraryInfo(){ List<winning> list = mapper.listwinning(); List<Map<String, String>> mapList=new ArrayList<Map<String,String>>(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss"); for(int i =0 ;i<list.size();i++){ Map<String, String> map=new HashMap<String, String>(); map.put("編號",list.get(i).getId()+""); map.put("手機號碼",list.get(i).getMobile()+""); map.put("獎品名稱",list.get(i).getWinningName()+""); if(list.get(i).getCreateTime()==null){ map.put("獲獎日期",""); }else { map.put("獲獎日期", sdf.format(list.get(i).getCreateTime()) + ""); } mapList.add(map); } return mapList; }
第四步,控制層:
@RequestMapping("/Winner/export") public ModelAndView export(ModelMap map) throws Exception{ List<Map<String ,String >> list = winningService.selectAllAssetInlibraryInfo(); String[] titles={"編號","手機號碼","獎品名稱","獲獎日期"}; ViewExcel excel=new ViewExcel(titles); map.put("excelList", list); return new ModelAndView(excel,map); }大功告成,直接訪問鏈接就能下載。這裏要注意一個問題,如果查詢出來的某個值有null值,會導致500錯誤,所以需要做一個判斷是否爲空。