EasyPOI->模版形式导出Excel(多Sheet)
在使用EasyPOI进行模版导出时,通常导出得都是单Sheet得Excel,代码可参考我的文章Easypoi导出excel
非模版形式导出excel可参考我的文章:EasyPOI->非模版形式导出Excel(多Sheet)
如需要导出图片到excel可参考我的文章: Easypoi模版形式导出excel导出图片
有时候因为有其他需求,需要导出多Sheet时,可以参考如下代码:
注意:该文章给出的是模版形式的多sheet导出excel
代码如下:
@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) ;
Map<String,Object> map2 = new HashMap<String, Object>() ;
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名称:
所以在使用时需要多加注意。
以上便是使用easypoi模版形式导出多sheet的全部内容。
其他相关使用请参考原文章:
https://gitee.com/jeecg/easypoi
EasyPOI参考资料:
http://easypoi.mydoc.io/#text_226078
如您有其他问题,希望可以通过留言得形式及时交流,有书写错误和可优化的地方也希望及时提出,感谢