使用JAVA 導出(數據庫表)到excel功能

此功能基於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錯誤,所以需要做一個判斷是否爲空。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章