LAY-EXCEL导出excel并实现单元格合并

news2025/7/16 4:36:31

通过lay-excel插件实现Excel导出,并实现单元格合并,样式设置等功能。

更详细描述,请去lay-excel插件文档查看,地址:http://excel.wj2015.com/_book/docs/%E5%BF%AB%E9%80%9F%E4%B8%8A%E6%89%8B.html

一、安装

这里使用Vue前端框架来演示Excel导出功能,可通过npm进行安装,代码如下:

$ npm i lay-excel

二、相关函数

以下只是将这次演示demo中会使用到函数及相关参数进行列举,如果需更深入了解或更复杂功能实现,可去lay-excel的插件文档中查看。

2.1 exportExcel参数配置

用于将 data 数据依次导出,如果需要调整导出后的文件字段顺序或者过滤多余数据,可使用filterExportData()来梳理。另个导出每行数据对应key数量必须一致,否则会出现错位现象。

参数配置:

参数名称

描述

默认值

data

数据列表(需指定表名)

必填

filename

文件名称(带后缀)

必填

type

导出类型,支持 xlsx、csv、ods、xlsb、fods、biff2

xlsx

options

其他可选配置

null

options支持参数:

参数名称

描述

默认值

Props

配置文档基础属性,支持Title、Subject、Author、Manager、Company、Category、Keywords、Comments、LastAuthor、CreatedData

null

extend

表格配置参数,支持 !merge (合并单元格信息)、!cols(行数)、!protect(写保护)等,原生配置请参考,其中 !merge 配置支持辅助方法生成,详见 makeMergeConfig(origin)!

null

compression

是否压缩,压缩效果比较明显,建议开启(9列9w行有较多重复的数据,从 30M 缩小到 3M)

true

writeOpt

写入函数的可选项覆盖,一般用默认生成的配置即可,具体请查看 Writing Options

undefined

2.2 filterExportData参数配置

辅助方法,梳理导出的数据,包括字段排序和多余数据过滤。

参数名称

描述

默认值

data

需要梳理的数据

必填

fields

支持数组、对象和回调函数,用于映射关系和字段排序

必填

单元格属性含义:

键名称

描述

v

单元格的值

w

格式化文本(如果适用)

t

单元格类型: b 布尔值, n 数字, e 错误, s 字符, d 日期

f

单元格公式(如果适用)

r

富文本编码(如果适用)

h

富文本的HTML呈现(如果适用)

c

与单元格相关的注释

z

与单元格关联的数字格式字符串(如果需要)

l

单元格超链接对象(目标链接,.tooltip是提示)

s

单元格的样式/主题(如果适用)

样式设置对应参数,可去lay-excel插件文档中查看,地址:http://excel.wj2015.com/_book/docs/%E6%A0%B7%E5%BC%8F%E8%AE%BE%E7%BD%AE%E4%B8%93%E5%8C%BA.html

2.3 makeColConfig参数配置

辅助方法:用于生成合并表格的配置项,注意需要传入到 exportExcel 的 opt.extend['!merge'] 中。

参数名称

描述

默认值

origin

二维数组

undefined

2.4 makeMergeConfig参数配置

辅助方法:生成列宽配置,返回结果需放置于opt.extend['!cols']中。

参数名称

描述

默认值

data

一个对象,对象的key代表列(如:ABCDE),value代表宽度

null

defaultNum

渲染过程中未指定单元格的默认宽度

60

三、Demo实现

通过lay-excel来实现如下图格局,是非常方便的,只需要传入相应参数即可。

3.1 创建模板页

首先,在src中创建永动默认首页,在页面中添加导出按钮,代码如下:

<template>
    <div class="main-box">
        <el-button size="small" type="primary" @click="exportEvent">导出表格</el-button>
    </div>
</template>

<script>
    export default {
        data(){
            return {
                
            }
        },
        methods: {
            //导出事件
            exportEvent(){}
        }
    }
</script>

页面效果如下:

3.2 绘制表格框架

如上图示例,将合并单元格二维数据,放到makeMergeConfig函数中即可,这里合并单元格是从左上角往右边或下面 进行合并的,代码如下:

