首页 > 编程语言 >Java EasyExcel 随记

Java EasyExcel 随记

时间:2023-10-24 19:34:55浏览次数:30  
标签:cellStyle Java EasyExcel cell void writeSheetHolder sheet 下拉框 随记

JAR

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>2.2.7</version>
</dependency>

入口

EasyExcel.write(response.getOutputStream(), 导出实体类.class).sheet("导出EXCEL名称")
                    .registerWriteHandler(new CustomSheetWriteHandler(subpackageWorkerRegisterService, export.size(), export.size() + 3, export.size() + 10, 0, 18)).doWrite(export);

描述

  • CustomSheetWriteHandler : 新建类名称
  • sheetNumber : 导出列表数据长度
  • firstRow : 起始行
  • lastRow : 截止行
  • firstCol : 起始列
  • lastCol : 截止列

HEAD注解

@HeadRowHeight(36)
@HeadFontStyle(fontName = "宋体",fontHeightInPoints = 16)//表头字体样式
@ContentStyle(horizontalAlignment = HorizontalAlignment.CENTER,verticalAlignment = VerticalAlignment.CENTER)//内容样式,垂直水平居中

字段注解

@HeadFontStyle(color= 10)
@ColumnWidth(16)
@ExcelProperty(value = "*是否农民工", index = 3)

描述

  • HeadFontStyle : 当前字段名称样式
  • ColumnWidth : 当前字段宽度
  • ExcelProperty :value-字段名称 index-Excel中从左到右索引
  • color :字段颜色 (10:红色)

下拉框

新建类实现方法(implements SheetWriteHandler)

@Override
public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {

}

@Override
public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
    //定义一个map key是需要添加下拉框的列的index value是下拉框数据
    Map<Integer, String[]> mapDropDown = new HashMap<>(3);
    //是否农民工
    String[] migrantWorker = {"是", "否"};

    //用工类别
    String[] employmentCategory = {"合同工", "劳务派遣"};

    //银行卡开户行
    List<String> dictListName = subpackageWorkerRegisterService.getDictListName();
    String[] openingBankCode = null;
    if (null != dictListName && 0 < dictListName.size()) {
        openingBankCode = new String[dictListName.size()];
        for (int i = 0; i < dictListName.size(); i++) {
            String name = dictListName.get(i);
            openingBankCode[i] = name;
        }
    } else {
        openingBankCode = new String[]{"东莞银行", "中信银行", "中国银行"};
    }

    //下拉选在Excel中对应的列
    mapDropDown.put(3, migrantWorker);
    mapDropDown.put(4, employmentCategory);
    mapDropDown.put(5, openingBankCode);

    //获取工作簿
    Sheet sheet = writeSheetHolder.getSheet();

    ///开始设置下拉框
    DataValidationHelper helper = sheet.getDataValidationHelper();
    //设置下拉框
    for (Map.Entry<Integer, String[]> entry : mapDropDown.entrySet()) {
        /*起始行、终止行、起始列、终止列  起始行为1即表示表头不设置**/
        //sheetNumber:导出列表数据长度
        CellRangeAddressList addressList = new CellRangeAddressList(1, sheetNumber, entry.getKey(), entry.getKey());
        /*设置下拉框数据**/
        DataValidationConstraint constraint = helper.createExplicitListConstraint(entry.getValue());
        DataValidation dataValidation = helper.createValidation(constraint, addressList);
        sheet.addValidationData(dataValidation);
    }
}

合并单元格并设置值

新建类实现方法(implements CellWriteHandler)

@Override
public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, Integer integer, Integer integer1, Boolean aBoolean) {

}

@Override
public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, Head head, Integer integer, Boolean aBoolean) {

}

@Override
public void afterCellDataConverted(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, CellData cellData, Cell cell, Head head, Integer integer, Boolean aBoolean) {

}

@Override
public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<CellData> list, Cell cell, Head head, Integer integer, Boolean aBoolean) {
    //当前行
    int curRowIndex = cell.getRowIndex();
    //当前列
    int curColIndex = cell.getColumnIndex();

    //合并单元格并设置样式和内容
    if (curRowIndex == sheetNumber) {
        if (0 == curColIndex) {
            Sheet sheet = cell.getSheet();
            // 合并日期占两行(4个参数,分别为起始行,结束行,起始列,结束列),行和列都是从0开始计数,且起始结束都会合并
            CellRangeAddress region = new CellRangeAddress(firstRow, lastRow, firstCol, lastCol);
            sheet.addMergedRegion(region);

            Workbook workbook = cell.getSheet().getWorkbook();
            CellStyle cellStyle = workbook.createCellStyle();
            cellStyle.setWrapText(true);
            cellStyle.setLocked(true);//设置锁定
            cellStyle.setAlignment(HorizontalAlignment.LEFT);
            cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);

            Font font = workbook.createFont();
            font.setFontName("宋体");
            font.setBold(true);
            font.setColor(IndexedColors.RED.getIndex());
            cellStyle.setFont(font);
            cell.setCellStyle(cellStyle);

            Row row = sheet.createRow(firstRow);
            Cell cell2 = row.createCell(0);

            cell2.setCellStyle(cellStyle);
            cell2.setCellValue("备注信息如下:\r\n" + "1、有'*'标注的为必填项\r\n" + "2、编辑红色标题EXCEL内容\r\n" + "3、只更新红色标题内容信息\r\n" + "4、用工类别:合同工、劳务派遣\r\n" + "5、银行卡开户行:若下拉无对应银行名称向客服反馈\r\n" + "6、标题为红色内容会覆盖现有数据\r\n");
        }
    }
}

