我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

!--easyexcel dependency> groupId>com.alibaba/groupId> artifactId>easyexcel/artifactId> version>2.2.6/versio
2023-08-19

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录