首页 > 基础资料 博客日记
【Java中导出Excel导出多个sheet页】
2024-08-18 16:00:06基础资料围观197次
Java资料网推荐【Java中导出Excel导出多个sheet页】这篇文章给大家,欢迎收藏Java资料网享受知识的乐趣
Java中导出Excel导出多个sheet页
序言
在日常工作中经常有导出数据文件的需求,避免不了会有导出多个sheet页的功能,这里给大家分享一个自己使用过的方法。
如何处理多个sheet页的导出
下面是导出的方法代码,用到的参数基本就是两个对应的数据集合,两个数据的标题(这个根据自己需求来,可以不用),excel文件名称,以及两个sheet页的名称。
// 这里是导出多个sheet页的方法代码
/**
* 导出多个sheet页
* @param response
* @param list 第一个sheet页数据集合
* @param list1 第二个sheet页数据集合
* @param title 第一个的标题
* @param title1 第二个的标题
* @param fileName excel文件名称
* @param sheetName 第一个sheet页名
* @param sheetName1 第二个sheet页名
*/
public static void exportExcelPlus1(HttpServletResponse response,List<?> list,List<?> list1,String title,String title1,String fileName,String sheetName,String sheetName1){
if (CollUtil.isEmpty(list)) {
throw new SystemNoLogException(ResponseCode.EXCEL_EXPORT_FAILED, "无数据可导出");
}
Class<?> clazz = list.get(0).getClass();
Class<?> clazz1 = list1.get(0).getClass();
if (StrUtil.isEmpty(fileName)) {
fileName = "Excel导出";
}
try {
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
String fileSuffix = new SimpleDateFormat("yyyyMMdd-HHmmss").format(new Date());
fileName = fileName.concat("_").concat(fileSuffix);
String excelName = URLEncoder.encode(fileName, "UTF-8");
response.setHeader("Content-disposition", "attachment;filename=" + excelName + ExcelTypeEnum.XLSX.getValue());
Field[] fields = clazz.getDeclaredFields();
List<Field> fieldList = Arrays.stream(fields).filter(item -> item.getAnnotation(ExcelProperty.class) != null).collect(Collectors.toList());
int cellCount = fieldList.size();
ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).excelType(ExcelTypeEnum.XLSX).build();
WriteSheet mainSheet = EasyExcel.writerSheet(0, sheetName).head(clazz)
.registerWriteHandler(new ExportExcelTitleWriteHandler(cellCount, title,0))
.registerWriteHandler(new ExportExcelHeadWriteHandler(1))
.registerWriteHandler(new HorizontalCellStyleStrategy(defaultHeadStyle(), defaultContentCellStyle()))
.sheetName(sheetName)
//默认样式
.useDefaultStyle(true)
//写入头信息的开始行数
.relativeHeadRowIndex(1)
.build();
excelWriter.write(list,mainSheet);
Field[] fields1 = clazz1.getDeclaredFields();
List<Field> fieldList1 = Arrays.stream(fields1).filter(item -> item.getAnnotation(ExcelProperty.class) != null).collect(Collectors.toList());
int cellCount1 = fieldList1.size();
WriteSheet dSheet = EasyExcel.writerSheet(1, sheetName1).head(clazz1)
.registerWriteHandler(new ExportExcelTitleWriteHandler(cellCount1, title1,1))
.registerWriteHandler(new ExportExcelHeadWriteHandler(1))
.registerWriteHandler(new HorizontalCellStyleStrategy(defaultHeadStyle(), defaultContentCellStyle()))
.sheetName(sheetName1)
//默认样式
.useDefaultStyle(true)
//写入头信息的开始行数
.relativeHeadRowIndex(1)
.build();
excelWriter.write(list1,dSheet);
excelWriter.finish();
} catch (Exception e) {
log.error("export excel error", e);
response.reset();
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
try {
String message = "下载文件失败" + e.getMessage();
RestResponse restResponse = RestResponse.build(ResponseCode.EXCEL_EXPORT_FAILED, message);
response.getWriter().println(JSON.toJSONString(restResponse));
} catch (IOException ioException) {
log.error("export excel error", ioException);
throw new SystemNoLogException(ResponseCode.EXCEL_EXPORT_FAILED, ioException.getMessage());
}
}
}
期间遇到了一个sheet页相关的问题,以及解决办法
多sheet页导出遇到,第二个sheet页的标题名称会把第一个的覆盖的问题
导出数据之后发现,第二个的标题名称覆盖了第一个的标题,去网上找到了对应的解决办法,就是给标题赋值的时候,后面加上对应的sheet页索引,这样就能指定每一个sheet页对应的标题名称,下图中红色框中最后的索引就对应了各自的sheet页,索引从0开始,大家可以根据自己需求更改。
结语
不是职业博主,只是记录自己用到的一些技术点或者问题相关的解决办法,以便于以后用到的时候查看,顺便分享,如果有无法解决问题可以留言,看到会及时回复。
文章来源:https://blog.csdn.net/weixin_43898002/article/details/139989850
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签: