EasyExcel代码层面设置写出的Excel样式、以及拦截器策略的使用、自动列宽设置、EasyExcel默认设置详解

news2025/8/12 8:07:49

一、概述

虽然EasyExcel已经提供了一系列注解方式去设置样式。

但是如果没有实体类,或者想要更精确的去设置导出文件的Excel样式的时候就需要在代码层面去控制样式了。

二、使用已有拦截器自定义样式

主要步骤:

  • 创建Excel对应的实体对象
  • 创建一个style策略 并注册
  • 写出Excel

第一步是否需要创建Excel实体对象,得根据实际需求而定,如果导出字段不固定则使用无模型的方式即可

不使用实体类时可以直接传入List<List>类型的数据来作为表头和数据内容。

2.1 定义一个Excel实体类

@Getter
@Setter
@EqualsAndHashCode
public class DemoData {
    @ExcelProperty("字符串标题")
    private String string;
    @ExcelProperty("日期标题")
    private Date date;
    @ExcelProperty("数字标题")
    private Double doubleData;
    /**
     * 忽略这个字段
     */
    @ExcelIgnore
    private String ignore;
}

2.2 设置表头样式

// 创建一个写出的单元格样式对象
WriteCellStyle headWriteCellStyle = new WriteCellStyle();
// 背景设置为红色
headWriteCellStyle.setFillForegroundColor(IndexedColors.RED.getIndex());

// 创建写出Excel的字体对象
WriteFont headWriteFont = new WriteFont(); 
headWriteFont.setFontHeightInPoints((short)20);				// 设置字体大小为20
headWriteFont.setItalic(BooleanEnum.TRUE.getBooleanValue());// 设置字体斜体
headWriteCellStyle.setWriteFont(headWriteFont);				// 把字体对象设置到单元格样式对象中

2.3 设置内容样式

// 创建一个写出的单元格样式对象
WriteCellStyle headWriteCellStyle = new WriteCellStyle();
// 这里需要指定 FillPatternType 为FillPatternType.SOLID_FOREGROUND
// 不然无法显示背景颜色.头默认了 FillPatternType所以可以不指定
contentWriteCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND);
// 设置内容背景色为绿色
contentWriteCellStyle.setFillForegroundColor(IndexedColors.GREEN.getIndex());

// 边框设置
contentWriteCellStyle.setBorderTop(BorderStyle.THIN);			 // 设置单元格上边框为细线
contentWriteCellStyle.setBorderBottom(BorderStyle.THICK);		 // 设置单元格下边框为粗线
contentWriteCellStyle.setBorderLeft(BorderStyle.MEDIUM);	     // 设置单元格左边框为中线
contentWriteCellStyle.setBorderRight(BorderStyle.MEDIUM_DASHED); // 设置单元格右边框为中虚线

// 创建写出Excel的字体对象
WriteFont contentWriteFont = new WriteFont();
contentWriteFont.setFontHeightInPoints((short)20);						  //设置字体大小
contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER); //设置文字居中
contentWriteCellStyle.setWriteFont(contentWriteFont); 	 // 把字体对象设置到单元格样式对象中

2.4 使用EasyExcel默认的拦截器策略自定义样式

常见的策略有两种:

  • HorizontalCellStyleStrategy :每一行的样式都一样 或者隔行一样

    源码中它主要有两个构造函数:

    // 构造函数一:接收一个WriteCellStyle对象和一个List<WriteCellStyle>集合
    // 第一个参数是表头部分单元格的样式
    // 第二个参数是内容部分的单元格样式
    public HorizontalCellStyleStrategy(WriteCellStyle headWriteCellStyle,
        								List<WriteCellStyle> contentWriteCellStyleList) {
        this.headWriteCellStyle = headWriteCellStyle;
        this.contentWriteCellStyleList = contentWriteCellStyleList;
    }
    
    // 构造函数二:接收两个WriteCellStyle对象
    // 第一个参数是表头部分的单元格的样式
    // 第二个参数是内容部分的单元格样式
    public HorizontalCellStyleStrategy(WriteCellStyle headWriteCellStyle, 
                                       			  WriteCellStyle contentWriteCellStyle) {
        this.headWriteCellStyle = headWriteCellStyle;
        if (contentWriteCellStyle != null) {
            this.contentWriteCellStyleList = 
                	ListUtils.newArrayList(new WriteCellStyle[]{contentWriteCellStyle});
        }
    
    }
    

    WriteCellStyle其实只是一个单元格的对象。

    把它交由HorizontalCellStyleStrategy之后,就可以被渲染成一行的对象。然后每行都按这个策略执行。

    接收List<WriteCellStyle>参数时,会循环渲染集合中的样式对象。

  • AbstractVerticalCellStyleStrategy :每一列的样式都一样 需要自己回调每一页

    它是一个抽象类,需要自己定义类去继承它,然后重写里面对应的方法。

    这部分文档中的描述几乎没有,全靠自己摸索,可能官方更推荐第一种方式