标签:cellStyle,Java,EasyExcel,cell,void,writeSheetHolder,sheet,下拉框,随记
From: https://www.cnblogs.com/xiaoBlog2016/p/17785586.html

相关文章

  • Java基础 字节缓冲流、字节缓冲流拷贝文件
    字节缓冲流:原理:底层自带了长度为8192的缓冲区。利用缓冲区可以一次读写8192个字节,从而提高性能public BufferedInputStream(InputStream is)  →  把基本流包装成高级流,提高读取数据的性能public BufferedOutputStream(OutputStream os)  →  把基本......
  • 【Java 进阶篇】JavaScript 自动跳转首页案例
    在这篇博客中,我们将创建一个JavaScript案例,演示如何自动跳转到网站的首页。这种自动跳转通常用于欢迎页面或广告页面等场景。我们将从头开始创建这个案例,逐步介绍相关的JavaScript知识,让初学者也能理解并实现这个功能。1.什么是自动跳转?自动跳转是指当用户访问一个网页时,页面会自......
  • 【Java 进阶篇】创建 JavaScript 轮播图:让网页焕发生机
    欢迎大家来到本篇博客,今天我们将一起探讨如何使用JavaScript创建一个精美的轮播图。轮播图是现代网站设计的关键元素之一,它能够使网页更加吸引人,提高用户体验。无需担心,本文将面向基础小白,从头开始解释每一步。我们将详细介绍如何构建一个轮播图,涵盖以下内容:什么是轮播图?创建HTML......
  • 【Java 进阶篇】JavaScript BOM(浏览器对象模型)详解
    BOM,即浏览器对象模型(BrowserObjectModel),是JavaScript与浏览器之间的接口,它允许JavaScript与浏览器进行交互,实现访问和控制浏览器窗口、文档和其他浏览器功能的功能。本文将详细介绍BOM的各个方面,包括窗口对象、定时器、历史记录、位置信息等,并提供示例代码来帮助您更好地理解和运......
  • 【Java 进阶篇】JavaScript电灯开关案例:从原理到实现
    JavaScript是一门强大的编程语言,它可以用来创建各种交互式网页应用。在这篇博客中,我们将通过一个简单的电灯开关案例来深入了解JavaScript的基础概念,包括HTML、CSS和JavaScript的结合使用。我们将从头开始构建这个案例,逐步引入相关概念,以帮助初学者更好地理解JavaScript的工作原理......
  • 【Java 进阶篇】JavaScript 事件详解
    在本篇博客中,我们将深入探讨JavaScript事件,这是网页交互的核心。我们将从什么是事件开始,然后逐步介绍事件的类型、如何注册事件、事件处理程序、事件对象以及事件冒泡等相关内容。最终,我们将提供大量的示例代码来帮助您更好地理解JavaScript事件。什么是事件?在Web开发中,事件是用户......
  • java的位运算
    背景最近公司有来面试的,和他们沟通过后,看到公司的面试题上有这么一个题5|2的结果是什么。然后被他们问到,我只知道是一个位运算题,具体的答案还真的不知道,作为技术人,求知的精神定然不能缺少;今天就来查缺补漏,对位运算进行一个回顾。什么是位运算位运算是对整数在内存中的二进制进行操......
  • Java基础 缓冲流
    缓冲流是高级流,它对基本流做了一个包装,所以在底层,真正读写数据的还是InputStream和OutputStream这两个基本流,只不过有了缓冲流的加持,读写的效率更高而已  ......
  • docker-compose 外部配置部署 java 项目原创
    有的项目写完,需要打包到不同的环境。所以配置一个外部yml配置文件会方便很多,不用重新打包。文件目录构造├──app├──application.yml├──app.jar├──Dockerfile├──mysql├──nginxdocker-compose.ymlw.sh复制DockerfileFROMjava:8#VO......
  • java.lang.OutOfMemoryError: Java heap space 一次堆内存溢出异常处理
    问题:在获取人员信息同步到系统中时出现了错误 Javaheapspace,解决:堆内存溢出,在网上查询了诸多资料,解决办法都是增加JVM的内存:JAVA_OPTS="-server-Xms2048m-Xmx2048m-XX:PermSize=256M-XX:MaxNewSize=512m-XX:MaxPermSize=512m" ,尝试增加内存后还是失败     ......