`

EasyExcel自定义Converter 与 Handler

    博客分类:
  • java
阅读更多


1、Easy Excel(https://easyexcel.opensource.alibaba.com/docs/current/quickstart/write )


  @Data
  public static class CellDataWithStyle {

    private T val;

    private Integer flag = 1;

    CellDataWithStyle(T val) {
      this.val = val;
    }

  }



public static class StyleConverter implements Converter {

    @Override
    public Class supportJavaTypeKey() {
      return CellDataWithStyle.class;
    }

    @Override
    public CellDataTypeEnum supportExcelTypeKey() {
      return CellDataTypeEnum.STRING;
    }

    @Override
    public CellDataWithStyle convertToJavaData(CellData cellData, ExcelContentProperty contentProperty,
        GlobalConfiguration globalConfiguration) throws Exception {
      // 无样式
      return new CellDataWithStyle(cellData.getNumberValue());
    }

    @Override
    public CellData convertToExcelData(CellDataWithStyle value, ExcelContentProperty contentProperty,
        GlobalConfiguration globalConfiguration) throws Exception {
      if (Objects.isNull(value) || Objects.isNull(value.getVal())) {
        return CellData.newEmptyInstance();
      }

      return new CellData(JSONUtil.toJsonStr(value));
    }

  }


 

final CellWriteHandler ddStyleWriteHandler = new AbstractCellWriteHandler() {
    @Override
    public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder,
        List<CellData> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {

      if (!CellType.STRING.equals(cell.getCellTypeEnum()) || !JSONUtil.isTypeJSONObject(cell.getStringCellValue())) {
        return;
      }
      CellDataWithStyle cws = JSONUtil.toBean(cell.getStringCellValue(), CellDataWithStyle.class, true);
      cell.setCellValue(String.valueOf(cws.getVal()));
      
      if (cws.getFlag() != 1) {
        return;
      }
      Workbook workbook = writeSheetHolder.getSheet().getWorkbook();
      CellStyle cellStyle = workbook.createCellStyle();
      cellStyle.cloneStyleFrom(cell.getCellStyle());
      Font font = workbook.createFont();
      font.setColor(IndexedColors.RED.getIndex());
      cellStyle.setFont(font);
      cell.setCellStyle(cellStyle);
    }

  };




  @Data
  public static class BusinessData {

    @ExcelProperty(value = "id")
    private Long id;

    @ExcelProperty(value = "总金额")
    private BigDecimal totalAmount;

    @ExcelProperty(value = "金额")
    private CellDataWithStyle<BigDecimal> amount;

  }
      WriteSheet writeSheet = EasyExcelFactory.writerSheet()
          .registerConverter(new DdStyleConverter())
          .registerWriteHandler(ddStyleWriteHandler)
          .build();











 

分享到:
评论

相关推荐

    easyExcel自定义样式.rar

    "easyExcel自定义样式.rar"这个压缩包显然包含了一些关于如何在easyExcel中自定义样式的示例代码。下面我们将深入探讨easyExcel自定义样式的核心概念和实现方法。 首先,`PoiUtils.java`可能是一个工具类,用于封装...

    EasyExcel自定义

    总结来说,EasyExcel的自定义功能包括了自定义单元格样式(CellStyle)、自定义数据转换(CustomConvert)以及自定义样式策略(CustomVerticalCellStyleStrategy)。这三者共同构成了一个强大的工具集,能够帮助...

    enum-converter:枚举的自定义转换器

    这就是"enum-converter"所解决的问题——提供枚举的自定义转换器。 枚举的自定义转换器主要是为了在不同数据格式之间进行枚举的转换,例如将枚举值转换为字符串、整数或其他类型,以便于存储和传输。在Java中,我们...

    自定义动态导出excel封装类

    数据映射与写入** 为了动态导出数据,我们需要将Java对象转换为Excel单元格。可以定义一个方法,接受数据模型和Sheet对象,遍历对象属性并写入对应的单元格。 ```java public void writeData(List&lt;DataModel&gt; ...

    简单Excel导入导出处理类[自定义列,自定义列转换]

    在IT行业中,Excel数据处理是一项...通过这样的自定义处理,我们可以有效地将Excel文件与我们的业务系统对接,提高数据处理的灵活性和效率。这在企业级应用中尤其重要,因为它们经常需要处理大量来自不同来源的数据。

    利用easyExcel导出上万条数据,自定义策略合并单元格

    本文将深入探讨如何使用阿里云开发的开源库EasyExcel来处理大数据导出,并结合Apache POI库,以及SpringBoot框架,实现上万条数据的自定义策略合并单元格导出。我们将基于提供的技术栈——EasyExcel 2.1.7,Apache ...

    easyExcel生成个性化表格(自定义行高,合并,字体,去网格线),前后端分离开发下,返回错误的JSON数据给前端

    本篇文章将深入探讨如何利用EasyExcel生成个性化表格,包括自定义行高、单元格合并、设置字体以及去除网格线,并且在前后端分离的开发模式下,如何正确地返回JSON数据给前端。 首先,让我们了解EasyExcel的基本使用...

    阿里的EasyExcel+Mysql方式实现数据库数据导出生成excel,将excle表里面的数据保存到数据库.zip

    本项目是关于如何利用EasyExcel与MySQL数据库配合,实现数据的导出生成Excel文件,以及将Excel中的数据保存到数据库的操作。 首先,EasyExcel是阿里巴巴开源的一款轻量级的Java处理Excel工具,它支持读取和写入...

    excel导入动态校验,自定义注解动态校验

    在实际项目中,这一功能常与Java的Spring框架结合,利用其提供的`@Validated`注解和`Validator`接口。此外,还可以利用Apache POI库来读取和操作Excel文件,以及Hibernate Validator库来处理自定义注解的校验逻辑。 ...

    导出到Excel,并且自定义文件名

    在服务器端,接收到这个文件名后,将其与扩展名".xlsx"组合,用于创建Excel文件。 4. **导出到Excel并下载**: 使用选择的库(如EPPlus),创建一个新的Excel工作簿,然后将GridView数据写入工作表。完成后,设置...

    阿里EasyExcel的操作.pdf

    EasyExcel还支持更复杂的读写功能,如自定义数据处理器、数据验证、多线程读取等。其设计目标是让用户能以极低的学习成本,轻松地处理Excel数据,同时解决了大文件处理时的内存问题。因此,无论是在中小型企业还是...

    Excel导出、自定义表头、锁定首行、合并、字体、边框

    本教程将深入探讨如何利用Excel进行高效的数据导出、自定义表头、锁定首行、单元格合并、设置字体以及添加边框,以增强数据的可读性和美观性。 首先,Excel导出是一个常用的功能,它允许我们将工作簿中的数据保存为...

    自定义全局类型转换器

    注册方式与`Converter`类似,只需将`CustomDateFormatter`实例添加到转换服务中。 通过自定义全局类型转换器,我们可以更灵活地控制数据的转换过程,以满足各种复杂的业务需求。这在处理用户输入、数据库读写、API...

    exayExcel导入导出.docx

    在EasyExcel中,通过注解我们可以轻松地将实体类的成员变量与Excel的字段进行映射,这极大地简化了数据的读取过程。例如,我们可以使用`@ExcelProperty`注解来指定字段与Excel列的对应关系,既可以按照列名,也可以...

    ConvertCustomDictionaries:转换自定义字典

    转换自定义字典 转换自定义字典 java -jar ConvertCustomDictionaries-1.0-SNAPSHOT-jar-with-dependencies.jar ctakes-resources-3.1.0/resources/org/apache/ctakes/dictionary/lookup/rxnorm_index out.txt

    自定义easyExcel226

    【自定义easyExcel226】是一个针对Apache POI库的二次开发项目,它基于`easyExcel2.2.6`版本进行修改,目的是解决在特定项目环境中与多个POI版本共存的问题。Apache POI是Java语言中用于读写Microsoft Office格式...

    execl导出工具类

    在Java开发中,经常需要处理Excel文件的导入与导出工作。本篇文章介绍一个简单易用的Excel导出工具类——`ExcelUtil`,该工具类能够帮助开发者快速实现Excel文件的导出功能。 根据给定的文件信息,“这是一个Excel...

    阿里的EasyExcel+Mysql方式实现数据库数据导出生成exce

    首先,我们来看如何使用EasyExcel与SpringBoot结合实现数据库数据导出到Excel。在SpringBoot项目中,你需要先引入EasyExcel的依赖,通常是在pom.xml文件中添加对应的Maven坐标。然后,你可以创建一个处理类,定义一...

    easyexcel-utils:EasyExcel简单封装,通过修改原始码增加更多的型号注解支持-修改

    最近阿里开源的excel读写项目EasyExcel又火了起来。原来是项目又开始维护了,从1.x更新到2.x了,而且逐步Swift,目前已经更新到版本。 关于easyexcel,其主要目的是为了降低读取excel时的内存消耗,简化读写excel的...

    EasyExcel 动态表头 导出

    EasyExcel不仅提供了简单易用的API,而且支持动态表头,使得在导出Excel时可以根据业务需求自定义头部结构,增加了程序的灵活性和适应性。 在传统的Excel导出方式中,通常需要通过硬编码的方式来设定Excel的表头和...

Global site tag (gtag.js) - Google Analytics