2.5 使用默认的拦截器HorizontalCellStyleStrategy自定义样式

// 完整代码
@Test
public void handlerStyleWrite() {
    // 创建一个写出的单元格样式对象
    WriteCellStyle headWriteCellStyle = new WriteCellStyle();
    // 这里需要指定 FillPatternType 为FillPatternType.SOLID_FOREGROUND
    // 不然无法显示背景颜色.头默认了 FillPatternType所以可以不指定
    contentWriteCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND);
    // 设置内容背景色为绿色
    contentWriteCellStyle.setFillForegroundColor(IndexedColors.GREEN.getIndex());

    // 边框设置
    contentWriteCellStyle.setBorderTop(BorderStyle.THIN);			// 设置单元格上边框为细线
    contentWriteCellStyle.setBorderBottom(BorderStyle.THICK);		// 设置单元格下边框为粗线
    contentWriteCellStyle.setBorderLeft(BorderStyle.MEDIUM);	    // 设置单元格左边框为中线
    contentWriteCellStyle.setBorderRight(BorderStyle.MEDIUM_DASHED);//设置单元格右边框为中虚线

    // 创建写出Excel的字体对象
    WriteFont contentWriteFont = new WriteFont();
    contentWriteFont.setFontHeightInPoints((short)20);						 //设置字体大小
    contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);//设置文字居中
    contentWriteCellStyle.setWriteFont(contentWriteFont); 	 // 把字体对象设置到单元格样式对象中
    
    // 这个策略是 头是头的样式 内容是内容的样式 其他的策略可以自己实现
    HorizontalCellStyleStrategy horizontalCellStyleStrategy =
        new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);

    // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
    EasyExcel.write(fileName, DemoData.class)
        .registerWriteHandler(horizontalCellStyleStrategy)
        .sheet("horizontalCellStyleStrategy拦截器设置样式")
        .doWrite(data());

}

2.5 使用默认的拦截器AbstractVerticalCellStyleStrategy自定义样式

1)创建一个类实现AbstractVerticalCellStyleStrategy

public class CustomVerticalCellStyleStrategy extends AbstractVerticalCellStyleStrategy {

    // 重写定义表头样式的方法
    @Override
    protected WriteCellStyle headCellStyle(Head head) {
        WriteCellStyle writeCellStyle = new WriteCellStyle();
        writeCellStyle.setFillBackgroundColor(IndexedColors.RED.getIndex());
        WriteFont writeFont = new WriteFont();
        writeFont.setColor(IndexedColors.RED.getIndex());
        writeFont.setBold(false);
        writeFont.setFontHeightInPoints(Short.valueOf((short)15));
        writeCellStyle.setWriteFont(writeFont);
        return writeCellStyle;
    }

    // 重写定义内容部分样式的方法
    @Override
    protected WriteCellStyle contentCellStyle(Head head) {
        WriteCellStyle writeCellStyle = new WriteCellStyle();
        writeCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND);
        writeCellStyle.setFillBackgroundColor(IndexedColors.GREEN.getIndex());
        writeCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
        return writeCellStyle;
    }
}

这个方式在背景色设置方面存在问题,不知道是不是bug,这种方式还是慎用吧

2)具体使用

@Test
public void handlerStyleWrite() {
	// 创建拦截器对象
    CustomVerticalCellStyleStrategy customVerticalCellStyleStrategy 
        										= new CustomVerticalCellStyleStrategy();

    // 写出Excel
    EasyExcel.write(fileName, DemoData.class)
        .registerWriteHandler(customVerticalCellStyleStrategy)
        .sheet("horizontalCellStyleStrategy拦截器设置样式")
        .doWrite(data());

}

三、自定义拦截器设置Excel样式

3.1 为什么不使用AbstractCellWriteHandler

老版本中自定义拦截器主要是继承 Easyexcel 的抽象类AbstractCellWriteHandler 控制器。

重写beforeCellCreate前置处理方法和afterCellDispose后置处理方法完成对应的方法达到控制单个单元格

样式的效果。但是AbstractCellWriteHandler这个抽象类在3.x版本已经被弃用,所以现在不推荐使用它。

3.2 实现CellWriteHandler接口

前面的两种方式,都只能在代码层面批量设置样式,而不能设置导出Excel中的一部分单元格样式。

实现这个接口后可以重写afterCellDispose方法来对单个单元格的样式进行设置。

每个单元格处理完毕之后都会调用它。

虽然文档中说不太推荐,可能是这里代码多了会影响性能,但是这是目前设置单个单元格最好的方式了。

3.1 基础使用

1)定义类实现CellWriteHandler接口,并重写afterCellDispose方法

public class CustomCellWriteStrategy implements CellWriteHandler {

    // 在单元格处理之后执行
    @Override
    public void afterCellDispose(CellWriteHandlerContext context) {
        // 当前事件会在 数据设置到poi的cell里面才会回调
        // 判断不是头的情况 如果是fill 的情况 这里会==null 所以用not true
        if (BooleanUtils.isNotTrue(context.getHead())) {
            // 获取第一个单元格对象
            // 只要不是头 一定会有数据 当然fill(填充)的情况 可能要context.getCellDataList() 
            // 这个需要看模板,因为一个单元格会有多个 WriteCellData
            WriteCellData<?> cellData = context.getFirstCellData();
            
            // cellData 可以获取样式/数据,也可以直接设置样式/数据,设置后会立即生效
            // 这里也需要用cellData去获取样式
            // 很重要的一个原因是 WriteCellStyle 和 dataFormatData绑定的 
            // 简单的说 比如你加了 DateTimeFormat,已经将writeCellStyle里面的dataFormatData改了 			  // 如果你自己new了一个WriteCellStyle,可能注解的样式就失效了
            // 然后getOrCreateStyle 用于返回一个样式,如果为空,则创建一个后返回
            // (总之记住用这个方法获取样式即可)
            WriteCellStyle writeCellStyle = cellData.getOrCreateStyle();
            writeCellStyle.setFillForegroundColor(IndexedColors.RED.getIndex());
            // 这里需要指定 FillPatternType 为FillPatternType.SOLID_FOREGROUND
            // 要不然背景色不会生效
            writeCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND);
            
            // 获取当前单元格的数据,必要的时候可以根据数据来设置单元格的颜色
            // 比如当前列为状态列,数据为1是正常,背景色为绿色,反正不正常,背景色设置为红
            // 这种需求的实现将变得可能
            Object data = cellData.getStringValue();
            System.out.println("data: " + data);
            
            // 这样样式就设置好了 后面有个FillStyleCellWriteHandler 默认会将 WriteCellStyle 设置			 到 cell里面去 所以可以不用管了
        }
    }
}

2)写出Excel时注册处理策略

@Test
public void handlerStyleWrite() {
	// 创建处理器策略对象
    CustomCellWriteStrategy customCellWriteStrategy = new CustomCellWriteStrategy();

    // 写出Excel
    EasyExcel.write(fileName, DemoData.class)
        .registerWriteHandler(customCellWriteStrategy)
        .sheet("自定义单个单元格样式演示")
        .doWrite(data());

}

四、设置列宽

有实体类的时候,可以使用注解去设置列宽,但是如果是那种无模型的,又该怎么去设置列宽呢。

官方提供的LongestMatchColumnWidthStyleStrategy

4.1 AbstractColumnWidthStyleStrategy

1)基础写法

定义一个类,去继承AbstractColumnWidthStyleStrategy这个抽象类,并且重写里面的setColumnWidth方法

public class ExcelWidthStyleStrategy extends AbstractColumnWidthStyleStrategy {
    
    @Override
    protected void setColumnWidth(WriteSheetHolder writeSheetHolder,
                                  List<WriteCellData<?>> cellDataList,
                                  Cell cell,
                                  Head head,
                                  Integer relativeRowIndex,
                                  Boolean isHead) {
        // 使用sheet对象 简单设置 index所对应的列的列宽
        Sheet sheet = writeSheetHolder.getSheet();
        sheet.setColumnWidth(cell.getColumnIndex(), 5000);
    }
}

每处理一个单元格都会调用一次setColumnWidth方法,这个方法有两种重载,重写哪一个都行。

2)自适应列宽写法

public class ExcelWidthStyleStrategy extends AbstractColumnWidthStyleStrategy {

     // 单元格的最大宽度
    private static final int MAX_COLUMN_WIDTH = 50;                   
    // 缓存(第一个Map的键是sheet的index, 第二个Map的键是列的index, 值是数据长度)
    private  Map<Integer, Map<Integer, Integer>> CACHE = new HashMap(8);    

    // 重写设置列宽的方法
    @Override
    protected void setColumnWidth(WriteSheetHolder writeSheetHolder, 
                                  List<WriteCellData<?>> cellDataList, 
                                  Cell cell, 
                                  Head head, 
                                  Integer relativeRowIndex, 
                                  Boolean isHead) {
        boolean needSetWidth = isHead || !CollectionUtils.isEmpty(cellDataList);
        // 当时表头或者单元格数据列表有数据时才进行处理
        if (needSetWidth) {
            Map<Integer, Integer> maxColumnWidthMap = 
                								CACHE.get(writeSheetHolder.getSheetNo());
            
            if (maxColumnWidthMap == null) {
                maxColumnWidthMap = new HashMap(16);
                CACHE.put(writeSheetHolder.getSheetNo(), maxColumnWidthMap);
            }
            // 获取数据长度
            Integer columnWidth = this.getLength(cellDataList, cell, isHead);
            if (columnWidth >= 0) {
                if (columnWidth > MAX_COLUMN_WIDTH) {
                    columnWidth = MAX_COLUMN_WIDTH;
                }
                // 确保一个列的列宽以表头为主,如果表头已经设置了列宽,单元格将会跟随表头的列宽
                Integer maxColumnWidth = maxColumnWidthMap.get(cell.getColumnIndex());
                
                if (maxColumnWidth == null || columnWidth > maxColumnWidth) {
                    maxColumnWidthMap.put(cell.getColumnIndex(), columnWidth);
                    // 如果使用EasyExcel默认表头,那么使用columnWidth * 512
                    // 如果不使用EasyExcel默认表头,那么使用columnWidth * 256
                    // 如果是自己定义的字体大小,可以再去测试这个参数常量
                    writeSheetHolder
                        	.getSheet()
                        	.setColumnWidth(cell.getColumnIndex(), columnWidth * 512);
                }

            }
        }
    }

    /**
     * 获取当前单元格的数据长度
     * @param cellDataList
     * @param cell
     * @param isHead
     * @return
     */
    private Integer dataLength(List<WriteCellData<?>> cellDataList, 
                               Cell cell, 
                               Boolean isHead) {
        if (isHead) {
            return cell.getStringCellValue().getBytes().length;
        } else {
            WriteCellData cellData = cellDataList.get(0);
            CellDataTypeEnum type = cellData.getType();
            if (type == null) {
                return -1;
            } else {
                switch(type) {
                    case STRING:
                        return cellData.getStringValue().getBytes().length;
                    case BOOLEAN:
                        return cellData.getBooleanValue().toString().getBytes().length;
                    case NUMBER:
                        return cellData.getNumberValue().toString().getBytes().length;
                    default:
                        return -1;
                }
            }
        }
    }

}

可以根据自己的需求自行改造

4.2 写出Excel时注册处理策略

@Test
public void handlerStyleWrite() {
	// 创建处理器策略对象
    ExcelWidthStyleStrategy excelWidthStyleStrategy = new ExcelWidthStyleStrategy();

    // 写出Excel
    EasyExcel.write(fileName, DemoData.class)
        .registerWriteHandler(excelWidthStyleStrategy)
        .sheet("单个单元格列宽设置")
        .doWrite(data());
}

五、EasyExcel其它默认设置

5.1 表头自动合并

EasyExcel.write(response.getOutputStream(), DemoData.class)
            .automaticMergeHead(false)		 // 自动合并表头
            .sheet("模板")
            .doWrite(demoData);

automaticMergeHead设置为true,那么对于相邻表格中存在相同内容单元格,easyexcel会自动将其合并。

它的默认值也是true

如果不想使用表头自动合并,就设置为false即可。

5.2 取消导出Excel的默认风格

EasyExcel.write(response.getOutputStream(), DemoData.class)
            .useDefaultStyle(false)		 	// 取消导出Excel的默认风格
            .sheet("模板")
            .doWrite(demoData);

easyexcel的默认风格是最明显的体现,对于表头会显示灰色背景,并且字体会加粗和放大。

在这里插入图片描述

如果不想使用这个默认风格,把useDefaultStyle设置为false即可。

5.3 是否使用1904日期窗口

EasyExcel.write(response.getOutputStream(), DemoData.class)
            .use1904windowing(true)		 	// 设置使用1904的时间格式
            .sheet("模板")
            .doWrite(demoData);

