文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java 使用esayExcel进行导出、导入包含多个sheet页面

2023-08-19 21:32

关注
<!--easyexcel --> <dependency>     <groupId>com.alibaba</groupId>     <artifactId>easyexcel</artifactId>     <version>2.2.6</version> </dependency>

本文教程适合小白直接使用:先导出excel(含多个sheet),后导入,以上为导入依赖

导出excel(含多个sheet页,第一个sheet导出现有的数据,第二个sheet导出无数据)

        HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();        try {        //先设置了导出表头,详细在csdn查看如何设置导出表头            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");            response.setCharacterEncoding("utf-8");            String fileName = URLEncoder.encode("AI机器人自动武器填充", "UTF-8").replaceAll("\\+", "%20");            response.setHeader("Content-Disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");            response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");            ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).build();            Workbook workbook = EasyExcelUtil.getWorkbook(excelWriter);            //第一个表格            WriteSheet batchEditDepartment = EasyExcel.writerSheet(0, "AI全方位攻略顶实验室").head(BatchEditDeptInfo.class).build();            //第一个表格是有数据的,所以去数据库随便查一个表,查完后,为了便于用户使用要针对数据处理            List<BatchEditDeptInfo> vos = this.deptInfoMapper.queryAllDeptInfoByCompanyCode(companyCode);            Map<String, String> deptCodeAndDeptNameMap = new HashMap<>();            if (CollectionUtils.isNotEmpty(vos)) {                for (BatchEditDeptInfo vo : vos) {                    deptCodeAndDeptNameMap.put(vo.getDeptCode(),vo.getDeptName());                }            }            if (CollectionUtils.isNotEmpty(vos)) {                for (BatchEditDeptInfo vo : vos) {                    //上级部门名称                    if (StringUtils.isNotEmpty(vo.getParentCode())) {                        if (!"0".equals(vo.getParentCode())) {String parentName = deptCodeAndDeptNameMap.get(vo.getParentCode());vo.setParentName(parentName);                        }                    }                    //部门负责人                    List<String> employeeCodes = departmentHeadService.queryDepartmentHeadListByDeptCode(vo.getDeptCode());                    if (CollectionUtils.isNotEmpty(employeeCodes)) {                        StringBuilder chargeMan = new StringBuilder();                        StringBuilder chargeManPhone = new StringBuilder();                        for (int i = 0; i < employeeCodes.size(); i++) {EmployeeInfoVO info = employeeInfoService.queryEmployeeInfoByEmployeeCode(employeeCodes.get(i));if (i == employeeCodes.size() - 1) {    if (StringUtils.isNotEmpty(info.getEmployeeName())) {        chargeMan.append(info.getEmployeeName());    }    if (StringUtils.isNotEmpty(info.getPhoneNum())) {        chargeManPhone.append(info.getPhoneNum());    }} else {    if (StringUtils.isNotEmpty(info.getEmployeeName())) {        chargeMan.append(info.getEmployeeName()).append('、');    }    if (StringUtils.isNotEmpty(info.getPhoneNum())) {        chargeManPhone.append(info.getPhoneNum()).append('、');    }}                        }                        vo.setPhone(chargeManPhone.toString());                        vo.setEmployeeName(chargeMan.toString());                    }                    //部门类型                    if (StringUtils.isNotEmpty(vo.getDepartmentType())) {                        if ("0".equals(vo.getDepartmentType())) {vo.setDepartmentType("AI黑客部");                        } else if ("1".equals(vo.getDepartmentType())) {vo.setDepartmentType("AI军事部");                        } else if ("-1".equals(vo.getDepartmentType())){vo.setDepartmentType("AI能源部");                        }                    }                    //部门类别                    if (ObjectUtils.isNotEmpty(vo.getCategoryId())) {                        CompanyDepartmentCategory category = categoryMapper.selectById(vo.getCategoryId());                        vo.setCategoryValue(category.getCategoryValue());                    }                }            }            excelWriter.write(vos, batchEditDepartment);            //设置导出的字体(第一个表格)            Font firstSheetFirstFont = workbook.createFont();            firstSheetFirstFont.setColor(IndexedColors.RED1.getIndex());            //单元格风格 one:控制特殊字体 TWO:控制通用字体            CellStyle cellStyleOne = workbook.createCellStyle();            cellStyleOne.setAlignment(HorizontalAlignment.CENTER);            cellStyleOne.setVerticalAlignment(VerticalAlignment.CENTER);            cellStyleOne.setFillBackgroundColor(IndexedColors.WHITE.getIndex());            cellStyleOne.setFont(firstSheetFirstFont);            //单元格风格 2            CellStyle cellStyleTwo = workbook.createCellStyle();            cellStyleTwo.setAlignment(HorizontalAlignment.CENTER);            cellStyleTwo.setVerticalAlignment(VerticalAlignment.CENTER);            cellStyleTwo.setFillBackgroundColor(IndexedColors.WHITE.getIndex());            //第一个表的表头风格设置            Row firstSheetRow = workbook.getSheet("AI全方位攻略顶实验室").getRow(0);            firstSheetRow.getCell(1).setCellStyle(cellStyleOne);            firstSheetRow.getCell(8).setCellStyle(cellStyleOne);            firstSheetRow.getCell(2).setCellStyle(cellStyleOne);            firstSheetRow.getCell(0).setCellStyle(cellStyleTwo);            firstSheetRow.getCell(3).setCellStyle(cellStyleTwo);            firstSheetRow.getCell(4).setCellStyle(cellStyleTwo);            firstSheetRow.getCell(5).setCellStyle(cellStyleTwo);            firstSheetRow.getCell(6).setCellStyle(cellStyleTwo);            firstSheetRow.getCell(7).setCellStyle(cellStyleTwo);            firstSheetRow.getCell(9).setCellStyle(cellStyleTwo);            //冻结1:excel的冻结需要锁表            Sheet sheetAt = workbook.getSheetAt(0);            int totalData = sheetAt.getPhysicalNumberOfRows();//            sheetAt.createFreezePane(1,totalData,2,totalData);            //冻结第一列            sheetAt.createFreezePane(2,0,2,0);//            //锁表//            sheetAt.protectSheet("111");            //可以选择:隐藏第第一列            sheetAt.setColumnHidden(1,true);            List<DeptTemplateExport2> exportArrayList = new ArrayList<>();            //第二个sheet页面,空数据            WriteSheet firstSheet = EasyExcel.writerSheet(1, "AI失控自毁列表").head(DeptTemplateExport2.class).build();            excelWriter.write(exportArrayList, firstSheet);            //给第一个导出的表格设置字体和样式            Row firstSheetFirstRow = workbook.getSheet("AI失控自毁数据").getRow(0);            firstSheetFirstRow.getCell(0).setCellStyle(cellStyleOne);            firstSheetFirstRow.getCell(1).setCellStyle(cellStyleOne);            firstSheetFirstRow.getCell(2).setCellStyle(cellStyleOne);            firstSheetFirstRow.getCell(7).setCellStyle(cellStyleOne);            firstSheetFirstRow.getCell(3).setCellStyle(cellStyleTwo);            firstSheetFirstRow.getCell(4).setCellStyle(cellStyleTwo);            firstSheetFirstRow.getCell(5).setCellStyle(cellStyleTwo);            firstSheetFirstRow.getCell(6).setCellStyle(cellStyleTwo);            firstSheetFirstRow.getCell(8).setCellStyle(cellStyleTwo);            excelWriter.finish();        } catch (IOException e) {            logger.error("导出异常:{}", e.getMessage());            throw new ServiceNewException(FoundationErrorMapping.GENERAL_SERVICE_EXCEPTION, "导出异常");        }

以上就是导出excel含2个sheet页的基础代码,若是代码太多,建议处理:两个表都用 new ArrayList<自定义实体类>(),填充数据即可,导出导入亲测无问题。

读取刚刚导出的excel表格(多sheet页)

esayExcel要读取多个sheet页提供了监视器,针对每个sheet建立一个监视器,以下代码可以直接复制粘贴

public class BatchEditDeptInfoListener extends AnalysisEventListener<BatchEditDeptInfo> {private List<BatchEditDeptInfo> list = new ArrayList<>();@Overridepublic void invoke(BatchEditDeptInfo data, AnalysisContext context) {list.add(data);}@Overridepublic void doAfterAllAnalysed(AnalysisContext context) {}public List<BatchEditDeptInfo> getData() {return list;}}

第二个表格的监视器

public class DeptTemplateExport2Listener extends AnalysisEventListener<DeptTemplateExport2> {    private List<DeptTemplateExport2> list = new ArrayList<>();    @Override    public void invoke(DeptTemplateExport2 data, AnalysisContext context) {        list.add(data);    }    @Override    public void doAfterAllAnalysed(AnalysisContext context) {    }    public List<DeptTemplateExport2> getData() {        return list;    }}

获取表格中的数据

ExcelReader excelReader = EasyExcel.read(file.getInputStream()).build();                BatchEditDeptInfoListener batchEditDeptInfoListener = new BatchEditDeptInfoListener();                DeptTemplateExport2Listener deptTemplateExport2Listener = new DeptTemplateExport2Listener();                ReadSheet sheet1 = EasyExcel.readSheet(0).head(BatchEditDeptInfo.class).registerReadListener(batchEditDeptInfoListener).build();                ReadSheet sheet2 = EasyExcel.readSheet(1).head(DeptTemplateExport2.class).registerReadListener(deptTemplateExport2Listener).build();                excelReader.read(sheet1,sheet2);                excelReader.finish();              List<BatchEditDeptInfo>  readExcelZero = batchEditDeptInfoListener.getData();              List<DeptTemplateExport2>  readExcelOne = deptTemplateExport2Listener.getData();

得到每个表格导入的数据,最后根据需求进行校验,获取有效数据即可。

来源地址:https://blog.csdn.net/like_start/article/details/131009124

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