首页 > 基础资料 博客日记

【Java中导出Excel导出多个sheet页】

2024-08-18 16:00:06基础资料围观197

Java资料网推荐【Java中导出Excel导出多个sheet页】这篇文章给大家,欢迎收藏Java资料网享受知识的乐趣

序言

在日常工作中经常有导出数据文件的需求,避免不了会有导出多个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进行投诉反馈,一经查实,立即删除!

标签:

相关文章

本站推荐

标签云