在使用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模版内容:
表格2模版内容:
運作代碼後導出内容如下:
表格1導出後内容為:
表格2導出後内容為:
需要注意得是,在填充不同sheet時使用到得資料清單,是存放在同一個map對象中的,是以此時需要對兩個清單的key進行區分,同時編寫模版内容表達式時,也需要取對應的key進行周遊操作,如圖框選部分所示:
同時,如需修改sheet的名稱的話,可以通過sheetName參數進行指定,如圖:
模版的sheet名稱:
代碼:
導出後的sheet名稱:
是以在使用時需要多加注意。
補充說明:
如上圖所示,在建立TemplateExportParams模版對象時,若需要輸出多sheet的話,需要在指定模版路徑後,追加一個參數,預設值為false,設定為true即表示會輸出模版中的全部sheet,否則隻會輸出第一個sheet。請各位小夥伴多加注意。
以上便是使用easypoi模版形式導出多sheet的全部内容。
其他相關使用請參考原文章:
https://gitee.com/jeecg/easypoi
EasyPOI參考資料:
http://easypoi.mydoc.io/#text_226078
如您有其他問題,希望可以通過留言得形式及時交流,有書寫錯誤和可優化的地方也希望及時提出,感謝