exportEvent(){
    //合并参数
    let mergeConf = LAY_EXCEL.makeMergeConfig([
        ['A1', 'I1'],
        ['A2', 'A3'],
        ['F2', 'F3'],
        ['G2', 'G3'],
        ['B2', 'E2'],
        ['H2', 'I2']
    ]);
    
    //导出数据
    LAY_EXCEL.exportExcel([], '导出测试.xlsx', 'xlsx', {
        extend: {
            '!merges': mergeConf,
        }
    });
}

此时点击导出,则可以导出合并后的表格框架。

3.3 导出数据

这里先导出数据,再实现标题数据导出,先将表格对应列和数据中字段关联上。代码如下:

exportEvent(){
    var data = [
        {name: "李四", age: 72, gender: 1, high: 164, weight: 80, mobile: 15627070182, email: "test15627070182@qq.com", province: "湖北省", city: "长沙市"},
        {name: "张三", age: 60, gender: 1, high: 161, weight: 75, mobile: 15621397301, email: "test15621397301@qq.com", province: "浙江省", city: "台州市"},
        {name: "王五", age: 82, gender: 1, high: 170, weight: 72, mobile: 15684572039, email: "test15684572039@qq.com", province: "安徽省", city: "六安市"},
        {name: "赵六", age: 56, gender: 2, high: 166, weight: 50, mobile: 15694331283, email: "test15694331283@qq.com", province: "江苏省", city: "苏州市"}
    ], exportData = [];
    
    
    //先将标题前三行空出来
    exportData.push.apply(exportData, [{}, {}, {}]);
    //追加员工数据
    exportData.push.apply(exportData, data);
    
    //合并参数
    let mergeConf = LAY_EXCEL.makeMergeConfig([
        ['A1', 'I1'],
        ['A2', 'A3'],
        ['F2', 'F3'],
        ['G2', 'G3'],
        ['B2', 'E2'],
        ['H2', 'I2']
    ]);
    
    //导出数据
    LAY_EXCEL.exportExcel(exportData, '导出测试.xlsx', 'xlsx', {
        extend: {
            '!merges': mergeConf,
        }
    });
}

此时点击导出,则可看到每列对应数据了,如下图:

3.4 添加样式

咱们先定义commonStyle公共样式属性,再定义getCellStyle()函数,用来返回所有对应字段的样式。然后通过lay-excel的filterExportData()辅助函数,来梳理导出的数据,包括字段排序和多余数据过滤。代码如下:

exportEvent(){
    var data = [
        {name: "李四", age: 72, gender: 1, high: 164, weight: 80, mobile: 15627070182, email: "test15627070182@qq.com", province: "湖北省", city: "长沙市"},
        {name: "张三", age: 60, gender: 1, high: 161, weight: 75, mobile: 15621397301, email: "test15621397301@qq.com", province: "浙江省", city: "台州市"},
        {name: "王五", age: 82, gender: 1, high: 170, weight: 72, mobile: 15684572039, email: "test15684572039@qq.com", province: "安徽省", city: "六安市"},
        {name: "赵六", age: 56, gender: 2, high: 166, weight: 50, mobile: 15694331283, email: "test15694331283@qq.com", province: "江苏省", city: "苏州市"}
    ], 
        //公共样式
        commonStyle = {
            font: {    sz: 12 },
            alignment: {
                vertical: "center",
                horizontal: "center"
            },
            border: {
                top: {style: 'thin', color: {rgb: '666666'}},
                bottom: {style: 'thin', color: {rgb: '666666'}},
                left: {style: 'thin', color: {rgb: '666666'}},
                right: {style: 'thin', color: {rgb: '666666'}}
            }
        },
        exportData = [];
    
    function getCellStyle(styleParam){
        let tmpData = {};
        ['name', 'age', 'gender', 'high', 'weight', 'mobile', 'email', 'province', 'city'].forEach(item => {
            tmpData[item] = function(value, line, data){
                return {
                    v: value,
                    s: {
                        ...commonStyle
                    }
                }
            }
        });
        return tmpData;
    }
    
    //梳理数据
    let dataList = LAY_EXCEL.filterExportData(data, getCellStyle());
    
    //先将标题前三行空出来
    exportData.push.apply(exportData, [{}, {}, {}]);
    //追加员工数据
    exportData.push.apply(exportData, dataList);
    
    //合并参数
    let mergeConf = LAY_EXCEL.makeMergeConfig([
        ['A1', 'I1'],
        ['A2', 'A3'],
        ['F2', 'F3'],
        ['G2', 'G3'],
        ['B2', 'E2'],
        ['H2', 'I2']
    ]);
    
    //导出数据
    LAY_EXCEL.exportExcel(exportData, '导出测试.xlsx', 'xlsx', {
        extend: {
            '!merges': mergeConf,
        }
    });
}

