Java导出Excel并合并单元格

需求:需要在导出excel时合并指定的单元格

 ruoyi excel

项目基于若伊框架二次开发,本着能用现成的就不自己写的原则,先是尝试了@Excel注解中needMerge属性

     /**
     * 是否需要纵向合并单元格,应对需求:含有list集合单元格)
     */
    public boolean needMerge() default false;

查了一圈别人的使用,大致是需要定义一个List集合,集合元素为对象,对象中的属性标注@Excel注解,并表明name属性

照葫芦画瓢

@Getter
@Setter
@ToString
public class CutterControlVO {

    /** 主键 */
    private Long id;

    /** 工厂编码 */
    @Excel(name = "工厂编码",needMerge = true)
    private String factoryCode;

    /** 产线编码 */
    @Excel(name = "产线编码",needMerge = true)
    private String productionLineCode;

    /** 设备编号 */
    @Excel(name = "设备编号",needMerge = true)
    private String deviceNumber;

    /** 设备名称 */
    @Excel(name = "设备名称",needMerge = true)
    private String deviceName;

    @Excel(name = "检测刀具编码",needMerge = true)
    private String cutterCode;

    /** 换刀时间 */
    @JsonFormat(timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    @Excel(name = "换刀时间",dateFormat = "yyyy-MM-dd HH:mm:ss",needMerge = true)
    private Date cutterChangeTime;

    /** 上刀数 */
    @Excel(name = "上刀数",needMerge = true)
    private Integer upperKnifeNumber;

    /** 下刀数 */
    @Excel(name = "下刀数",needMerge = true)
    private Integer lowerKnifeNumber;

    @Excel(name = "更换人员",needMerge = true)
    private String modifyUser;

    /** 备注 */
    @Excel(name = "备注",needMerge = true)
    private String remark;

    @Excel(name = "换刀位置")
    private List<CutterVO> cutterChangePosition;

    @Excel(name = "累计分切米数")
    private List<CutterVO> accumulatedCuttingMeters;


}
@Getter
@Setter
@ToString
public class CutterVO {

    @Excel(name = "上刀左")
    private Integer upperKnifeLeft;

    @Excel(name = "上刀中")
    private Integer upperKnifeCenter;

    @Excel(name = "上刀右")
    private Integer upperKnifeRight;

    @Excel(name = "下刀左")
    private Integer lowerKnifeLeft;

    @Excel(name = "下刀中")
    private Integer lowerKnifeCenter;

    @Excel(name = "下刀右")
    private Integer lowerKnifeRight;
}
@PostMapping("/export")
public void export(HttpServletResponse response) throws Exception{
    List<CutterControl> cutterControlList = cutterControlService.getCutterControlList();
    //设置导出的数据表格式
    List<CutterControlVO> cutterControlVOList = new ArrayList<>();
    CutterControlVO cutterControlVO = null;
    for (CutterControl cutterControl : cutterControlList) {
        cutterControlVO = new CutterControlVO();
        CutterVO cutterPosition = new CutterVO();
        cutterPosition.setUpperKnifeLeft(cutterControl.getCutterChangePositionUpperKnifeLeft());
        cutterPosition.setUpperKnifeCenter(cutterControl.getCutterChangePositionUpperKnifeCenter());
        cutterPosition.setUpperKnifeRight(cutterControl.getCutterChangePositionUpperKnifeRight());
        cutterPosition.setLowerKnifeLeft(cutterControl.getCutterChangePositionLowerKnifeLeft());
        cutterPosition.setLowerKnifeCenter(cutterControl.getCutterChangePositionLowerKnifeCenter());
        cutterPosition.setLowerKnifeRight(cutterControl.getCutterChangePositionLowerKnifeRight());

        CutterVO accumulatedCuttingMeters = new CutterVO();
        accumulatedCuttingMeters.setUpperKnifeLeft(cutterControl.getAccumulatedCuttingMetersUpperKnifeLeft());
        accumulatedCuttingMeters.setUpperKnifeCenter(cutterControl.getAccumulatedCuttingMetersUpperKnifeCenter());
        accumulatedCuttingMeters.setUpperKnifeRight(cutterControl.getAccumulatedCuttingMetersUpperKnifeRight());
        accumulatedCuttingMeters.setLowerKnifeLeft(cutterControl.getAccumulatedCuttingMetersLowerKnifeLeft());
        accumulatedCuttingMeters.setLowerKnifeCenter(cutterControl.getAccumulatedCuttingMetersLowerKnifeCenter());
        accumulatedCuttingMeters.setLowerKnifeRight(cutterControl.getAccumulatedCuttingMetersLowerKnifeRight());

        BeanUtils.copyProperties(cutterControl,cutterControlVO);
        cutterControlVO.setCutterChangePosition(Arrays.asList(cutterPosition));
        cutterControlVO.setAccumulatedCuttingMeters(Arrays.asList(accumulatedCuttingMeters));
        cutterControlVOList.add(cutterControlVO);
    }

    ExcelUtil<CutterControlVO> util = new ExcelUtil<CutterControlVO>(CutterControlVO.class);

    util.exportExcel(response,cutterControlVOList,"切刀管控台账数据");
}

查看导出效果:

黑人问号脸?

突然想到别人都是采用的是一个List集合,于是我注释了一个List,此时效果如下:

 可以看到,一个List效果是正常显示的,数据获取和显示也是正常的。

若伊使用的Excel导出工具类底层采用apache poi ,只能导出简单的excel表格,涉及复杂excel表格或者需要自定义表格时就比较难操作

使用阿里的easyExcel来实现复杂excel表格的导出

easyExcel

首先引入POM依赖

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

1、不合并单元格的写法

实体类

@Getter
@Setter
public class CutterControl {

    /** 主键 */
    @ExcelIgnore
    private Long id;

    /** 工厂编码 */
    @ExcelProperty(value = "工厂编码")
    private String factoryCode;

    /** 产线编码 */
    @ExcelProperty(value = "产线编码")
    private String productionLineCode;

    /** 设备编号 */
    @ExcelProperty(value = "设备编号")
    private String deviceNumber;

    /** 设备名称 */
    @ExcelProperty(value = "设备名称")
    private String deviceName;

    @ExcelProperty(value = "检测刀具编码")
    private String cutterCode;

    @ExcelProperty(value = "上刀左")
    private Integer cutterChangePositionUpperKnifeLeft;

    @ExcelProperty(value = "上刀中")
    private Integer cutterChangePositionUpperKnifeCenter;

    @ExcelProperty(value = "上刀右")
    private Integer cutterChangePositionUpperKnifeRight;

    @ExcelProperty(value = "下刀左")
    private Integer cutterChangePositionLowerKnifeLeft;

    @ExcelProperty(value = "下刀中")
    private Integer cutterChangePositionLowerKnifeCenter;

    @ExcelProperty(value = "下刀右")
    private Integer cutterChangePositionLowerKnifeRight;

    @ExcelProperty(value = "上刀左")
    private Integer accumulatedCuttingMetersUpperKnifeLeft;

    @ExcelProperty(value = "上刀中")
    private Integer accumulatedCuttingMetersUpperKnifeCenter;

    @ExcelProperty(value = "上刀右")
    private Integer accumulatedCuttingMetersUpperKnifeRight;

    @ExcelProperty(value = "下刀左")
    private Integer accumulatedCuttingMetersLowerKnifeLeft;

    @ExcelProperty(value = "下刀中")
    private Integer accumulatedCuttingMetersLowerKnifeCenter;

    @ExcelProperty(value = "下刀右")
    private Integer accumulatedCuttingMetersLowerKnifeRight;

    /** 换刀时间 */
    @JsonFormat(timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    @ExcelProperty(value = "换刀时间")
    @ColumnWidth(20)
    private Date cutterChangeTime;

    /** 上刀数 */
    @ExcelProperty(value = "上刀数")
    private Integer upperKnifeNumber;

    /** 下刀数 */
    @ExcelProperty(value = "下刀数")
    private Integer lowerKnifeNumber;

    @ExcelProperty(value = "更换人员")
    private String modifyUser;

    /** 备注 */
    @ExcelProperty(value = "备注")
    private String remark;

}

@ExcelIgnore :设置表格忽略该属性

@ColumnWidth(20): 设置列宽

controller代码

  @PostMapping("/export")
    public void export(HttpServletResponse response) throws Exception{
        List<CutterControl> cutterControlList = cutterControlService.getCutterControlList();
        String fileName = System.getProperty("user.dir") + "/" + System.currentTimeMillis() + ".xlsx";
        // 构建ExcelWriter
        ExcelWriter excelWriter = EasyExcel.write(fileName).excelType(ExcelTypeEnum.XLSX).build();
        // 构建sheet
        WriteSheet writeSheet = EasyExcel.writerSheet("切刀管控台账数据").head(CutterControl.class).build();
        // 写sheet
        excelWriter.write(cutterControlList, writeSheet);
        excelWriter.finish();
    }
结果:

2、自定义列合并策略

参考eastExcel文档可知,在实体类上添加属性即可实现我想要的效果

写Excel | Easy Excel

@Getter
@Setter
@EqualsAndHashCode
public class ComplexHeadData {
    @ExcelProperty({"主标题", "字符串标题"})
    private String string;
    @ExcelProperty({"主标题", "日期标题"})
    private Date date;
    @ExcelProperty({"主标题", "数字标题"})
    private Double doubleData;
}

再次照葫芦画瓢

@Getter
@Setter
public class CutterControl {

    /** 主键 */
    @ExcelIgnore
    private Long id;

    /** 工厂编码 */
    @ExcelProperty(value = "工厂编码")
    private String factoryCode;

    /** 产线编码 */
    @ExcelProperty(value = "产线编码")
    private String productionLineCode;

    /** 设备编号 */
    @ExcelProperty(value = "设备编号")
    private String deviceNumber;

    /** 设备名称 */
    @ExcelProperty(value = "设备名称")
    private String deviceName;

    @ExcelProperty(value = "检测刀具编码")
    private String cutterCode;

    @ExcelProperty({"换刀位置", "上刀左"})
    private Integer cutterChangePositionUpperKnifeLeft;

    @ExcelProperty({"换刀位置", "上刀中"})
    private Integer cutterChangePositionUpperKnifeCenter;

    @ExcelProperty({"换刀位置", "上刀右"})
    private Integer cutterChangePositionUpperKnifeRight;

    @ExcelProperty({"换刀位置", "下刀左"})
    private Integer cutterChangePositionLowerKnifeLeft;

    @ExcelProperty({"换刀位置", "下刀中"})
    private Integer cutterChangePositionLowerKnifeCenter;

    @ExcelProperty({"换刀位置", "下刀右"})
    private Integer cutterChangePositionLowerKnifeRight;

    @ExcelProperty({"累计分切米数", "上刀左"})
    private Integer accumulatedCuttingMetersUpperKnifeLeft;

    @ExcelProperty({"累计分切米数", "上刀中"})
    private Integer accumulatedCuttingMetersUpperKnifeCenter;

    @ExcelProperty({"累计分切米数", "上刀右"})
    private Integer accumulatedCuttingMetersUpperKnifeRight;

    @ExcelProperty({"累计分切米数", "下刀左"})
    private Integer accumulatedCuttingMetersLowerKnifeLeft;

    @ExcelProperty({"累计分切米数", "下刀中"})
    private Integer accumulatedCuttingMetersLowerKnifeCenter;

    @ExcelProperty({"累计分切米数", "下刀右"})
    private Integer accumulatedCuttingMetersLowerKnifeRight;

    /** 换刀时间 */
    @JsonFormat(timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    @ExcelProperty(value = "换刀时间")
    @ColumnWidth(20)
    private Date cutterChangeTime;

    /** 上刀数 */
    @ExcelProperty(value = "上刀数")
    private Integer upperKnifeNumber;

    /** 下刀数 */
    @ExcelProperty(value = "下刀数")
    private Integer lowerKnifeNumber;

    @ExcelProperty(value = "更换人员")
    private String modifyUser;

    /** 备注 */
    @ExcelProperty(value = "备注")
    private String remark;

}

其余不用修改

效果如下:

若需要导出excel在浏览器,修改Controller代码如下:

 @GetMapping("/export")
    public void export(HttpServletResponse response) throws Exception{
        List<CutterControl> cutterControlList = cutterControlService.getCutterControlList();
        String fileName = new String("切刀管控台账数据.xlsx");
        fileName = URLEncoder.encode(fileName, "UTF-8");
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf8");
        response.setHeader("Content-disposition", "attachment;filename=" + fileName );

        EasyExcel.write(response.getOutputStream(),CutterControl.class)
                .sheet("切刀管控台账数据")
                .doWrite(cutterControlList);
    }

3、自定义行合并策略

具体业务暂时用不到,需要的可参考这个博客

https://www.cnblogs.com/monianxd/p/16359369.html

导入excel并处理同名列

由于实体类中存在excel列名重复的情况,所以如果不进行处理,会出现只有一个有值的情况,最简单的处理方式如下:

同名列添加所在位置的索引,默认从0开始

@Getter
@Setter
public class CutterControl {

    /** 主键 */
    @ExcelIgnore
    private Long id;

    /** 工厂编码 */
    @ExcelProperty(value = "工厂编码")
    private String factoryCode;

    /** 产线编码 */
    @ExcelProperty(value = "产线编码")
    private String productionLineCode;

    /** 设备编号 */
    @ExcelProperty(value = "设备编号")
    private String deviceNumber;

    /** 设备名称 */
    @ExcelProperty(value = "设备名称")
    private String deviceName;

    @ExcelProperty(value = "检测刀具编码")
    private String cutterCode;

    @ExcelProperty(value = {"换刀位置", "上刀左"},index = 5)
    private Integer cutterChangePositionUpperKnifeLeft;

    @ExcelProperty(value = {"换刀位置", "上刀中"},index = 6)
    private Integer cutterChangePositionUpperKnifeCenter;

    @ExcelProperty(value = {"换刀位置", "上刀右"},index = 7)
    private Integer cutterChangePositionUpperKnifeRight;

    @ExcelProperty(value = {"换刀位置", "下刀左"},index = 8)
    private Integer cutterChangePositionLowerKnifeLeft;

    @ExcelProperty(value = {"换刀位置", "下刀中"},index = 9)
    private Integer cutterChangePositionLowerKnifeCenter;

    @ExcelProperty(value = {"换刀位置", "下刀右"},index = 10)
    private Integer cutterChangePositionLowerKnifeRight;

    @ExcelProperty(value = {"累计分切米数", "上刀左"},index = 11)
    private Integer accumulatedCuttingMetersUpperKnifeLeft;

    @ExcelProperty(value = {"累计分切米数", "上刀中"},index = 12)
    private Integer accumulatedCuttingMetersUpperKnifeCenter;

    @ExcelProperty(value = {"累计分切米数", "上刀右"},index = 13)
    private Integer accumulatedCuttingMetersUpperKnifeRight;

    @ExcelProperty(value = {"累计分切米数", "下刀左"},index = 14)
    private Integer accumulatedCuttingMetersLowerKnifeLeft;

    @ExcelProperty(value = {"累计分切米数", "下刀中"},index = 15)
    private Integer accumulatedCuttingMetersLowerKnifeCenter;

    @ExcelProperty(value = {"累计分切米数", "下刀右"},index = 16)
    private Integer accumulatedCuttingMetersLowerKnifeRight;

    /** 换刀时间 */
    @JsonFormat(timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    @ExcelProperty(value = "换刀时间")
    @ColumnWidth(20)
    private Date cutterChangeTime;

    /** 上刀数 */
    @ExcelProperty(value = "上刀数")
    private Integer upperKnifeNumber;

    /** 下刀数 */
    @ExcelProperty(value = "下刀数")
    private Integer lowerKnifeNumber;

    @ExcelProperty(value = "更换人员")
    private String modifyUser;

    /** 备注 */
    @ExcelProperty(value = "备注")
    private String remark;

}

导入Controller代码

@PostMapping("/import")
    public R importData(@RequestParam(value = "file") MultipartFile file) throws IOException {
        String fileName = file.getOriginalFilename();
        String suffixName = fileName.substring(fileName.lastIndexOf("."));
        if (!(suffixName.equals(".xlsx"))) {
            return R.fail("请上传xlsx格式文件");
        }

        EasyExcel.read(file.getInputStream(), CutterControl.class, new ReadListener<CutterControl>() {
            /**
             * 单次缓存的数据量
             */
            public static final int BATCH_COUNT = 100;
            /**
             *临时存储
             */
            private List<CutterControl> cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);

            @Override
            public void invoke(CutterControl data, AnalysisContext context) {
                cachedDataList.add(data);
                if (cachedDataList.size() >= BATCH_COUNT) {
                    saveData();
                    // 存储完成清理 list
                    cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
                }
            }

            @Override
            public void doAfterAllAnalysed(AnalysisContext context) {
                saveData();
            }

            /**
             * 加上存储数据库
             */
            private void saveData() {
                cutterControlService.batchInsertCutterControl(cachedDataList);
                log.info("{}条数据,开始存储数据库!", cachedDataList.size());
                log.info("存储数据库成功!");
            }
        }).sheet().doRead();
        return R.ok();
    }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

记一次 .NET某道闸收费系统 内存溢出分析

一&#xff1a;背景 1. 讲故事 前些天有位朋友找到我&#xff0c;说他的程序几天内存就要爆一次&#xff0c;不知道咋回事&#xff0c;找不出原因&#xff0c;让我帮忙看一下&#xff0c;这种问题分析dump是最简单粗暴了&#xff0c;拿到dump后接下来就是一顿分析。 二&…

11.1 pcl_ros的点云学习

本文是看了两个博主的内容&#xff0c;整理在这里是为了以后用时方便查找&#xff0c;更容易理解。引用的博文路径如下&#xff08;本人也是刚开始看PCL的运用&#xff0c;本文是完全抄下面博主的内容&#xff0c;觉得这位博主写的很详细很清楚&#xff0c;并且自己运行了一遍有…

Java17新特性详解含示例代码(值得珍藏)

1. 概述 Java 17 是 Java 开发工具包&#xff08;JDK&#xff09;的一个重要版本&#xff0c;它带来了一系列的新特性和改进&#xff0c;以进一步增强 Java 语言的功能和性能。以下是 Java 17 中的一些主要新特性及其详细说明。 2. 新特性详解 JEP 356: Enhanced Pseudo-Ran…

uniapp uni.chooseLocation调用走失败那里,错误码:112

问题&#xff1a;我配置了百度上所有能配置的&#xff0c;一直调用不成功&#xff0c;如下图配置的 1:第一个 配置 代码&#xff1a; "permission": {"scope.userLocation": {"desc": "你的位置信息将用于小程序位置接口的效果展示"}…

openpose之使用摄像头检测并输出到json文件

编程如画&#xff0c;我是panda&#xff01; 前言 之前给大家分享了如何搭建openpose环境&#xff0c;并进行了测试案例&#xff0c;但是如果要使用摄像头的话&#xff0c;还需要修改一下运行文件&#xff0c;并且这次会教大家如何输出到json文件 。 如果环境还没有搭建好&am…

Unix时间戳

时间戳&#xff0c;相信很多相关专业的人&#xff0c;计算机软件电子等等都会听过。由于最早是由Unix系统使用所以又叫Unix时间戳。 Unix 时间戳&#xff08;Unix Timestamp&#xff09;定义为从UTC&#xff08;世界协调时&#xff09;/GMT&#xff08;格林尼治时&#xff09;…

iPhone解锁工具---AnyMP4 iPhone Unlocker 中文

AnyMP4 iPhone Unlocker是一款功能强大的iPhone解锁软件&#xff0c;旨在帮助用户轻松解锁iPhone&#xff0c;从而在电脑上进行数据备份、传输和编辑。该软件支持多种iPhone型号&#xff0c;包括最新的iPhone 14系列&#xff0c;并支持多种解锁模式&#xff0c;如屏幕密码解锁、…

【Docker】安装 Nacos容器并根据Nginx实现负载均衡

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《Docker实战》。&#x1f3af;&#x1f3af; &…

Go后端开发 -- 反射reflect 结构体标签

Go后端开发 – 反射reflect && 结构体标签 文章目录 Go后端开发 -- 反射reflect && 结构体标签一、反射reflect1.编程语言中反射的概念2.interface 和反射3.变量内置的pair结构4.reflect的基本功能TypeOf和ValueOf5.从relfect.Value中获取接口interface的信息6…

2018年认证杯SPSSPRO杯数学建模D题(第二阶段)投篮的最佳出手点全过程文档及程序

2018年认证杯SPSSPRO杯数学建模 D题 投篮的最佳出手点 原题再现&#xff1a; 影响投篮命中率的因素不仅仅有出手角度、球感、出手速度&#xff0c;还有出手点的选择。规范的投篮动作包含两膝微屈、重心落在两脚掌上、下肢蹬地发力、身体随之向前上方伸展、同时抬肘向投篮方向…

SpringBoot:前端提交数据,服务端无法获取数据

http://www.xxx.com?phone111111111111&code1332 上述访问传值方式为键值对方式&#xff0c;服务端springmvc获取 >> // 在HttpServlet实现类的doGet、doPost方法中获取前端传来的值 doGet(ServerHttpRequest request){String phone request.getParameter("…

Codeforces Round 767 (Div. 1) D2. Game on Sum (Hard Version)(博弈 期望 dp 贡献)

题目 t(t<1e5)组样例&#xff0c;每次给定n,m,k(m<n<1e6&#xff0c;0<k<1e97) 有一个游戏&#xff0c;持续n轮&#xff0c;每轮Alice先选一个[0,k]的实数&#xff0c; Bob决定从总分里加上这个值还是减去这个值 特别地&#xff0c;n轮里&#xff0c;Bob选择…

Unity Mirror VR联机开发 实战篇(二)

一、迁移示例中的联机物体 1、将MirrorExamplesVR工程中的部分文件夹复制到自己的工程中。 1、打开MirrorExamplesVR中的 SceneVR-Common场景。 2、将场景中没用的东西都删掉&#xff0c;只留下面这些&#xff0c;新建一个空物体XR Mirror&#xff0c;将所有剩下的物体拖成XR …

Elastic 8.12:AI Assistant for Observability 正式发布,更新至 Apache Lucene 9.9

作者&#xff1a;来自 Elastic Brian Bergholm 今天&#xff0c;我们很高兴地宣布 Elastic 8.12 全面上市。 有哪些新的功能&#xff1f; 8.12 版本的两个最重要的组成部分包括 Elastic AI Assistant for Observability 的 正式发布版 和 Apache Lucene 9.9 的更新&#xff08…

网络安全B模块(笔记详解)- SQL注入

简单sql注入 1.使用渗透机场景kali中工具扫描服务器场景,将apache的端口号和版本号作为Flag提交(格式:端口号_版本号) Flag:8081_7.5 2.使用渗透机场景windows7访问服务器场景SQL网站,并将网站中概述页面中的Flag提交; Flag:sql_is_good 3.使用渗透机场景windows7访问…

AR与AI融合加速,医疗护理更便捷

根据Reports and Data的AR市场发展报告&#xff0c;到2026年&#xff0c;预计医疗保健市场中的AR/VR行业规模将达到70.5亿美元。这一趋势主要受到对创新诊断技术、神经系统疾病和疾病意识不断增长的需求驱动。信息技术领域的进步&#xff0c;包括笔记本电脑、计算机、互联网连接…

有效防范网络风险的关键措施

在数字化时代&#xff0c;企业面临着日益复杂和频繁的网络风险。提高员工的网络安全意识是防范网络威胁的关键一步。本文将探讨企业在提升网络安全意识方面可以采取的措施&#xff0c;以有效预防潜在的网络风险。 1. 开展网络安全培训&#xff1a;企业应定期组织网络安全培训&…

WordPress后台底部版权信息“感谢使用 WordPress 进行创作”和版本号怎么修改或删除?

不知道各位WordPress站长在后台操作时&#xff0c;是否有注意到每一个页面底部左侧都有一个“感谢使用 WordPress 进行创作。”&#xff0c;其中WordPress还是带有nofollow标签的链接&#xff1b;而页面底部右侧都有一个WordPress版本号&#xff0c;如下图中的“6.4.2 版本”。…

2023年的年度总结PPT不一样了?

添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 到了年终&#xff0c;需要撰写年度总结和制定计划了吗&#xff1f; 找不到合适的 PPT 模板&#xff1f; 感到缺乏灵感&#xff1f; 为做 PPT 绞尽脑汁&#xff1f; 为何不试试 AI 写 PPT 呢&#xff1f…

Windows下安装alipay-sdk-python时,pycrypto安装报错问题处理

1、安装alipay-sdk-python 时&#xff0c;保存内容如下。 Building wheels for collected packages: pycryptoBuilding wheel for pycrypto (setup.py) ... error error: subprocess-exited-with-error python setup.py bdist_wheel did not run successfully.│ exit c…