当前位置: 首页 > news >正文

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 是由 msalary 组成,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 案例一&#xff1a;工资表3.2 案例二&#xff1a;报价单 四、我所遇到的问题 前言 Java-easyExcel入门教程&#xff1a;https://blog.csdn.net/xhmico/article/details/134714025 之前有介绍过如…...

使用 Tranformer 进行概率时间序列预测实战

使用 Transformers 进行概率时间序列预测实战 通常&#xff0c;经典方法针对数据集中的每个时间序列单独拟合。然而&#xff0c;当处理大量时间序列时&#xff0c;在所有可用时间序列上训练一个“全局”模型是有益的&#xff0c;这使模型能够从许多不同的来源学习潜在的表示。…...

LLM大语言模型助力DataEase小助手,新增气泡地图,DataEase开源数据可视化分析平台v2.5.0发布

2024年4月8日&#xff0c;DataEase开源数据可视化分析平台正式发布v2.5.0版本。 这一版本的功能升级包括&#xff1a;新增DataEase小助手支持&#xff0c;通过结合智能算法和LLM&#xff08;即Large Language Model&#xff0c;大语言模型&#xff09;能力&#xff0c;DataEas…...

维修伊顿触摸屏不显示工业电脑人机界面EATON XVS-430-10MPI-1-10 深圳捷达工控维修

人机界面 (HMI) XP500 工业 PC 系列 以不同的方式思考工业平板电脑 对于严酷、高要求的应用&#xff0c;工业平板电脑设定了可配置性和稳健性的标准。伊顿的 XP500 系列工业平板电脑凭借防刮钢化玻璃屏幕、铸铝外壳和无风扇设计满足了这些需求。这些功能使 XP500 HMI成为一款节…...

趣话最大割问题:花果山之群猴博弈

内容来源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 编辑丨浪味仙 排版丨 沛贤 深度好文&#xff1a;3000字丨15分钟阅读 趋利避害&#xff0c;是所有生物遵循的自然法则&#xff0c;人类也不例外。 举个例子&#xff0c;假如你是某生鲜平台的配…...

上周面试了一个大模型算法岗的女生,有点崩溃。。。

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学&#xff0c;针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总…...

AI系列:大语言模型的function calling

目录 大语言模型(LLM) 的function calling实验&#xff1a;OpenAI之function calling序列图&#xff1a;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&#xff1a; conda search package_name# 查询包 cond…...

【Entity Framework】聊一聊EF中继承关系

【Entity Framework】聊一聊EF中继承关系 文章目录 【Entity Framework】聊一聊EF中继承关系一、概述二、实体类型层次结构映射三、每个层次结构一张表和鉴别器配置四、共享列五、每个类型一张表配置六、每个具体类型一张表配置七、TPC数据库架构八、总结 一、概述 Entity Fra…...

curaengine编译源码之libarcus编译记录

libArcus的编译&#xff08;成功安装&#xff09; 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模型有什么实际的应用价值&#xff1f; 2. 二层和三层网络的区别和应用&#xff1b; 3. 如何通过OSI模型提升组网排错能力&#xff1f; -- OSI - 开放式系统互联 - 一个互联标准 - 从软件和硬件 定义标准 - 不同厂商的设备 研发的技术 - 具备兼容性 -- O…...

【Node.js】Express学习笔记(黑马)

目录 初识 ExpressExpress 简介Express 的基本使用托管静态资源nodemon Express 路由路由的概念路由的使用 Express 中间件中间件的概念Express 中间件的初体验中间件的分类 初识 Express Express 简介 什么是 Express&#xff1f; 官方给出的概念&#xff1a;Express 是基于…...

Linux系统部署Tale个人博客并发布到公网访问

目录 ⛳️推荐 前言 1. Tale网站搭建 1.1 检查本地环境 1.2 部署Tale个人博客系统 1.3 启动Tale服务 1.4 访问博客地址 2. Linux安装Cpolar内网穿透 3. 创建Tale博客公网地址 4. 使用公网地址访问Tale ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通…...