此时点击导出,则可看到填充数据位置字体居中,并有线框,如下图:

如上图会发现,手机号和邮箱地址的宽度不够,这个简单,使用lay-excel的makeColConfig()辅助函数来调整列宽即可。代码如下:

exportEvent(){
    var data = [
        {name: "李四", age: 72, gender: 1, high: 164, weight: 80, mobile: 15627070182, email: "test15627070182@qq.com", province: "湖北省", city: "长沙市"},
        {name: "张三", age: 60, gender: 1, high: 161, weight: 75, mobile: 15621397301, email: "test15621397301@qq.com", province: "浙江省", city: "台州市"},
        {name: "王五", age: 82, gender: 1, high: 170, weight: 72, mobile: 15684572039, email: "test15684572039@qq.com", province: "安徽省", city: "六安市"},
        {name: "赵六", age: 56, gender: 2, high: 166, weight: 50, mobile: 15694331283, email: "test15694331283@qq.com", province: "江苏省", city: "苏州市"}
    ], 
        //公共样式
        commonStyle = {
            font: {    sz: 12 },
            alignment: {
                vertical: "center",
                horizontal: "center"
            },
            border: {
                top: {style: 'thin', color: {rgb: '666666'}},
                bottom: {style: 'thin', color: {rgb: '666666'}},
                left: {style: 'thin', color: {rgb: '666666'}},
                right: {style: 'thin', color: {rgb: '666666'}}
            }
        },
        exportData = [];
    
    function getCellStyle(styleParam){
        let tmpData = {};
        ['name', 'age', 'gender', 'high', 'weight', 'mobile', 'email', 'province', 'city'].forEach(item => {
            tmpData[item] = function(value, line, data){
                return {
                    v: value,
                    s: {
                        ...commonStyle
                    }
                }
            }
        });
        return tmpData;
    }
    
    //梳理数据
    let dataList = LAY_EXCEL.filterExportData(data, getCellStyle());
    
    //先将标题前三行空出来
    exportData.push.apply(exportData, [{}, {}, {}]);
    //追加员工数据
    exportData.push.apply(exportData, dataList);
    
    //合并参数
    let mergeConf = LAY_EXCEL.makeMergeConfig([
        ['A1', 'I1'],
        ['A2', 'A3'],
        ['F2', 'F3'],
        ['G2', 'G3'],
        ['B2', 'E2'],
        ['H2', 'I2']
    ]);
    //配置列宽
    let colConf = LAY_EXCEL.makeColConfig({
        F: 100,
        G: 150
    });
    
    //导出数据
    LAY_EXCEL.exportExcel(exportData, '导出测试.xlsx', 'xlsx', {
        extend: {
            '!merges': mergeConf,
            '!cols': colConf
        }
    });
}

将列F和列G分别设置为100px,150px,此时点击导出表格则非常美观了,效果图下:

3.5 填充标题数据

通过上面数据的渲染后,大家应该了解了表格中每列所对应的JSON数据中的字段了,所以定义标题是,将对应位置数据放到对应字段上即可。因为合并时,是自上往下,自左往右进行合并,除开始位置单元格数据,后面单元格会被覆盖,所以这里姓名,手机号,邮箱需放在第列行数据中。代码如下:

exportEvent(){
    var titles = [
            {name: "员工信息统计表"},
            {name: "姓名", age: "基本信息", mobile: "手机号", email: "邮箱", province: "地址信息"},
            {age: "年龄", gender: "性别", high: "身高", weight: "体重", province: "所在省", city: "所在市"}
        ], 
        data = [
            {name: "李四", age: 72, gender: 1, high: 164, weight: 80, mobile: 15627070182, email: "test15627070182@qq.com", province: "湖北省", city: "长沙市"},
            {name: "张三", age: 60, gender: 1, high: 161, weight: 75, mobile: 15621397301, email: "test15621397301@qq.com", province: "浙江省", city: "台州市"},
            {name: "王五", age: 82, gender: 1, high: 170, weight: 72, mobile: 15684572039, email: "test15684572039@qq.com", province: "安徽省", city: "六安市"},
            {name: "赵六", age: 56, gender: 2, high: 166, weight: 50, mobile: 15694331283, email: "test15694331283@qq.com", province: "江苏省", city: "苏州市"}
        ], 
        //公共样式
        commonStyle = {
            font: {    sz: 12 },
            alignment: {
                vertical: "center",
                horizontal: "center"
            },
            border: {
                top: {style: 'thin', color: {rgb: '666666'}},
                bottom: {style: 'thin', color: {rgb: '666666'}},
                left: {style: 'thin', color: {rgb: '666666'}},
                right: {style: 'thin', color: {rgb: '666666'}}
            }
        },
        exportData = [];
    
    function getCellStyle(styleParam){
        let tmpData = {};
        ['name', 'age', 'gender', 'high', 'weight', 'mobile', 'email', 'province', 'city'].forEach(item => {
            tmpData[item] = function(value, line, data){
                return {
                    v: value,
                    s: {
                        ...commonStyle
                    }
                }
            }
        });
        return tmpData;
    }
    
    //梳理数据
    let titleList = LAY_EXCEL.filterExportData(titles, getCellStyle());
    //梳理数据
    let dataList = LAY_EXCEL.filterExportData(data, getCellStyle());
    
    //先将标题前三行空出来
    exportData.push.apply(exportData, titleList);
    //追加员工数据
    exportData.push.apply(exportData, dataList);
    
    //合并参数
    let mergeConf = LAY_EXCEL.makeMergeConfig([
        ['A1', 'I1'],
        ['A2', 'A3'],
        ['F2', 'F3'],
        ['G2', 'G3'],
        ['B2', 'E2'],
        ['H2', 'I2']
    ]);
    //配置列宽
    let colConf = LAY_EXCEL.makeColConfig({
        F: 100,
        G: 150
    });
    
    //导出数据
    LAY_EXCEL.exportExcel(exportData, '导出测试.xlsx', 'xlsx', {
        extend: {
            '!merges': mergeConf,
            '!cols': colConf
        }
    });
}

此时点击导出,则可以看到对应标题了,效果如下:

但是大家会发现,上图中线框并未画完整,这是因为每行中字段有缺失,只有从开始合并位置单元格有绘制线条。这问题解决也简单,在梳理标题数据位置,将缺失字段补充上并赋值为空即可。代码如下:

//梳理标题数据
let titleList = LAY_EXCEL.filterExportData((() => {
    let newArr = [];
    titles.forEach(item => {
        let tmpData = {};
        ['name', 'age', 'gender', 'high', 'weight', 'mobile', 'email', 'province', 'city'].forEach(key => {
            //补充缺失字段
            if('undefined'===typeof item[key]){
                tmpData[key] = '';
            }else{
                tmpData[key] = item[key];
            }
        });
        //创建新数据
        newArr.push(tmpData);
    });
    return newArr;
})(), getCellStyle());

在梳理标题数据时,将传入filterExportData()函数中数据通过 匿名函数重新组合,补充缺失部分,最后效果如下:

大家会发现,getCellStyle()函数和梳理标题数据的 匿名函数中,都使用到了所有字段数组,这里可略作修改,以便后期更方便维护,定义一个公共字段数组,代码如下:

exportEvent(){
    var titles = [
            {name: "员工信息统计表"},
            {name: "姓名", age: "基本信息", mobile: "手机号", email: "邮箱", province: "地址信息"},
            {age: "年龄", gender: "性别", high: "身高", weight: "体重", province: "所在省", city: "所在市"}
        ], 
        data = [
            {name: "李四", age: 72, gender: 1, high: 164, weight: 80, mobile: 15627070182, email: "test15627070182@qq.com", province: "湖北省", city: "长沙市"},
            {name: "张三", age: 60, gender: 1, high: 161, weight: 75, mobile: 15621397301, email: "test15621397301@qq.com", province: "浙江省", city: "台州市"},
            {name: "王五", age: 82, gender: 1, high: 170, weight: 72, mobile: 15684572039, email: "test15684572039@qq.com", province: "安徽省", city: "六安市"},
            {name: "赵六", age: 56, gender: 2, high: 166, weight: 50, mobile: 15694331283, email: "test15694331283@qq.com", province: "江苏省", city: "苏州市"}
        ], 
        //公共样式
        commonStyle = {
            font: {    sz: 12 },
            alignment: {
                vertical: "center",
                horizontal: "center"
            },
            border: {
                top: {style: 'thin', color: {rgb: '666666'}},
                bottom: {style: 'thin', color: {rgb: '666666'}},
                left: {style: 'thin', color: {rgb: '666666'}},
                right: {style: 'thin', color: {rgb: '666666'}}
            }
        },
        keys = ['name', 'age', 'gender', 'high', 'weight', 'mobile', 'email', 'province', 'city'],
        exportData = [];
    
    function getCellStyle(styleParam){
        styleParam = styleParam || {};
        
        let tmpData = {};
        keys.forEach(item => {
            tmpData[item] = function(value, line, data){
                return {
                    v: value,
                    s: {
                        ...commonStyle,
                        ...styleParam
                    }
                }
            }
        });
        return tmpData;
    }
    
    //梳理标题数据
    let titleList = LAY_EXCEL.filterExportData((() => {
        let newArr = [];
        titles.forEach(item => {
            let tmpData = {};
            keys.forEach(key => {
                //补充缺失字段
                if('undefined'===typeof item[key]){
                    tmpData[key] = '';
                }else{
                    tmpData[key] = item[key];
                }
            });
            //创建新数据
            newArr.push(tmpData);
        });
        return newArr;
    })(), getCellStyle({
        font: {    sz: 12, bold: true }
    }));
    //梳理数据
    let dataList = LAY_EXCEL.filterExportData(data, getCellStyle());
    
    //略...
}

3.6 修改标题样式

这里我们想给标题进行加粗,要如何实现呢。在前面已定义了getCellStyle()函数,这里我们可以通过传入新新式参数,将公共部分进行替换,代码如下:

exportEvent(){
    //略...
    
    function getCellStyle(styleParam){
        styleParam = styleParam || {};
        
        let tmpData = {};
        ['name', 'age', 'gender', 'high', 'weight', 'mobile', 'email', 'province', 'city'].forEach(item => {
            tmpData[item] = function(value, line, data){
                return {
                    v: value,
                    s: {
                        ...commonStyle,
                        ...styleParam
                    }
                }
            }
        });
        return tmpData;
    }
    
    //梳理标题数据
    let titleList = LAY_EXCEL.filterExportData((() => {
        let newArr = [];
        titles.forEach(item => {
            let tmpData = {};
            ['name', 'age', 'gender', 'high', 'weight', 'mobile', 'email', 'province', 'city'].forEach(key => {
                //补充缺失字段
                if('undefined'===typeof item[key]){
                    tmpData[key] = '';
                }else{
                    tmpData[key] = item[key];
                }
            });
            //创建新数据
            newArr.push(tmpData);
        });
        return newArr;
    })(), getCellStyle({
        font: { sz: 12, bold: true }
    }));
    //梳理数据
    let dataList = LAY_EXCEL.filterExportData(data, getCellStyle());
    
    //略...
}

效果图下:

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

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

相关文章

带你感受一次JVM调优实战

