利用Springmvc的AbstractXlsxView下載Excel文件


設計一個模型,在針對多中數據類型進行拓展

public abstract  class ExcelView extends AbstractXlsxView {


    public CellStyle cellStyle;
    /**
     * 設置樣式
     */
    protected abstract void setStyle(Workbook workbook);

    /**
     * 設置row由子類實現
     */
    protected abstract void setRowStyle(Sheet sheet, Map<String, Object> map);

    @Override
    protected  void buildExcelDocument(
            Map<String, Object> model, Workbook workbook, HttpServletRequest request, HttpServletResponse response)
            throws Exception{
        //自定義文件名稱
        String excelName = DateUtil.getSdfTimes()+".xlsx";
        String Agent = request.getHeader("User-Agent");
        if (null !=Agent){
             Agent = Agent.toLowerCase();
             //針對火狐亂碼的處理
             if (Agent.indexOf("firebox") !=-1){
                 response.setHeader("content-disposition", String.format("attachment;filename*=utf-8'zh_cn'%s", URLEncoder.encode(excelName, "utf-8")));
             } else {
                 response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(excelName, "utf-8"));
             }
        }
        response.setContentType("application/ms-excel; charset=UTF-8");
        Sheet sheet = workbook.createSheet("User Detail");
        sheet.setDefaultColumnWidth(30);
        this.setStyle(workbook);
        setRowStyle(sheet, model);
    }
}

拓展的數據類型

public class OrdersExcleView extends ExcelView{
    //樣式設置
    @Override
    protected void setStyle(Workbook workbook) {

    }

    @Override
    protected void setRowStyle(Sheet sheet, Map<String, Object> map) {
        //創建行的頭部
        Row header = sheet.createRow(0);

        header.createCell(0).setCellValue("訂單ID");
        header.getCell(0).setCellStyle(super.cellStyle);
        header.createCell(1).setCellValue("訂單總價");
        header.getCell(1).setCellStyle(super.cellStyle);
        header.createCell(2).setCellValue("收貨人");
        header.getCell(2).setCellStyle(super.cellStyle);
        header.createCell(3).setCellValue("手機號碼");
        header.getCell(3).setCellStyle(super.cellStyle);
        header.createCell(4).setCellValue("省份");
        header.getCell(4).setCellStyle(super.cellStyle);
        header.createCell(5).setCellValue("地址");
        header.getCell(5).setCellStyle(super.cellStyle);

        List<PageData> orderList= (List<PageData>) map.get("orderList");
        int rowCount = 1;
        for (PageData pageData : orderList) {
// String totalprice = pageData.getString("TOTALPRICE"); String totalprice = String.valueOf(pageData.get("TOTALPRICE")); System.out.println(totalprice); Row userRow = sheet.createRow(rowCount++); userRow.createCell(0).setCellValue(pageData.getString("ORDERSN")); userRow.createCell(1).setCellValue(totalprice); userRow.createCell(2).setCellValue(pageData.getString("CONSIGNEE")); userRow.createCell(3).setCellValue(pageData.getString("MOBILE")); userRow.createCell(4).setCellValue(pageData.getString("PROVINCENAME")); userRow.createCell(5).setCellValue(pageData.getString("ADDRESS")); } } }

下面是controller

 @RequestMapping(value = "/download",method = RequestMethod.GET)
    public ModelAndView download() throws Exception {
        PageData pageData = new PageData();
        List<PageData> list = ordersService.listAll(pageData);

        Map<String, Object> map = new HashMap<String, Object>();
        map.put("orderList",list);
//        ExcelView excelView = new ExcelView();
        ExcelView view = new OrdersExcleView();
        return new ModelAndView(view, map);
    }

 


免責聲明!

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



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