CentOS7里ifcfg-eth0文件不存在解决方案/Centos7修改网络IP解决方案

Centos7网络IP地址手动设置 1、centos7没有ifcfg-eth0&#xff0c;我的centos7也没有其他博客说的什么ifcfg-ens33、ifcfg-ens32&#xff0c;然后我打开了我这里的ifcfg-eno***&#xff0c;结果发现就是centos6里的ifcfg-eth0里的网络配置。2、vim ifcfg-eno***&#xff08;按t…...

go第三方库go.uber.org介绍

Uber 是一家美国硅谷的科技公司&#xff0c;也是 Go 语言的早期 adopter。其开源了很多 golang 项目&#xff0c;诸如被 Gopher 圈熟知的 zap、jaeger 等。2018 年年末 Uber 将内部的 Go 风格规范 开源到 GitHub&#xff0c;经过一年的积累和更新&#xff0c;该规范已经初具规模…...

Oracle 正则表达式

一、Oracle 正则表达式相关函数 (1) regexp_like &#xff1a;同 like 功能相似&#xff08;模糊 匹配&#xff09; (2) regexp_instr &#xff1a;同 instr 功能相似&#xff08;返回字符所在 下标&#xff09; (3) regexp_substr &#xff1a; 同 substr 功能相似&…...

MongoDB聚合运算符:$rand

MongoDB聚合运算符&#xff1a;$rand 文章目录 MongoDB聚合运算符&#xff1a;$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内网穿透工具实现远程访问&#xff0c;实现随时随地在任意设备上传或者…...

k8s部署efk

环境简介&#xff1a; kubernetes: v1.22.2 helm&#xff1a; v3.12.0 elasticsearch&#xff1a; 8.8.0 chart包&#xff1a;19.10.0 fluentd: 1.16.2 chart包&#xff1a; 5.9.4 kibana: 8.2.2 chart包&#xff1a;10.1.9 整体架构图&#xff1a; 一、Elasticsearch安装…...

AI模型大PK

&#x1f916;AI模型大PK&#xff01;免费测试GPT-4等36款顶级聊天机器人 近年来&#xff0c;大型语言模型&#xff08;LLM&#xff09;的发展日新月异&#xff0c;各大科技巨头和研究机构纷纷推出了自己的聊天机器人。那么&#xff0c;如何才能知道哪个模型更强大、更智能呢&…...

Matlab|基于广义Benders分解法的综合能源系统优化规划

目录 1 主要内容 广义benders分解法流程图&#xff1a; 优化目标&#xff1a; 约束条件&#xff1a; 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&#xff1a; class Solution { public:int rob(vector<int>& nums) {if (nums.size() 0) return 0;if (nums.size() 1) return nums[0];ve…...

蓝桥杯 — —灵能传输

灵能传输 友情链接&#xff1a;灵能传输 题目&#xff1a; 输入样例&#xff1a; 3 3 5 -2 3 4 0 0 0 0 3 1 2 3输出样例&#xff1a; 3 0 3思路&#xff1a; 题目大意&#xff1a;给出一个数组&#xff0c;每次选择数组中的一个数&#xff08;要求不能是第一个数与最后一个…...

智慧安防系统EasyCVR视频汇聚平台接入大华设备无法语音对讲的原因排查与解决

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台支持7*24小时实时高清视频监控&#xff0c;能同时播放多路监控视频流&#xff0c;视频画面1、4、9、16个可选&#xff0c;支持自定义视频轮播。EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标…...

基于Pytorch框架的CNN-LSTM模型在CWRU轴承故障诊断的应用

目录 1. 简介 2. 方法 2.1数据集 2.2模型架构 1. 简介 CWRU轴承故障诊断是工业领域一个重要的问题&#xff0c;及早发现轴承故障可以有效地减少设备停机时间和维修成本&#xff0c;提高生产效率和设备可靠性。传统的基于信号处理和特征提取的方法通常需要手工设计特征&…...

QQ 邮箱使用 SMTP 发送邮件报错:550 The From header is missing or invalid

文章目录 场景描述问题排查根据提示查看原因查看封装的 message 个人简介 场景描述 QQ 邮箱使用 SMTP 发送邮件报错&#xff1a;550 The From header is missing or invalid&#xff1a; 失败原因&#xff1a;(550, bThe "From" header is missing or invalid. Ple…...

mysql中的视图

1、什么是视图&#xff1f; view:站在不同的角度去看待同一份数据。 2、怎么创建视图对象&#xff1f;怎么删除视图对象&#xff1f; 表复制&#xff1a; mysql> create table dept2 as select * from dept; 创建视图对象&#xff1a; create view dept2_v…...

树莓派点亮双色LED

双色LED灯准确来说叫双基色LED灯,是指模块只能显示2种颜色,一般是红色和绿色,可以有三种状态 :灭,颜色1亮,颜色2亮,根据颜色组合的不同,分为红蓝双色,黄蓝双色,红绿双色等等。 接线:将引脚S(绿色)和中间引脚(红色)连接到Raspberry Pi的GPIO接口上,对Raspberry…...

DAY27| 39. 组合总和 ,40.组合总和II ,131.分割回文串

文章目录 39.组合总和40.组合总和II131.分割回文串 39.组合总和 文字讲解&#xff1a;组合总和 视频讲解&#xff1a;组合总和 状态: 此题ok 思路&#xff1a; 代码&#xff1a; class Solution {int sum;public List<List<Integer>> combinationSum(int[] candi…...

wordpress 文章页 模板/广州网站快速优化排名

某天使用cmd窗口进入mysql&#xff0c;输入命令如下 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修改文章页面模板/百度网站关键词排名查询

一、浮动布局浮动&#xff1a;元素就像漂浮起来了&#xff0c;不占页面的位置了原理&#xff1a;使当前元素脱离普通文档流属性&#xff1a;float | left| right| none特点&#xff1a;元素浮动之后不占据原来的位置(脱标)浮动的盒子在一行上显示&#xff0c;行内元素浮动之后转…...

wordpress time()/网络推广发帖网站

本报讯(见习记者 孙佳 记者 刘振) 今年中考&#xff0c;西安市在全省首家实施网上阅卷。网上阅卷和传统阅卷有何区别&#xff1f;面对这一变化&#xff0c;考生在答题时应该注意哪些方面&#xff1f;哪些考试细节不可忽视&#xff1f;记者就此进行了采访。□多次评阅减少误差据…...

网站后台这么做视频教程/企业培训方案制定

概述 集群相关配置命令都是在Mongos服务上执行的。 每个命令通常有runCommand&#xff08;需要切换到admin数据库&#xff09;&#xff0c;adminCommand&#xff08;无需切换到admin数据库&#xff09;&#xff0c;sh&#xff08;需要切换到admin数据库&#xff09;三个版本。…...

提供网站建设课程/企业网络规划设计方案

第2章计算机指令集结构设计1. 通常可按哪5个因素对计算机指令集结构进行分类&#xff1f;(1) 在CPU中操作数的存储方法。(2) 指令中显式表示的操作数个数。(3) 操作数的寻址方式。(4) 指令集所提供的操作类型。(5) 操作数的类型和大小。2. 在对计算机指令集结构进行分类的5个因…...

wordpress数据库忘记了/电商网站设计论文

相信在平时的工作学习中大家肯定遇到过PDF格式的文件资料&#xff0c;想修改一下是根本就不可能的&#xff0c;不过想要体验更好的阅读氛围&#xff0c;一款好用的阅读器是不可避免的&#xff0c;今天给大家介绍的这款阅读器有很多的优势——轻快pdf阅读器&#xff0c;可以轻轻…...