天天看點

EasyPOI->模版形式導出Excel(多Sheet)

在使用EasyPOI進行模版導出時,通常導出得都是單Sheet得Excel,代碼可參考我的文章Easypoi導出excel

非模版形式導出excel可參考我的文章:EasyPOI->非模版形式導出Excel(多Sheet)

如需要導出圖檔到excel可參考我的文章: Easypoi模版形式導出excel導出圖檔

有時候因為有其他需求,需要導出多Sheet時,可以參考如下代碼:

注意:該文章給出的是模版形式的多sheet導出excel

pom依賴:

<!-- easypoi -->
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-base</artifactId>
            <version>3.2.0</version>
        </dependency>
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-annotation</artifactId>
            <version>3.2.0</version>
        </dependency>
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-web</artifactId>
            <version>3.2.0</version>
        </dependency>
           

代碼如下:

@Controller
@RequestMapping(value = "easypoi")
public class EasypoiController {

   /**
     * 使用easypoi導出檔案
     * 單sheet / 多sheet
     * @param response
     * @return
     */
    @RequestMapping(value="exportexceltest")
    @ResponseBody
    public String exportExcelTest(HttpServletResponse response){
        // 擷取workbook對象
        // 單sheet或多sheet 隻需要更改此處即可
        Workbook workbook = exportMoreSheetByTemplate() ;
        // 判斷資料
        if(workbook == null) {
            return "fail";
        }
        // 設定excel的檔案名稱
        String excelName = "測試excel" ;
        // 重置響應對象
        response.reset();
        // 目前日期,用于導出檔案名稱
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        String dateStr = "["+excelName+"-"+sdf.format(new Date())+"]";
        // 指定下載下傳的檔案名--設定響應頭
        response.setHeader("Content-Disposition", "attachment;filename=" +dateStr+".xls");
        response.setContentType("application/vnd.ms-excel;charset=UTF-8");
        response.setHeader("Pragma", "no-cache");
        response.setHeader("Cache-Control", "no-cache");
        response.setDateHeader("Expires", 0);
        // 寫出資料輸出流到頁面
        try {
            OutputStream output = response.getOutputStream();
            BufferedOutputStream bufferedOutPut = new BufferedOutputStream(output);
            workbook.write(bufferedOutPut);
            bufferedOutPut.flush();
            bufferedOutPut.close();
            output.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "success";
    }

    /**
     * 模版多sheet導出示例
     * @return
     */
    public Workbook exportMoreSheetByTemplate(){
        // 查詢資料,此處省略
        List<EasyPOIModel> list = new ArrayList<EasyPOIModel>();
        int count1 = 0 ;
        // 學生資訊
        User user1 = new User("張三","男",20,"北京市東城區","籃球") ;
        User user2 = new User("李四","男",17,"北京市西城區","遊泳") ;
        User user3 = new User("淑芬","女",34,"北京市豐台區","唱歌,跳舞") ;
        User user4 = new User("仲達","男",55,"北京市昌平區","象棋,足球") ;
        // sheet1内容
        EasyPOIModel easyPOIModel11 = new EasyPOIModel(String.valueOf(count1++),"信科",user1) ;
        EasyPOIModel easyPOIModel12 = new EasyPOIModel(String.valueOf(count1++),"生工",user2) ;
        EasyPOIModel easyPOIModel13 = new EasyPOIModel(String.valueOf(count1++),"化工",user3) ;
        EasyPOIModel easyPOIModel14 = new EasyPOIModel(String.valueOf(count1++),"信科",user4) ;
        list.add(easyPOIModel11) ;
        list.add(easyPOIModel12) ;
        list.add(easyPOIModel13) ;
        list.add(easyPOIModel14) ;
        // 存放資料map
        Map<String,Object> map1 = new HashMap<String, Object>() ;
        map1.put("list",list) ;
        // sheet2内容
        List<User> userList = new ArrayList<User>() ;
        userList.add(user1) ;
        userList.add(user2) ;
        userList.add(user3) ;
        userList.add(user4) ;
        map1.put("lists",userList) ;
        
        // 設定導出配置
        // 擷取導出excel指定模版
        TemplateExportParams params = new TemplateExportParams("d:/項目測試檔案夾/easypoiExampleMore.xls",true);
        // 設定sheetName,若不設定該參數,則使用得原本得sheet名稱
        String[] sheetNameArray = {"班級資訊","學生資訊"} ;
        params.setSheetName(sheetNameArray);
        // 導出excel
        return ExcelExportUtil.exportExcel(params , map1 );
    }
}
           

excel模版如下:

表格1模版内容:

EasyPOI->模版形式導出Excel(多Sheet)

表格2模版内容:

EasyPOI->模版形式導出Excel(多Sheet)

運作代碼後導出内容如下:

表格1導出後内容為:

EasyPOI->模版形式導出Excel(多Sheet)

表格2導出後内容為:

EasyPOI->模版形式導出Excel(多Sheet)

需要注意得是,在填充不同sheet時使用到得資料清單,是存放在同一個map對象中的,是以此時需要對兩個清單的key進行區分,同時編寫模版内容表達式時,也需要取對應的key進行周遊操作,如圖框選部分所示:

EasyPOI->模版形式導出Excel(多Sheet)
EasyPOI->模版形式導出Excel(多Sheet)
EasyPOI->模版形式導出Excel(多Sheet)

同時,如需修改sheet的名稱的話,可以通過sheetName參數進行指定,如圖:

模版的sheet名稱:

EasyPOI->模版形式導出Excel(多Sheet)

代碼:

EasyPOI->模版形式導出Excel(多Sheet)

導出後的sheet名稱:

EasyPOI->模版形式導出Excel(多Sheet)

是以在使用時需要多加注意。

補充說明:

EasyPOI->模版形式導出Excel(多Sheet)

如上圖所示,在建立TemplateExportParams模版對象時,若需要輸出多sheet的話,需要在指定模版路徑後,追加一個參數,預設值為false,設定為true即表示會輸出模版中的全部sheet,否則隻會輸出第一個sheet。請各位小夥伴多加注意。

以上便是使用easypoi模版形式導出多sheet的全部内容。

其他相關使用請參考原文章:

https://gitee.com/jeecg/easypoi

EasyPOI參考資料:

http://easypoi.mydoc.io/#text_226078

如您有其他問題,希望可以通過留言得形式及時交流,有書寫錯誤和可優化的地方也希望及時提出,感謝

繼續閱讀