EasyExcel中时间是存储1900年起的一个双精度浮点数。一般也是使用1900的时间格式就可以了。

l的默认风格
.sheet(“模板”)
.doWrite(demoData);


`easyexcel`的默认风格是最明显的体现,对于表头会显示灰色背景,并且字体会加粗和放大。

[外链图片转存中...(img-wPwym65d-1668738682387)]

如果不想使用这个默认风格,把`useDefaultStyle`设置为`false`即可。



### 5.3 是否使用1904日期窗口

```java
EasyExcel.write(response.getOutputStream(), DemoData.class)
            .use1904windowing(true)		 	// 设置使用1904的时间格式
            .sheet("模板")
            .doWrite(demoData);

EasyExcel中时间是存储1900年起的一个双精度浮点数。一般也是使用1900的时间格式就可以了。

如果有业务想把开始日期改为1904,就可以设置use1904windowingtrue即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/15184.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

注意 ! !|95% 的应用程序中发现错误配置和漏洞

业内权威机构 Synopsys 最近发布了一项研究报告&#xff0c;结果表明在进行4300次测试后&#xff0c;发现95%的应用程序中都至少都有一个影响安全的漏洞或配置错误&#xff0c;其中高危漏洞占20%&#xff0c;严重漏洞则占4.5%。在此次研究中&#xff0c;82% 的测试目标是 Web 应…

调用链路上千条,如何观测 Nacos 的运行状态

作者&#xff1a;涌月 背景 随着近年来微服务体系发展&#xff0c;微服务上下游链路的越来越复杂&#xff0c;在阿里云的线上实践场景中&#xff0c;我们发现使用微服务架构的公司的业务动辄会出现上千条调用链路&#xff0c;排查问题代价巨大。 在这种背景下&#xff0c;阿…

灰鸽子木马特征值免杀

文章目录木马特征值免杀一. 木马特征值免杀0x01. 灰鸽子配置生成木马0x02. 使用MyCCL复合特征码定位器反复缩小目标进行定位0x03. 直到定位到很小的区间0x04. 用工具将文件偏移地址0009B9C3转换成内存地址0049C5C30x05. 使用OD跳转特征值语句的执行顺序以实现免杀0x06. 将修改后…

【深入浅出Spring6】第五期——循环依赖和反射机制

一、Bean的循环依赖问题 什么是循环依赖&#xff1f; 类似于A依赖B&#xff0c;B又依赖A&#xff0c;这样就构成了依赖闭环 需求&#xff1a;我们创建两个类&#xff0c;彼此内置对方为私有属性&#xff0c;我们查看是否可以正常输出 $ singleton setter产生的循环依赖 编写我…

(八)Bean的生命周期

文章目录环境什么是Bean的生命周期为什么要知道Bean的生命周期Bean生命周期之5步Bean生命周期之7步Bean生命周期之10步三个点位详解&#xff1a;点位1点位2点位3演示程序Bean的作用域不同&#xff0c;管理方式不同自己new的对象如何让Spring管理上一篇&#xff1a;&#xff08;…

UE4 回合游戏项目 20- 添加人物被攻击的动画

在上一节&#xff08;UE4 回合游戏项目 19- 添加血量UI&#xff09;基础上继续添加人物被攻击时播放被攻击动画的功能。 效果&#xff1a;&#xff08;当玩家被攻击时&#xff0c;播放相应的受到伤害的动画&#xff09; 步骤&#xff1a; 1.打开“1lantu”&#xff0c;在事件图…

艾美捷试剂级SM-102解决方案

LNP是一种多组分系统&#xff0c;通常由可电离脂质或阳离子类脂质化合物、辅助脂质、胆固醇、保护剂聚乙二醇-脂质共轭物组成。 脂质纳米颗粒&#xff08;LNP&#xff09;是mRNA药物常用的载体。目前&#xff0c;BioNTech/辉瑞和 Moderna的mRNA疫苗都采用LNP作为运输载体&#…

SpringMVC ---- RESTful

SpringMVC ---- RESTful1. RESTful简介a>资源b>资源c>资源2. RESTful的实现3. HiddenHttpMethodFilter1. RESTful简介 REST&#xff1a;Representational State Transfer&#xff0c;表示层资源状态转移。 a>资源 资源是一种看待服务器的方式&#xff0c;即&…

ECM:敏感文档控制的秘密武器

ECM&#xff1a;敏感文档控制的秘密武器 您的企业每天都会创建和处理数百个文档。这些文件详细说明了企业流程、产品规格&#xff0c;并为其他员工和客户提供指导。 每天都有大量文档流入和流出您的组织&#xff0c;有一件事始终保持不变&#xff1a;那就是组织内部和外部的…

Docker零基础快速入门(通俗易懂)

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 Docker一、安装Docker二、配置镜像加速器三、Docker服务命令四、Docker镜像命令五、Docker容器命令六、Docker容器数据卷七、Docker部署应用…

view的context一定是Activity吗

最近在使用glide加载图片的时候出现“Caused by: java.lang.IllegalArgumentException: You cannot start a load for a destroyed activity”&#xff0c;但明明在使用glide之前已经进行了Activity是否destroy的判断&#xff0c;为什么还会发生这个crash呢&#xff1f;注意到A…

【快速上手系列】使用idea调百度AI接口实现内容审核(鉴黄)功能

【快速上手系列】使用idea调百度AI接口实现内容审核&#xff08;鉴黄&#xff09;功能 一、文本审核 步骤 1、百度AI开放平台 登录后点击控制台 点击应用列表——点击创建应用 填写一下信息然后创建 也可以配置审核策略 策略配置页面 然后回到概览——领取免费资源&#xf…

threeJS嵌入可交互的普通页面

效果图:1.这是我将一个地图当作地面&#xff0c;外面再包一个天空盒就更好看了 2.上面的例子可能不够直观&#xff0c;下面这个例子是嵌入的bilibili官网&#xff0c;嵌入的网页内容可以正常交互 关键 关键是用到了CSS3DRenderer渲染器。CSS3DRenderer仅仅关注普通的DOM元素&a…

【计算机网络】无线局域网详解

文章目录无线局域网IEEE802.11IEEE802.11的MAC帧头有固定基础设施的无线局域网无固定基础设施无线局域网的自组织网络VLAN传统局域网的局限VLAN虚拟局域网基本概念virtual local area networkVLAN 实现&#x1f343;博主昵称&#xff1a;一拳必胜客 &#x1f338;博主寄语&…

数据增强方法汇总

数据增强1.有监督数据增强1.1 单样本数据增强augly安装augly使用方法1.2 多样本数据增强1.2.1 SMOTEpython实现1.2.2 SamplePairingpython实现1.2.3 mixuppython实现2.无监督数据增强2.1 GAN2.2 Diffunsion2.3 Autoaugmentation1.有监督数据增强 1.1 单样本数据增强 augly安装…

MongoDB(4.0.9)数据从win迁移到linux

服务器从win迁移导了linux上了&#xff0c;对应的md里面的数据也需要做全量迁移&#xff0c;在网上找了一大堆方案&#xff0c;不是缺胳膊就是少腿&#xff0c;没有一个是完整的&#xff0c;最终加以分析和整理&#xff0c;得出这套方案&#xff0c;希望对你有用 第一步&#…

Java集合框架【二容器(Collection)[Vector容器类]】

文章目录三 Vector容器类3.5 Vector容器类3.5.1 Vector的使用3.5.2 Stack容器3.5.3.1 Stack容器介绍3.5.3.2 操作栈方法Stack的使用案例三 Vector容器类 3.5 Vector容器类 Vector底层是用数组实现的&#xff0c;相关的方法都加了同步检查&#xff0c;因此“线程安全&#xff…

D. Divide and Sum(组合数学)

Problem - 1445D - Codeforces 题意: 给你一个长度为2n的数组a。考虑将数组a划分为两个子序列p和q&#xff0c;每个子序列的长度为n&#xff08;数组a的每个元素应该正好在一个子序列中&#xff1a;要么在p中&#xff0c;要么在q中&#xff09;。 让我们以非递减顺序对p进行排…

matplotlib笔记

一、安装matplotlib总是超时导致失败 鉴于公司内网服务器上直接pip install matplotlib容易超时退出的问题&#xff0c;可以采用下面的方法解决&#xff1a; 方法一&#xff1a;指定更新源 pip install -i Simple Index matplotlib3.2.2 注意选择3.2.2&#xff0c;因为最新版本…

AP22615AWU-7、SLG5NT1758V配电开关 驱动器 IC资料

AP22615配电开关具有输出过压保护 (OVP) 功能&#xff0c;设计用于USB和其他热插拔应用。该器件提供输出过压保护&#xff0c;可保护这些应用的系统。具有输出过压保护、反向电流阻断、过流、过热和短路保护功能。其他功能包括受控上升时间和欠压锁定功能。 AP22615具有可调限…