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

这篇具有很好参考价值的文章主要介绍了Java 使用esayExcel进行导出、导入包含多个sheet页面。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


<!--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<>();

	@Override
	public void invoke(BatchEditDeptInfo data, AnalysisContext context) {
		list.add(data);
	}

	@Override
	public 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;
    }

}

获取表格中的数据文章来源地址https://www.toymoban.com/news/detail-658868.html

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();

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

到了这里,关于Java 使用esayExcel进行导出、导入包含多个sheet页面的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java 使用hutool工具进行导出导入excel表格(代码很简单)

    创建一个Controller进行测试 

    2024年02月07日
    浏览(54)
  • 如何使用Java 实现excel模板导出---多sheet导出?

    效果展示: maven依赖 相关工具类 **此处省略异常处理类 ExcelReportUtil 类 excel 接口 实现类 excel填充数据处理类 excel填充处理类 excel模板处理 实现关键代码展示 通过模板实现导出功能 ExcelReportCreator 中的代码 导入数据案例展示 excel模板批注案例 每个sheet页都需要写批注,通过批

    2024年02月15日
    浏览(34)
  • 【教程】IDEA配置Tomcat以及如何导入导出包含java源码的war包

    今天第一次写web课的上机实验项目,实验说明给的全是eclipse的操作流程,导致本菜鸡以及班上许许多多使用IDEA甚至spring项目闭眼都能写的大牛无从下手(因为springboot集成了Tomcat)。经过本人今日六个小时在某度搜索站的热血奋战,尚且总结了一套教程用以答疑解惑。 idea不

    2024年02月10日
    浏览(41)
  • Springboot Excel 最简单的 多sheet表 导入导出

    上周学习群里有人问到,多个sheet的导出导入,我第一反应就是easypoi不是自己就有方法了么? 后面一想,可能有些看客还处于是 找工具类,然后调试 的写代码 的 阶段,可能还不会去看jar包的一些函数。 既然如此,那就写一写Excel  多sheet表 导入导出。 之前的一些excel的相

    2024年02月16日
    浏览(31)
  • 【工具插件类教学】NPOI插件使用Excel表格的导入和导出(包含图片)

    目录 一.导入Excel 解析读取 1.选择导入的目标文件 2.解析读取导入的文件

    2024年01月16日
    浏览(44)
  • poi+easypoi实现表头多层循环,多级动态表头、树形结构动态表头、纵向合并单元格、多个sheet导出

    我前面也写过几篇关于easypoi复杂表格导出的文章,什么一对多纵向合并、多级表头、动态表头、多个sheet等,这些我写那几篇文章之前做项目都遇到过,并且都实现出来了。 感兴趣的可以看看: easypoi多级表头、多个sheet导出,动态导出列、动态更改表头 easypoi一对多,纵向合

    2024年02月08日
    浏览(33)
  • java使用esayExcel

    controller service 单元格宽度配置类 util

    2024年04月10日
    浏览(24)
  • Java 使用 EasyExcel 实现导入导出(新手篇教程)

    官网镇楼↓,觉得我写的不好的同学可以去官网看哦 EasyExcel 示例: 如上一个简易 Excel 表格,表头占了两行,且第三列开始才为有效数据,那么我们应该如何导入? 建造实体类 首先无论是导入还是导出,都需要先建对应的实体类  如图所示,因为我的示例 Excel 一共需要读

    2024年04月17日
    浏览(31)
  • 使用Java根据表名导出与导入Sql

    前言 很粗糙啊,有很多可以优化的地方,而且也不安全,但是临时用还是OK的,我这个是公司里面的单机软件,不联网。 嗨!我是一名社交媒体增长黑客,很高兴能帮助您优化和丰富关于批量作业导出和导入的文章。这个主题相当技术性,但我会将其分解为易于理解的部分。

    2024年02月13日
    浏览(24)
  • 使用Java导入、导出excel详解(附有封装好的工具类)

    😜 作           者 :是江迪呀 ✒️ 本文 : Java 、 Excel 、 导出 、 工具类 、 后端 ☀️ 每日   一言 :有些事情不是对的才去坚持,而是坚持了它才是对的! 我们在日常开发中,一定遇到过要将数据导出为 Excel 的需求,那么怎么做呢?在做之前,我们需要思考

    2024年02月06日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包