本文分成两部分&#xff0c;先了解理论&#xff0c;然后再进行实战。 理论篇 1.1 调优目标 JVM调优的两大目标是&#xff1a; 提高应用程序的性能和吞吐量&#xff1a; 通过优化JVM的垃圾回收机制、调整线程池大小和优化代码&#xff0c;可以提高应用程序的性能和吞吐量。…

见证 2022re:Invent 大会及亚马逊云科技发展有感

文章目录&#x1f4cb;前言&#x1f3af;关于亚马逊云科技 re:Invent 全球大会&#x1f9e9;什么是亚马逊云科技 re:Invent 全球大会&#x1f9e9;回顾往届大会&#x1f3af;回顾2022亚马逊云科技 re:Invent 全球大会&#x1f9e9;前言&#x1f9e9;宣告大数据迈向 Serverless …

【Linux】进程间通信概念匿名管道

文章目录进程间通信介绍进程间通信的本质进程间通信的目的进程间通信的分类管道匿名管道匿名管道原理pipe函数匿名管道通信的4情况5特点读取堵塞写入堵塞写端关闭读端关闭总结进程间通信介绍 进程间通信简称IPC&#xff08;Interprocess communication&#xff09;:进程间通信…

【信息安全】快速了解密码的加密加盐处理

前言在开发的时候&#xff0c;有一些敏感信息是不能直接通过明白直接保存到数据库的。最经典的就是密码了。如果直接把密码以明文的形式入库&#xff0c;不仅会泄露用户的隐私&#xff0c;对系统也是极其的不厉&#xff0c;这样做是非常危险的。一、常规的登录认证&#xff08;…

MySQL实战之事务到底是隔离的还是不隔离的

1.前言 我们在MySQL实战之事务隔离&#xff1a;为什么你改了我还看不见讲过事务隔离级别的时候提到过&#xff0c;如果是可重复读隔离级别&#xff0c;事务T启动的时候会创建一个视图read-view,之后事务T执行期间&#xff0c;即使有其他事务修改了数据&#xff0c;事务T看到的…

MAC(m1)-VMWare Fushion安装Windows11

镜像下载地址:登录 账号:11360XXXXX@qq.com 密码:ZXXXSXX19XX 参考:VMware fusion虚拟机安装Win10系统的详细教程_IT大力水手的博客-CSDN博客_vmware fusion安装 uefi和bios有什么区别?uefi和bios的区别详细分析 _ 电脑系统城 设置密码

分布式事务相关问题

分布式事务刚开始是为解决单服务多数据库资源的场景而诞生的。随着技术的发展&#xff0c;特别是 SOA 分布式应用架构以及微服务时代的到来&#xff0c;服务变成了基本业务单元。因此&#xff0c;又产生了跨服务的分布式事务需求。 基于单个服务单一数据库资源访问的事务&#…

在 Python 中拆分具有多个分隔符的字符串

要使用多个定界符拆分字符串&#xff1a; 使用 re.split() 方法&#xff0c;例如 re.split(r,|-, my_str)。re.split() 方法将拆分所有出现的分隔符之一的字符串。 import re# &#x1f447;️ 用 2 个分隔符拆分字符串my_str fql,jiyik-dot,commy_list re.split(r,|-, my_…

Http协议Tomcat使用

Web基本知识 课程目标 服务器的安装和配置(了解)服务器和MyEclipse结合(了解)服务器部署项目(掌握)Http协议格式(掌握) 概念 网页&#xff0c;javaweb&#xff1a;使用java语言编写网页 一.网页分类 静态web资源&#xff1a;页面的数据不会发生改变。html&#xff0c;css动…

传统手工数据采集耗时耗力?Smartbi数据填报实现数据收集分析自动化

企业在日常经营管理过程中&#xff0c;往往需要收集很多内外部的信息&#xff0c;清洗整理后再进行存储、分析、呈现、决策支持等各种作业&#xff0c;如何高效收集结构化数据是企业管理者经常要面对的问题。传统手工的数据采集方式不仅耗费了大量人力时间成本&#xff0c;还容…

0102Bean配置和解析-Bean生命周期-spring

文章目录1 前言2 第一阶段-Bean信息配置阶段2.1 配置方式2.2 配置信息2.3 配置示例2.3.1 注解方式配置2.3.2 xml文件配置2.3.3 API方式3 第二阶段-Bean元信息解析阶段3.1 注解方式解析3.1.1 AnnotatedBeanDefinitionReader解析过程3.1.2 ClassPathBeanDefinitionScanner解析过程…

MapTask工作机制

目录 &#xff08;1&#xff09;Read阶段 &#xff08;2&#xff09;Map阶段 &#xff08;3&#xff09;Collect收集阶段 &#xff08;4&#xff09;Spill阶段 &#xff08;5&#xff09;Merge阶段 &#xff08;1&#xff09;Read阶段 MapTask通过InputFormat获得的Recor…

单协议 2.4GHz CC2651R31T0RGZR/CC2651R31T0RKPR无线MCU 802.15.4,蓝牙5.2

CC2651R31T0RGZR描述&#xff1a;具有 352KB 闪存的 SimpleLink 32 位 Arm Cortex-M4 单协议 2.4GHz 无线 MCU 48-VQFN -40C ~ 105C48QFN&#xff08;明佳达电子&#xff09;【介绍】CC2651R3器件是一款单协议 2.4 GHz 无线微控制器 (MCU)&#xff0c;支持以下协议&#xff1a;…

35- tensorboard的使用 (PyTorch系列) (深度学习)

知识要点 FashionMNIST数据集: 十种产品的分类. # T-shirt/top, Trouser, Pullover, Dress, Coat,Sandal, Shirt, Sneaker, Bag, Ankle Boot.writer SummaryWriter(run/fashion_mnist_experiment_1) # 网站显示一 tensorboard的使用 在网站显示pytorch的架构:1.1 …

常规非常规的卷及操作

最近看论文看到深度卷积的内容&#xff0c;然后就想着学习一下&#xff0c;发现论文中说的深度卷积并不是真正的深度卷积&#xff0c;感觉是分组卷积的一种&#xff0c;但是对于论文中得使用方式又有点不理解&#xff0c;就留下了一个问题放在了博客的最后&#xff0c;这里记录…

【蓝桥杯刷题】坑爹的负进制转换

【蓝桥杯刷题】——坑爹的负进制转换&#x1f60e;&#x1f60e;&#x1f60e; 目录 &#x1f4a1;前言&#x1f31e;&#xff1a; &#x1f49b;坑爹的负进制转换题目&#x1f49b; &#x1f4aa; 解题思路的分享&#x1f4aa; &#x1f60a;题目源码的分享&#x1f6…

Windows环境下Elasticsearch的下载与安装

一、elasticsearch下载地址1、官网&#xff1a;https://www.elastic.co/cn/即刻体验Elasticsearch2、直接解压3、进入bin目录双击.bat文件直接启动4、报错&#xff1a;error downloading geoip database [GeoLite2-City.mmdb]&#xff0c;elasticsearch.yml中增加&#xff1a;i…

FTP建议使用教程——以Xftp7为例

文件传输协议&#xff08;File Transfer Protocol&#xff0c;FTP&#xff09;是用于在网络上进行文件传输的一套标准协议&#xff0c;它工作在 OSI 模型的第七层&#xff0c; TCP 模型的第四层&#xff0c; 即应用层&#xff0c; 使用 TCP 传输而不是 UDP&#xff0c; 客户在和…

Jmeter+Ant+Jenkins接口自动化测试平台搭建

平台简介一个完整的接口自动化测试平台需要支持接口的自动执行&#xff0c;自动生成测试报告&#xff0c;以及持续集成。Jmeter支持接口的测试&#xff0c;Ant支持自动构建&#xff0c;而Jenkins支持持续集成&#xff0c;所以三者组合在一起可以构成一个功能完善的接口自动化测…

九.虚拟内存VM

1.寻址2.虚拟页VM将虚拟内存分割为称为虚拟页的大小固定的块1247是缓存的、36是未缓存的、05是未分配的下图为缺页及处理后页表将虚拟页映射到物理页页表是一个页表条目(PTE)的数组多个虚拟页面可以映射到同一个物理共享页面内存映射&#xff1a;将一组连续的虚拟页映射到一个文…