easyExcel - 按模板导出
目录
- 前言
- 一、情景介绍
- 二、文档介绍
- 2.1 读取模板
- 2.2 填充模板
- 三、代码示例
- 3.1 案例一:工资表
- 3.2 案例二:报价单
- 四、我所遇到的问题
前言
Java-easyExcel入门教程:https://blog.csdn.net/xhmico/article/details/134714025
之前有介绍过如何使用 easyExcel
,以及写了两个入门的 demo
,这两个 demo
能应付在开发中大多数的导入和导出需求,不过有时候面对一些复杂的表格,就会有点不够用,该篇是如何使用模板实现导出功能
一、情景介绍
在实际的开发过程中可能会遇到需要导出一些带有复杂表头的表格,比如:工资表和考勤表
或者是类似于发票、报价单这种具有模板性质的表格
如果仅仅通过代码去实现是比较困难的,通常情况下会写一个模板 excel
,模板中的需要变动的数据用占位符替代,导出的文件按照该模板填充数据
二、文档介绍
easyexcel
也提供了根据模板写入的功能,可以用较为简单的方式实现上述功能,其基本步骤为:
- ① 读取模板文件
- ② 填充模板中的占位符
2.1 读取模板
官方文档:根据模板写入
在官方文档中给出了如何使用 easyexcel
读取模板的代码示例:
官网代码示例:
/*** 根据模板写入* <p>1. 创建excel对应的实体对象 参照{@link IndexData}* <p>2. 使用{@link ExcelProperty}注解指定写入的列* <p>3. 使用withTemplate 写取模板* <p>4. 直接写即可*/@Testpublic void templateWrite() {String templateFileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx";String fileName = TestFileUtil.getPath() + "templateWrite" + System.currentTimeMillis() + ".xlsx";// 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭// 这里要注意 withTemplate 的模板文件会全量存储在内存里面,所以尽量不要用于追加文件,如果文件模板文件过大会OOM// 如果要再文件中追加(无法在一个线程里面处理,可以在一个线程的建议参照多次写入的demo) 建议临时存储到数据库 或者 磁盘缓存(ehcache) 然后再一次性写入EasyExcel.write(fileName, DemoData.class).withTemplate(templateFileName).sheet().doWrite(data());}
从上述示例代码中可以看到读取模板文件的方法为:withTemplate()
public ExcelWriterBuilder withTemplate(InputStream templateInputStream) {this.writeWorkbook.setTemplateInputStream(templateInputStream);return this;}public ExcelWriterBuilder withTemplate(File templateFile) {this.writeWorkbook.setTemplateFile(templateFile);return this;}public ExcelWriterBuilder withTemplate(String pathName) {return this.withTemplate(new File(pathName));}
2.2 填充模板
官方文档:填充Excel
注意:这里建议先去看下官方文档中给的示例,会比较好理解
- 在模板中占位符用
{变量}
表示,比如{name}
、{age}
- 如果占位符为列表,则使用
{.变量}
表示,比如:{.name}
、{.age}
进行填充的方法为:fill()
public ExcelWriter fill(Object data, WriteSheet writeSheet) {return this.fill((Object)data, (FillConfig)null, writeSheet);}public ExcelWriter fill(Object data, FillConfig fillConfig, WriteSheet writeSheet) {this.excelBuilder.fill(data, fillConfig, writeSheet);return this;}public ExcelWriter fill(Supplier<Object> supplier, WriteSheet writeSheet) {return this.fill((Object)supplier.get(), (FillConfig)null, writeSheet);}public ExcelWriter fill(Supplier<Object> supplier, FillConfig fillConfig, WriteSheet writeSheet) {this.excelBuilder.fill(supplier.get(), fillConfig, writeSheet);return this;}
在 EasyExcel
中,FillConfig
类用于配置单元格填充相关的设置。
以下是一些 FillConfig
类中常用的配置项:
- forceNewRow:是否强制写入到新行。当设置为
true
时,每次写入都会创建新的行,而不是在现有行上进行覆盖 - direction:填充方向,可以指定是水平填充还是垂直填充
- 属性:
- WriteDirectionEnum.VERTICAL:垂直填充
- WriteDirectionEnum.HORIZONTAL:水平填充
- 属性:
如果有多列组合填充的情况,通过 {前缀.变量}
的形式区分不同的列表,例如
使用 FillWrapper
构建 Excel
写入时的填充模板
...excelWriter.fill(new FillWrapper("data1", data()), writeSheet);excelWriter.fill(new FillWrapper("data2", data()), writeSheet);excelWriter.fill(new FillWrapper("data3", data()), writeSheet);...
三、代码示例
简单介绍了 easyexcel
如何使用模板进行导出,接下来就通过几个简单的案例进行演示
以下案例使用的模板文件均可在文章顶部下载
3.1 案例一:工资表
编写 excel
模板:
实体类:
StaffSalaryEntity.java
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class StaffSalaryEntity {@ApiModelProperty(value = "姓名")private String name;@ApiModelProperty(value = "职称")private String post;@ApiModelProperty(value = "月薪")private BigDecimal mouthSalary;@ApiModelProperty(value = "时薪")private BigDecimal hourSalary;@ApiModelProperty(value = "应出勤天数")private Double shouldAttend;@ApiModelProperty(value = "出勤天数")private Double actualAttend;@ApiModelProperty(value = "平时加班时数")private Double overtime;@ApiModelProperty(value = "周末加班时数")private Double weekOvertime;@ApiModelProperty(value = "国假天数")private Double holiday;@ApiModelProperty(value = "正班薪资")private BigDecimal normalSalary;@ApiModelProperty(value = "平时加班薪资")private BigDecimal overtimeSalary;@ApiModelProperty(value = "周末加班薪资")private BigDecimal weekOvertimeSalary;@ApiModelProperty(value = "国假薪资")private BigDecimal holidaySalary;@ApiModelProperty(value = "岗位津贴")private BigDecimal postSubsidy;@ApiModelProperty(value = "全勤补贴")private BigDecimal fullAttendSubsidy;@ApiModelProperty(value = "全勤奖")private BigDecimal award;@ApiModelProperty(value = "事假缺勤扣款")private BigDecimal deduction;@ApiModelProperty(value = "社保费用")private BigDecimal social;@ApiModelProperty(value = "应得薪资")private BigDecimal shouldSalary;@ApiModelProperty(value = "个人扣税")private BigDecimal selfTax;@ApiModelProperty(value = "实发薪资")private BigDecimal actualSalary;@ApiModelProperty(value = "员工签名")private BigDecimal sign;
}
实体类中的字段要跟模板中占位符中的变量对应
代码示例:
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.fill.FillConfig;
import com.mike.server.system.domain.excel.ProductOfferExcelEntity;
import com.mike.server.system.entity.StaffSalaryEntity;
import org.junit.jupiter.api.Test;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;public class TestDemo {/*** 案例一:工资表*/@Testpublic void salaryList() {// 模板文件路径String templateFilePath = "D:\\excel-files\\gzb-template.xlsx";// 输出文件路径String outFilePath = "D:\\excel-files\\gzb.xlsx";// 创建 ExcelWriter 实例ExcelWriter writer = EasyExcel// 写入到.write(outFilePath)// 指定模板.withTemplate(templateFilePath).build();WriteSheet sheet = EasyExcel.writerSheet().build();// 获取员工工资数据List<StaffSalaryEntity> staffSalaryEntities = getStaffSalaryEntities();FillConfig fillConfig = FillConfig.builder()// 开启填充换行.forceNewRow(true).build();// 执行填充操作writer.fill(staffSalaryEntities, fillConfig, sheet);// 结束writer.finish();}public List<StaffSalaryEntity> getStaffSalaryEntities() {List<StaffSalaryEntity> list = new ArrayList<>();list.add(StaffSalaryEntity.builder().name("米大傻").post("开发").mouthSalary(new BigDecimal(1320)).hourSalary(new BigDecimal("7.59")).shouldAttend(21.0).actualAttend(21.0).overtime(21.0).weekOvertime(8.0).holiday(0.0).normalSalary(new BigDecimal(1320)).overtimeSalary(new BigDecimal("238.97")).weekOvertimeSalary(new BigDecimal("242.76")).holidaySalary(new BigDecimal(0)).postSubsidy(new BigDecimal(0)).award(new BigDecimal(20)).deduction(new BigDecimal(0)).social(new BigDecimal("113.6")).shouldSalary(new BigDecimal("1688.12")).selfTax(new BigDecimal(0)).actualSalary(new BigDecimal("1688.1")).build());list.add(StaffSalaryEntity.builder().name("曹大力").post("店长").mouthSalary(new BigDecimal(13200)).hourSalary(new BigDecimal("7.59")).shouldAttend(21.0).actualAttend(21.0).overtime(21.0).weekOvertime(8.0).holiday(0.0).normalSalary(new BigDecimal(1320)).overtimeSalary(new BigDecimal("238.97")).weekOvertimeSalary(new BigDecimal("242.76")).holidaySalary(new BigDecimal(0)).postSubsidy(new BigDecimal(0)).award(new BigDecimal(20)).deduction(new BigDecimal(0)).social(new BigDecimal("113.6")).shouldSalary(new BigDecimal("13200.12")).selfTax(new BigDecimal(0)).actualSalary(new BigDecimal("13200.1")).build());list.add(StaffSalaryEntity.builder().name("张大仙").post("经理").mouthSalary(new BigDecimal(13200)).hourSalary(new BigDecimal("7.59")).shouldAttend(21.0).actualAttend(21.0).overtime(21.0).weekOvertime(8.0).holiday(0.0).normalSalary(new BigDecimal(1320)).overtimeSalary(new BigDecimal("238.97")).weekOvertimeSalary(new BigDecimal("242.76")).holidaySalary(new BigDecimal(0)).postSubsidy(new BigDecimal(0)).deduction(new BigDecimal(0)).social(new BigDecimal("113.6")).shouldSalary(new BigDecimal("13200.12")).selfTax(new BigDecimal(0)).actualSalary(new BigDecimal("13200.1")).build());return list;}
}
展示:
3.2 案例二:报价单
编写模板:
模板文件放在项目的 resources
目录下的 templates/excel
文件夹下
实体类:
OfferDetailEntity.java
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class OfferDetailEntity {@ApiModelProperty(value = "公司名称")private String companyName;@ApiModelProperty(value = "报价日期")private String offerDate;@ApiModelProperty(value = "报价有效期")private String offerValidDate;@ApiModelProperty(value = "客户名称")private String customerName;@ApiModelProperty(value = "客户地址")private String customerAddress;@ApiModelProperty(value = "联系方式")private String contact;@ApiModelProperty(value = "合计数量")private Integer totalQty;@ApiModelProperty(value = "合计金额")private BigDecimal totalAmount;
}
ProductOfferEntity.java
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;import java.math.BigDecimal;@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ProductOfferEntity {@ApiModelProperty(value = "产品名称")private String productName;@ApiModelProperty(value = "型号及规格")private String typeSpec;@ApiModelProperty(value = "数量")private Integer quantity;@ApiModelProperty(value = "单价")private BigDecimal price;@ApiModelProperty(value = "金额")private BigDecimal amount;@ApiModelProperty(value = "备注")private String remark;}
代码示例:
TestController.java
@GetMapping("/export/by-template")@ApiOperation(value = "导出-按模板格式", produces = "application/octet-stream")public ResponseBean<String> exportByTemplate(HttpServletResponse response) {testService.exportByTemplate(response);return ResponseBean.success();}
TestService.java
/*** 导出-按模板格式*/void exportByTemplate(HttpServletResponse response);
TestServiceImpl.java
@SneakyThrows@Overridepublic void exportByTemplate(HttpServletResponse response) {ServletOutputStream out = response.getOutputStream();EasyExcelUtil.initResponse(response, "报价单");// 文件模板输入流,将 excel 模板放到 resources 目录下InputStream templateFile = new ClassPathResource("templates/excel/bjd.xlsx").getInputStream();ExcelWriter writer = EasyExcel.write(out).withTemplate(templateFile).build();WriteSheet sheet = EasyExcel.writerSheet().build();/*HashMap<String, Object> offerDetail = new HashMap<>();offerDetail.put("companyName", "多加辣科技");offerDetail.put("offerDate", "2024-04-07");offerDetail.put("offerValidDate", "2024-04-11");offerDetail.put("customerName", "米大傻");offerDetail.put("customerAddress", "广东省广州市");offerDetail.put("contact", "078-182****4568");offerDetail.put("totalQty", 5);offerDetail.put("totalAmount", new BigDecimal(10300));*/OfferDetailEntity offerDetail = OfferDetailEntity.builder().companyName("多加辣科技").offerDate("2024-04-07").offerValidDate("2024-04-11").customerName("米大傻").customerAddress("广东省广州市").contact("078-182****4568").totalQty(5).totalAmount(new BigDecimal(10300)).build();// 填充普通占位符// 这里 data 使用对象或者 Map 都可以writer.fill(offerDetail, sheet);List<ProductOfferEntity> list = new ArrayList<>();list.add(ProductOfferEntity.builder().productName("电脑").typeSpec("联想").price(new BigDecimal(5000)).quantity(2).amount(new BigDecimal(10000)).build());list.add(ProductOfferEntity.builder().productName("鼠标").typeSpec("联想").price(new BigDecimal(100)).quantity(3).amount(new BigDecimal(300)).build());// 填充配置,开启组合填充换行FillConfig fillConfig = FillConfig.builder().forceNewRow(true).build();// 填充列表占位符writer.fill(list, fillConfig, sheet);//填充完成writer.finish();}
相关工具类:
EasyExcelUtil.java
package com.mike.common.core.utils.excel;import com.mike.common.core.constant.DateFormatConstant;
import com.mike.common.core.utils.StringUtils;
import javax.servlet.http.HttpServletResponse;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;public class EasyExcelUtil {/*** 初始化响应体* @param response 请求头* @param fileName 导出名称*/public static void initResponse(HttpServletResponse response, String fileName) {// 最终文件名:文件名_(截止yyyy-MM-dd) --> 这块地方得根据你们自己项目做更改了String finalFileName = fileName + "_(截止"+ StringUtils.getNowTimeStr(DateFormatConstant.Y0M0D)+")";// 设置content—type 响应类型response.setContentType("application/vnd.ms-excel");response.setCharacterEncoding("utf-8");try {// 这里URLEncoder.encode可以防止中文乱码finalFileName = URLEncoder.encode(finalFileName, "UTF-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}response.setHeader("Content-disposition", "attachment;filename=" + finalFileName + ".xlsx");}
}
测试:
四、我所遇到的问题
(1)驼峰命名导致填充数据失败
我在编写工资条案例时,最开始的模板如下:
导出效果:
数据都有,但是导出的表格中有些字段填充失败
这个我也不知道具体原因是为什么,不过测了几组数据之后,得出以下结论:
如果占位符中的变量采用的是驼峰命名的方式,且组成变量的 “单词” 存在过于简单的时就会出现该状况,比如说:
月薪的占位符 {.mSalary}
中的 mSalary
是由 m
和 salary
组成,m
只有一个字母, {.mSalary}
填充不上,但是如果单独使用 {.m}
或者 {.salary}
却可以填充上去,或者把每个组成的单词写复杂一点,比如写成 {.mouthSalary}
也是可以填充上的
解决方案:要么就不要用驼峰命名,要么驼峰命名就写规范点,不要简写
(3)模板单元格样式消失
如果你使用模板导出发现有些单元格的样式消失了,比如:
这是因为在 write()
方法中添加了表格头的 class
对象
通过模板导出的方式不需要设置这个类对象,去掉即可
ExcelWriter writer = EasyExcel.write(out).withTemplate(templateFile).build();
参考文章:
easyexcel导出excel表格:https://blog.csdn.net/qq_57732418/article/details/136944211
SpringBoot集成阿里EasyExcel导出excel高级实战:https://blog.csdn.net/Blueeyedboy521/article/details/128257388
springboot 使用 EasyExcel 通过模板导出EXCEL 带多个动态列表:https://www.cnblogs.com/guanxiaohe/p/17719954.html
相关文章:
easyExcel - 按模板导出
目录 前言一、情景介绍二、文档介绍2.1 读取模板2.2 填充模板 三、代码示例3.1 案例一:工资表3.2 案例二:报价单 四、我所遇到的问题 前言 Java-easyExcel入门教程:https://blog.csdn.net/xhmico/article/details/134714025 之前有介绍过如…...
使用 Tranformer 进行概率时间序列预测实战
使用 Transformers 进行概率时间序列预测实战 通常,经典方法针对数据集中的每个时间序列单独拟合。然而,当处理大量时间序列时,在所有可用时间序列上训练一个“全局”模型是有益的,这使模型能够从许多不同的来源学习潜在的表示。…...
LLM大语言模型助力DataEase小助手,新增气泡地图,DataEase开源数据可视化分析平台v2.5.0发布
2024年4月8日,DataEase开源数据可视化分析平台正式发布v2.5.0版本。 这一版本的功能升级包括:新增DataEase小助手支持,通过结合智能算法和LLM(即Large Language Model,大语言模型)能力,DataEas…...
维修伊顿触摸屏不显示工业电脑人机界面EATON XVS-430-10MPI-1-10 深圳捷达工控维修
人机界面 (HMI) XP500 工业 PC 系列 以不同的方式思考工业平板电脑 对于严酷、高要求的应用,工业平板电脑设定了可配置性和稳健性的标准。伊顿的 XP500 系列工业平板电脑凭借防刮钢化玻璃屏幕、铸铝外壳和无风扇设计满足了这些需求。这些功能使 XP500 HMI成为一款节…...
趣话最大割问题:花果山之群猴博弈
内容来源:量子前哨(ID:Qforepost) 编辑丨浪味仙 排版丨 沛贤 深度好文:3000字丨15分钟阅读 趋利避害,是所有生物遵循的自然法则,人类也不例外。 举个例子,假如你是某生鲜平台的配…...
上周面试了一个大模型算法岗的女生,有点崩溃。。。
节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学,针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总…...
AI系列:大语言模型的function calling
目录 大语言模型(LLM) 的function calling实验:OpenAI之function calling序列图:function calling如何工作详情: 对话内容参考代码 后续: 使用LangChain实现function calling参考 大语言模型(LLM) 的function calling 大语言模型(LLM)可以使用自然语言与…...
conda 创建、激活、退出、删除虚拟环境
一、conda 本地环境常用操作 #获取版本号 conda --version 或 conda -V #检查更新当前conda conda update conda #查看当前存在哪些虚拟环境 conda env list 或 conda info -e #查看--安装--更新--删除包 conda list: conda search package_name# 查询包 cond…...
【Entity Framework】聊一聊EF中继承关系
【Entity Framework】聊一聊EF中继承关系 文章目录 【Entity Framework】聊一聊EF中继承关系一、概述二、实体类型层次结构映射三、每个层次结构一张表和鉴别器配置四、共享列五、每个类型一张表配置六、每个具体类型一张表配置七、TPC数据库架构八、总结 一、概述 Entity Fra…...
curaengine编译源码之libarcus编译记录
libArcus的编译(成功安装) This library contains C code and Python3 bindings for creating a socket in a thread and using this socket to send and receive messages based on the Protocol Buffers library. It is designed to facilitate the c…...
运用OSI模型提升排错能力
1. OSI模型有什么实际的应用价值? 2. 二层和三层网络的区别和应用; 3. 如何通过OSI模型提升组网排错能力? -- OSI - 开放式系统互联 - 一个互联标准 - 从软件和硬件 定义标准 - 不同厂商的设备 研发的技术 - 具备兼容性 -- O…...
【Node.js】Express学习笔记(黑马)
目录 初识 ExpressExpress 简介Express 的基本使用托管静态资源nodemon Express 路由路由的概念路由的使用 Express 中间件中间件的概念Express 中间件的初体验中间件的分类 初识 Express Express 简介 什么是 Express? 官方给出的概念:Express 是基于…...
Linux系统部署Tale个人博客并发布到公网访问
目录 ⛳️推荐 前言 1. Tale网站搭建 1.1 检查本地环境 1.2 部署Tale个人博客系统 1.3 启动Tale服务 1.4 访问博客地址 2. Linux安装Cpolar内网穿透 3. 创建Tale博客公网地址 4. 使用公网地址访问Tale ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站,通…...
CentOS7里ifcfg-eth0文件不存在解决方案/Centos7修改网络IP解决方案
Centos7网络IP地址手动设置 1、centos7没有ifcfg-eth0,我的centos7也没有其他博客说的什么ifcfg-ens33、ifcfg-ens32,然后我打开了我这里的ifcfg-eno***,结果发现就是centos6里的ifcfg-eth0里的网络配置。2、vim ifcfg-eno***(按t…...
go第三方库go.uber.org介绍
Uber 是一家美国硅谷的科技公司,也是 Go 语言的早期 adopter。其开源了很多 golang 项目,诸如被 Gopher 圈熟知的 zap、jaeger 等。2018 年年末 Uber 将内部的 Go 风格规范 开源到 GitHub,经过一年的积累和更新,该规范已经初具规模…...
Oracle 正则表达式
一、Oracle 正则表达式相关函数 (1) regexp_like :同 like 功能相似(模糊 匹配) (2) regexp_instr :同 instr 功能相似(返回字符所在 下标) (3) regexp_substr : 同 substr 功能相似&…...
MongoDB聚合运算符:$rand
MongoDB聚合运算符:$rand 文章目录 MongoDB聚合运算符:$rand语法举例生成随机数据点从集合中随机选择条目 $rand聚合运算符用于返回一个0~1之间的随机浮点数。 语法 { $rand: {} }$rand运算符不需要任何参数。每次调用$rand都会返回一个小数点后最多17位…...
如何在Linux通过docker搭建Plik文件系统并实现无公网IP管理内网文件
文章目录 1. Docker部署Plik2. 本地访问Plik3. Linux安装Cpolar4. 配置Plik公网地址5. 远程访问Plik6. 固定Plik公网地址7. 固定地址访问Plik 本文介绍如何使用Linux docker方式快速安装Plik并且结合Cpolar内网穿透工具实现远程访问,实现随时随地在任意设备上传或者…...
k8s部署efk
环境简介: kubernetes: v1.22.2 helm: v3.12.0 elasticsearch: 8.8.0 chart包:19.10.0 fluentd: 1.16.2 chart包: 5.9.4 kibana: 8.2.2 chart包:10.1.9 整体架构图: 一、Elasticsearch安装…...
AI模型大PK
🤖AI模型大PK!免费测试GPT-4等36款顶级聊天机器人 近年来,大型语言模型(LLM)的发展日新月异,各大科技巨头和研究机构纷纷推出了自己的聊天机器人。那么,如何才能知道哪个模型更强大、更智能呢&…...
Matlab|基于广义Benders分解法的综合能源系统优化规划
目录 1 主要内容 广义benders分解法流程图: 优化目标: 约束条件: 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序复现文章《综合能源系统协同运行策略与规划研究》第四章内容基于广义Benders分解法的综合能源系统优化规划&…...
vscode 打代码光标特效
vscode 打代码光标特效 在设置里面找到settings 进入之后在代码最下方加入此代码 "explorer.confirmDelete": false,"powermode.enabled": true, //启动"powermode.presets": "fireworks", // 火花效果// particles、 simple-rift、e…...
【代码随想录算法训练营第四十八天 | LeetCode198.打家劫舍、213.打家劫舍II、337.打家劫舍III】
代码随想录算法训练营第四十八天 | LeetCode198.打家劫舍、213.打家劫舍II、337.打家劫舍III 一、198.打家劫舍 解题代码C: class Solution { public:int rob(vector<int>& nums) {if (nums.size() 0) return 0;if (nums.size() 1) return nums[0];ve…...
蓝桥杯 — —灵能传输
灵能传输 友情链接:灵能传输 题目: 输入样例: 3 3 5 -2 3 4 0 0 0 0 3 1 2 3输出样例: 3 0 3思路: 题目大意:给出一个数组,每次选择数组中的一个数(要求不能是第一个数与最后一个…...
智慧安防系统EasyCVR视频汇聚平台接入大华设备无法语音对讲的原因排查与解决
安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台支持7*24小时实时高清视频监控,能同时播放多路监控视频流,视频画面1、4、9、16个可选,支持自定义视频轮播。EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标…...
基于Pytorch框架的CNN-LSTM模型在CWRU轴承故障诊断的应用
目录 1. 简介 2. 方法 2.1数据集 2.2模型架构 1. 简介 CWRU轴承故障诊断是工业领域一个重要的问题,及早发现轴承故障可以有效地减少设备停机时间和维修成本,提高生产效率和设备可靠性。传统的基于信号处理和特征提取的方法通常需要手工设计特征&…...
QQ 邮箱使用 SMTP 发送邮件报错:550 The From header is missing or invalid
文章目录 场景描述问题排查根据提示查看原因查看封装的 message 个人简介 场景描述 QQ 邮箱使用 SMTP 发送邮件报错:550 The From header is missing or invalid: 失败原因:(550, bThe "From" header is missing or invalid. Ple…...
mysql中的视图
1、什么是视图? view:站在不同的角度去看待同一份数据。 2、怎么创建视图对象?怎么删除视图对象? 表复制: mysql> create table dept2 as select * from dept; 创建视图对象: create view dept2_v…...
树莓派点亮双色LED
双色LED灯准确来说叫双基色LED灯,是指模块只能显示2种颜色,一般是红色和绿色,可以有三种状态 :灭,颜色1亮,颜色2亮,根据颜色组合的不同,分为红蓝双色,黄蓝双色,红绿双色等等。 接线:将引脚S(绿色)和中间引脚(红色)连接到Raspberry Pi的GPIO接口上,对Raspberry…...
DAY27| 39. 组合总和 ,40.组合总和II ,131.分割回文串
文章目录 39.组合总和40.组合总和II131.分割回文串 39.组合总和 文字讲解:组合总和 视频讲解:组合总和 状态: 此题ok 思路: 代码: class Solution {int sum;public List<List<Integer>> combinationSum(int[] candi…...
wordpress 文章页 模板/广州网站快速优化排名
某天使用cmd窗口进入mysql,输入命令如下 C:\Users\xxx>net start mysql发生系统错误 5。 拒绝访问。 C:\Users\xxx>mysql -u root -pEnter password: ****ERROR 2003 (HY000): Cant connect to MySQL server on localhost:3306 (10061) 这个ERROR怎么解决…...
wordpress修改文章页面模板/百度网站关键词排名查询
一、浮动布局浮动:元素就像漂浮起来了,不占页面的位置了原理:使当前元素脱离普通文档流属性:float | left| right| none特点:元素浮动之后不占据原来的位置(脱标)浮动的盒子在一行上显示,行内元素浮动之后转…...
wordpress time()/网络推广发帖网站
本报讯(见习记者 孙佳 记者 刘振) 今年中考,西安市在全省首家实施网上阅卷。网上阅卷和传统阅卷有何区别?面对这一变化,考生在答题时应该注意哪些方面?哪些考试细节不可忽视?记者就此进行了采访。□多次评阅减少误差据…...
网站后台这么做视频教程/企业培训方案制定
概述 集群相关配置命令都是在Mongos服务上执行的。 每个命令通常有runCommand(需要切换到admin数据库),adminCommand(无需切换到admin数据库),sh(需要切换到admin数据库)三个版本。…...
提供网站建设课程/企业网络规划设计方案
第2章计算机指令集结构设计1. 通常可按哪5个因素对计算机指令集结构进行分类?(1) 在CPU中操作数的存储方法。(2) 指令中显式表示的操作数个数。(3) 操作数的寻址方式。(4) 指令集所提供的操作类型。(5) 操作数的类型和大小。2. 在对计算机指令集结构进行分类的5个因…...
wordpress数据库忘记了/电商网站设计论文
相信在平时的工作学习中大家肯定遇到过PDF格式的文件资料,想修改一下是根本就不可能的,不过想要体验更好的阅读氛围,一款好用的阅读器是不可避免的,今天给大家介绍的这款阅读器有很多的优势——轻快pdf阅读器,可以轻轻…...