EasyExcel(环境搭建以及常用写入操作)
文章目录
- EasyExcel环境搭建
- 1.创建模块 easyexcel-demo
- 2.引入依赖
- 3.启动类创建
- EasyExcel写
- 1.最简单的写入
- 1.模板
- 2.方法
- 3.结果 Write01.xlsx
- 2.指定字段不写入Excel
- 1.模板
- 2.方法
- 3.结果 Write02.xlsx
- 3.指定字段写入excel
- 1.模板
- 2.方法
- 3.结果 Write03.xlsx
- 4.按照index顺序写入excel
- 1.模板
- 2.方法
- 3.结果 Write04.xlsx
- 5.复杂头数据写入,合并单元格
- 1.模板
- 2.方法
- 3.结果 Write05.xlsx
- 6.写入数据到不同的sheet中
- 1.模板
- 2.方法
- 3.结果 Write06.xlsx
- 7.日期数字格式化
- 1.模板
- 2.方法
- 3.结果 Write07.xlsx
- 8.写入图片到Excel
- 1.模板
- 2.方法
- 3.结果 Write08.xlsx
- 9.通过注解形式设置写入Excel样式
- 1.模板
- 2.方法
- 3.结果 Write09.xlsx
- 10.应用自定义转换器
- 1.模板
- 2.自定义转换器
- 3.方法
- 4.结果 Write10.xlsx
EasyExcel环境搭建
1.创建模块 easyexcel-demo

2.引入依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.2</version></parent><groupId>com.sunxiansheng</groupId><artifactId>easyexcel-demo</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.2</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies>
</project>
3.启动类创建
package com.sunxiansheng;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;/*** Description: 启动类** @Author sun* @Create 2024/10/29 11:19* @Version 1.0*/
@SpringBootApplication
public class ExcelApplication {public static void main(String[] args) {SpringApplication.run(ExcelApplication.class, args);}
}
EasyExcel写
1.最简单的写入
1.模板
@NoArgsConstructor@AllArgsConstructor@Data@Builderpublic static class Write01 {@ExcelProperty(value = "用户编号")private Integer userId;@ExcelProperty(value = "姓名")private String userName;@ExcelProperty(value = "性别")private String gender;@ExcelProperty(value = "工资")private Double salary;@ExcelProperty(value = "入职时间")private Date hireDate;}
2.方法
/*** 最简单的写入*/@Testpublic void testWrite01() {String fileName = "/Users/sunxiansheng/IdeaProjects/demo/easyexcel-demo/src/main/resources/Write01.xlsx";// 1.构建write,指定写入的文件路径ExcelWriter excelWriter = EasyExcel.write(fileName).build();// 2.构建sheet,指定sheetName和模板WriteSheet writeSheet = EasyExcel.writerSheet().sheetName("用户信息").head(Write01.class).build();// 3.构造数据List<Write01> list = new ArrayList<>();for (int i = 1; i <= 10; i++) {Write01 user = Write01.builder().userId(i).userName("admin" + i).gender(i % 2 == 0 ? "女" : "男").salary(i * 1000.00).hireDate(new Date()).build();list.add(user);}// 4.write向sheet中写入数据excelWriter.write(list, writeSheet);// 5.关闭流excelWriter.finish();}
3.结果 Write01.xlsx

2.指定字段不写入Excel
1.模板
@NoArgsConstructor@AllArgsConstructor@Data@Builderpublic static class Write02 {@ExcelProperty(value = "用户编号")private Integer userId;@ExcelProperty(value = "姓名")private String userName;@ExcelProperty(value = "性别")private String gender;@ExcelProperty(value = "工资")private Double salary;@ExcelProperty(value = "入职时间")private Date hireDate;}
2.方法

/*** 指定字段不写入excel*/@Testpublic void testWrite02() {String fileName = "/Users/sunxiansheng/IdeaProjects/demo/easyexcel-demo/src/main/resources/Write02.xlsx";// 1.构建write,指定写入的文件路径ExcelWriter excelWriter = EasyExcel.write(fileName).build();// 2.构建sheet,指定sheetName和模板WriteSheet writeSheet = EasyExcel.writerSheet().sheetName("用户信息").head(Write02.class).excludeColumnFieldNames(Arrays.asList("salary", "hireDate")) // 排除字段.build();// 3.构造数据List<Write02> list = new ArrayList<>();for (int i = 1; i <= 10; i++) {Write02 user = Write02.builder().userId(i).userName("admin" + i).gender(i % 2 == 0 ? "女" : "男").salary(i * 1000.00).hireDate(new Date()).build();list.add(user);}// 4.write向sheet中写入数据excelWriter.write(list, writeSheet);// 5.关闭流excelWriter.finish();}
3.结果 Write02.xlsx

3.指定字段写入excel
1.模板
@NoArgsConstructor@AllArgsConstructor@Data@Builderpublic static class Write03 {@ExcelProperty(value = "用户编号")private Integer userId;@ExcelProperty(value = "姓名")private String userName;@ExcelProperty(value = "性别")private String gender;@ExcelProperty(value = "工资")private Double salary;@ExcelProperty(value = "入职时间")private Date hireDate;}
2.方法
/*** 指定字段写入excel*/
@Test
public void testWrite03() {String fileName = "/Users/sunxiansheng/IdeaProjects/demo/easyexcel-demo/src/main/resources/Write03.xlsx";// 1.构建write,指定写入的文件路径ExcelWriter excelWriter = EasyExcel.write(fileName).build();// 2.构建sheet,指定sheetName和模板WriteSheet writeSheet = EasyExcel.writerSheet().sheetName("用户信息").head(Write03.class).includeColumnFieldNames(Arrays.asList("salary", "hireDate")) // 包含字段.build();// 3.构造数据List<Write03> list = new ArrayList<>();for (int i = 1; i <= 10; i++) {Write03 user = Write03.builder().userId(i).userName("admin" + i).gender(i % 2 == 0 ? "女" : "男").salary(i * 1000.00).hireDate(new Date()).build();list.add(user);}// 4.write向sheet中写入数据excelWriter.write(list, writeSheet);// 5.关闭流excelWriter.finish();
}
3.结果 Write03.xlsx

4.按照index顺序写入excel
1.模板
@NoArgsConstructor@AllArgsConstructor@Data@Builderpublic static class Write04 {@ExcelProperty(value = "用户编号", index = 0)private Integer userId;@ExcelProperty(value = "姓名", index = 1)private String userName;@ExcelProperty(value = "性别", index = 3)private String gender;@ExcelProperty(value = "工资", index = 4)private Double salary;@ExcelProperty(value = "入职时间", index = 2)private Date hireDate;}
2.方法
/*** 按照index顺序写入excel*/
@Test
public void testWrite04() {String fileName = "/Users/sunxiansheng/IdeaProjects/demo/easyexcel-demo/src/main/resources/Write04.xlsx";// 1.构建write,指定写入的文件路径ExcelWriter excelWriter = EasyExcel.write(fileName).build();// 2.构建sheet,指定sheetName和模板WriteSheet writeSheet = EasyExcel.writerSheet().sheetName("用户信息").head(Write04.class).build();// 3.构造数据List<Write04> list = new ArrayList<>();for (int i = 1; i <= 10; i++) {Write04 user = Write04.builder().userId(i).userName("admin" + i).gender(i % 2 == 0 ? "女" : "男").salary(i * 1000.00).hireDate(new Date()).build();list.add(user);}// 4.write向sheet中写入数据excelWriter.write(list, writeSheet);// 5.关闭流excelWriter.finish();
}
3.结果 Write04.xlsx

5.复杂头数据写入,合并单元格
1.模板
@NoArgsConstructor@AllArgsConstructor@Data@Builderpublic static class Write05 {@ExcelProperty(value = {"group1", "用户编号"})private Integer userId;@ExcelProperty(value = {"group1", "姓名"})private String userName;@ExcelProperty(value = {"group2", "性别"})private String gender;@ExcelProperty(value = {"group2", "工资"})private Double salary;@ExcelProperty(value = "入职时间")private Date hireDate;}
2.方法
/*** 复杂头数据写入,合并单元格*/
@Test
public void testWrite05() {String fileName = "/Users/sunxiansheng/IdeaProjects/demo/easyexcel-demo/src/main/resources/Write05.xlsx";// 1.构建write,指定写入的文件路径ExcelWriter excelWriter = EasyExcel.write(fileName).build();// 2.构建sheet,指定sheetName和模板WriteSheet writeSheet = EasyExcel.writerSheet().sheetName("用户信息").head(Write05.class).build();// 3.构造数据List<Write05> list = new ArrayList<>();for (int i = 1; i <= 10; i++) {Write05 user = Write05.builder().userId(i).userName("admin" + i).gender(i % 2 == 0 ? "女" : "男").salary(i * 1000.00).hireDate(new Date()).build();list.add(user);}// 4.write向sheet中写入数据excelWriter.write(list, writeSheet);// 5.关闭流excelWriter.finish();
}
3.结果 Write05.xlsx

6.写入数据到不同的sheet中
1.模板
@NoArgsConstructor
@AllArgsConstructor
@Data
@Builder
public static class Write06 {@ExcelProperty(value = "用户编号")private Integer userId;@ExcelProperty(value = "姓名")private String userName;@ExcelProperty(value = "性别")private String gender;@ExcelProperty(value = "工资")private Double salary;@ExcelProperty(value = "入职时间")private Date hireDate;
}
2.方法
/*** 写入数据到不同的sheet中*/
@Test
public void testWrite06() {String fileName = "/Users/sunxiansheng/IdeaProjects/demo/easyexcel-demo/src/main/resources/Write06.xlsx";// 1.构建write,指定写入的文件路径ExcelWriter excelWriter = EasyExcel.write(fileName).build();// 2.循环创建十个sheet,并分别写入数据for (int j = 0; j < 10; j++) {// 创建sheetWriteSheet writeSheet = EasyExcel.writerSheet().sheetName("用户信息" + j).head(Write06.class).build();// 3.构造数据List<Write06> list = new ArrayList<>();for (int i = 1; i <= 10; i++) {Write06 user = Write06.builder().userId(i).userName("admin" + i).gender(i % 2 == 0 ? "女" : "男").salary(i * 1000.00).hireDate(new Date()).build();list.add(user);}// 4.write向sheet中写入数据excelWriter.write(list, writeSheet);}// 5.关闭流excelWriter.finish();
}
3.结果 Write06.xlsx

7.日期数字格式化
1.模板
@NoArgsConstructor
@AllArgsConstructor
@Data
@Builder
public static class Write07 {@ExcelProperty(value = "用户编号")private Integer userId;@ExcelProperty(value = "姓名")private String userName;@ExcelProperty(value = "性别")private String gender;@ExcelProperty(value = "工资")@ContentStyle(dataFormat = 2) // 保留两位小数private Double salary;@ExcelProperty(value = "入职时间")@DateTimeFormat(value = "yyyy年MM月dd日 HH时mm分ss秒") // 日期格式化private Date hireDate;
}
2.方法
/*** 日期数字格式化*/
@Test
public void testWrite07() {String fileName = "/Users/sunxiansheng/IdeaProjects/demo/easyexcel-demo/src/main/resources/Write07.xlsx";// 1.构建write,指定写入的文件路径ExcelWriter excelWriter = EasyExcel.write(fileName).build();// 2.构建sheet,指定sheetName和模板WriteSheet writeSheet = EasyExcel.writerSheet().sheetName("用户信息").head(Write07.class).build();// 3.构造数据List<Write07> list = new ArrayList<>();for (int i = 1; i <= 10; i++) {Write07 user = Write07.builder().userId(i).userName("admin" + i).gender(i % 2 == 0 ? "女" : "男").salary(i * 1000.213214234).hireDate(new Date()).build();list.add(user);}// 4.write向sheet中写入数据excelWriter.write(list, writeSheet);// 5.关闭流excelWriter.finish();
}
3.结果 Write07.xlsx

8.写入图片到Excel
1.模板
@NoArgsConstructor
@AllArgsConstructor
@Data
@Builder
@ContentRowHeight(value = 100) // 内容行高
@ColumnWidth(value = 20) // 列宽
static class Write08 {// 使用抽象文件表示一个图片@ExcelProperty(value = "File类型")private File file;// 使用输入流保存一个图片@ExcelProperty(value = "InputStream类型")private InputStream inputStream;// 当使用String类型保存一个图片的时候需要使用StringImageConverter转换器@ExcelProperty(value = "String类型", converter = StringImageConverter.class)private String str;// 使用二进制数据保存为一个图片@ExcelProperty(value = "二进制数据(字节)")private byte[] byteArr;// 使用网络链接保存为一个图片@ExcelProperty(value = "网络图片")private URL url;
}
2.方法
/*** 写入图片到Excel*/@Testpublic void testWrite08() throws Exception {String fileName = "/Users/sunxiansheng/IdeaProjects/demo/easyexcel-demo/src/main/resources/Write08.xlsx";// 本地图片String imagePath = "/Users/sunxiansheng/IdeaProjects/demo/easyexcel-demo/src/main/resources/th.jpeg";// 网络图片URL url = new URL("https://cn.bing.com/th?id=OHR.TanzaniaBeeEater_ZH-CN3246625733_1920x1080.jpg&rf=LaDigue_1920x1080.jpg&pid=hp");// 构建writerExcelWriter excelWriter = EasyExcel.write(fileName).build();// 构建sheetWriteSheet writeSheet = EasyExcel.writerSheet().head(Write08.class).sheetName("图片信息").build();// 构建data// 将图片读取到byte数组中byte[] bytes = new byte[(int) new File(imagePath).length()];InputStream inputStream = new FileInputStream(imagePath);inputStream.read(bytes, 0, bytes.length);List<Write08> imageDataList = new ArrayList<>();// 创建数据模板Write08 imageData = Write08.builder().file(new File(imagePath)) // File类型.inputStream(new FileInputStream(imagePath)) // InputStream类型.str(imagePath) // String类型.byteArr(bytes) // 二进制数据.url(url) // 网络图片.build();// 添加要写入的图片模型imageDataList.add(imageData);// 写入数据excelWriter.write(imageDataList, writeSheet);// 关闭流excelWriter.finish();}
3.结果 Write08.xlsx

9.通过注解形式设置写入Excel样式
1.模板
@NoArgsConstructor@AllArgsConstructor@Data@Builder@HeadRowHeight(value = 30) // 头部行高@ContentRowHeight(value = 25) // 内容行高@ColumnWidth(value = 20) // 列宽// 头字体设置成20, 字体默认宋体@HeadFontStyle(fontName = "宋体", fontHeightInPoints = 20)// 内容字体设置成20, 字体默认宋体@ContentFontStyle(fontName = "宋体", fontHeightInPoints = 20)public static class Write09 {@ExcelProperty(value = "用户编号")private Integer userId;// 字符串的头字体设置成20@HeadFontStyle(fontHeightInPoints = 30)// 字符串的内容字体设置成20,默认宋体@ContentFontStyle(fontName = "宋体", fontHeightInPoints = 20)@ExcelProperty(value = "姓名")private String userName;@ExcelProperty(value = "性别")private String gender;@ExcelProperty(value = "工资")private Double salary;@ExcelProperty(value = "入职时间")private Date hireDate;}
2.方法
/*** 通过注解形式设置写入Excel样式*/
@Test
public void testWrite09() {String fileName = "/Users/sunxiansheng/IdeaProjects/demo/easyexcel-demo/src/main/resources/Write09.xlsx";// 1.构建write,指定写入的文件路径ExcelWriter excelWriter = EasyExcel.write(fileName).build();// 2.构建sheet,指定sheetName和模板WriteSheet writeSheet = EasyExcel.writerSheet().sheetName("用户信息").head(Write09.class).build();// 3.构造数据List<Write09> list = new ArrayList<>();for (int i = 1; i <= 10; i++) {Write09 user = Write09.builder().userId(i).userName("admin" + i).gender(i % 2 == 0 ? "女" : "男").salary(i * 1000.00).hireDate(new Date()).build();list.add(user);}// 4.write向sheet中写入数据excelWriter.write(list, writeSheet);// 5.关闭流excelWriter.finish();
}
3.结果 Write09.xlsx

10.应用自定义转换器
1.模板
@NoArgsConstructor
@AllArgsConstructor
@Data
@Builder
public static class Write10 {@ExcelProperty(value = "用户编号")private Integer userId;@ExcelProperty(value = "姓名")private String userName;@ExcelProperty(value = "性别", converter = GenderConverter.class) // 使用自定义转换器private Integer gender;@ExcelProperty(value = "工资")private Double salary;@ExcelProperty(value = "入职时间")private Date hireDate;
}
2.自定义转换器
/*** 自定义转换器,比如数据库中0代表男,1代表女,导出到Excel中需要转换为男和女,注意,需要是public类型的*/
public static class GenderConverter implements Converter<Integer> {private static final String MALE = "男";private static final String FEMALE = "女";/*** Java类型是Integer** @return*/@Overridepublic Class<?> supportJavaTypeKey() {return Integer.class;}/*** Excel类型是String** @return*/@Overridepublic CellDataTypeEnum supportExcelTypeKey() {return CellDataTypeEnum.STRING;}/*** 写入Excel时,将Integer类型的数据转换为String类型** @param value* @param contentProperty* @param globalConfiguration* @return* @throws Exception*/@Overridepublic WriteCellData<?> convertToExcelData(Integer value,ExcelContentProperty contentProperty,GlobalConfiguration globalConfiguration) throws Exception {// 根据整数值返回对应的性别字符串String gender;switch (value) {case 0:gender = MALE;break;case 1:gender = FEMALE;break;default:gender = "未知";}// 返回转换后的 Excel 单元格数据return new WriteCellData<>(gender);}/*** 读取Excel时,将String类型的数据转换为Integer类型** @param cellData* @param contentProperty* @param globalConfiguration* @return* @throws Exception*/@Overridepublic Integer convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {// 获取Excel的值String cellDataStringValue = cellData.getStringValue();// 转换为Java的值switch (cellDataStringValue) {case MALE:return 0; // 男,返回0case FEMALE:return 1; // 女,返回1default:return -1; // 其他,返回-1}}
}
3.方法
/*** 应用自定义转换器*/
@Test
public void testWrite10() {String fileName = "/Users/sunxiansheng/IdeaProjects/demo/easyexcel-demo/src/main/resources/Write10.xlsx";// 1.构建write,指定写入的文件路径ExcelWriter excelWriter = EasyExcel.write(fileName).build();// 2.构建sheet,指定sheetName和模板WriteSheet writeSheet = EasyExcel.writerSheet().sheetName("用户信息").head(Write10.class).build();// 3.构造数据List<Write10> list = new ArrayList<>();for (int i = 1; i <= 10; i++) {Write10 user = Write10.builder().userId(i).userName("admin" + i).gender(i % 2 == 0 ? 1 : 0) // 这里插入的是数字,使用自定义转换器转换为男和女.salary(i * 1000.00).hireDate(new Date()).build();list.add(user);}// 4.write向sheet中写入数据excelWriter.write(list, writeSheet);// 5.关闭流excelWriter.finish();
}
4.结果 Write10.xlsx

相关文章:
EasyExcel(环境搭建以及常用写入操作)
文章目录 EasyExcel环境搭建1.创建模块 easyexcel-demo2.引入依赖3.启动类创建 EasyExcel写1.最简单的写入1.模板2.方法3.结果 Write01.xlsx 2.指定字段不写入Excel1.模板2.方法3.结果 Write02.xlsx 3.指定字段写入excel1.模板2.方法3.结果 Write03.xlsx 4.按照index顺序写入ex…...
探索Milvus数据库:新手入门指南(tencent云)
开启向量数据库的奇妙之旅 在数据科学和机器学习领域,Milvus是一个专为向量数据设计的开源数据库。它以其高性能和易于使用的特点,成为了处理大规模向量搜索任务的理想选择。如果你是Milvus的新手,这篇文章将带你一步步了解如何开始你的Milv…...
MySQL:一文弄懂时区time_zone
你还在被以下问题困扰吗: MySQL 的安装规范中应该设置什么时区? JAVA 应用读取到的时间和北京时间差了 14 个小时,为什么?怎么解决? 已经运行一段时间的业务,修改 MySQL 的时区会影响已经存储的时间类型数据…...
基于python的天气可视化系统
目 录 1绪论 1.1研究背景 1.2研究意义 1.3当前研究现状 1.4研究内容 第2章 相关基础理论 2.1 爬虫技术基础 2.2 Python 在爬虫中的应用 2.3 爬虫系统的设计要点 第3章 天气网数据可视化系统设计 3.1 系统概述及主要内容 3.1.1 系统架构 3.1.2 工具选择…...
STM32 高级 WIFi案例1:测试AT指令
需求描述 测试AT指令是否能够正常控制ESP32的wifi,比如重启、读取设备信息等。 思路: stm32通过串口usart2向ESP32发布命令。ESP32通过串口1返回信息。 配置: 第一步:对ESP32芯片烧录可以读取stm32命令的固件(fac…...
SpringCloud微服务架构
文章目录 认识微服务:SpringCloud 服务拆分及远程调用实现夸远程服务调用使用RestTemplateEureka注册中心 搭建EruekaServer注册服务服务发现 Ribbon负载均衡 修改负载均衡规则解饿加载 Nacos注册中心(nacos一部分功能) 服务注册到nacosnacos…...
WebSocket封装
提示:记录工作中遇到的需求及解决办法 文章目录 前言二、背景三、WebSocket3.1 什么是 WebSocket ?为什么使用他?四、封装 WebSocket4.1 Javascript 版本4.2 Typescript 版本4.3 如何使用?五、我的痛点如何处理前言 本文将介绍 WebSocket 的封装,比如:心跳机制,重连和一…...
基于Flask后端框架的均值填充
Flask可以在Jupyter上运行,首先需要安装这两个库: !pip install Flask-CORS !pip install Flask 引入依赖: from flask import Flask, request, jsonify, send_file import os import pandas as pd import io from flask import Flask fr…...
SQL-Server链接服务器访问Oracle数据
SQL Server 链接服务器访问 Oracle 离线安装 .NET Framework 3.5 方法一:使用 NetFx3.cab 文件 下载 NetFx3.cab 文件,并将其放置在 Windows 10 系统盘的 C:Windows 文件夹中。 以管理员身份运行命令提示符,输入以下命令并回车: …...
Python中continue语句的使用
1 问题 本文将对在循环中continue语句的用途和如何正确使用continue进行分析与总结。 2 方法 (1)定义: 在编程中,“continue”是一个关键字,用于循环结构中。它的作用是跳过当前循环的剩余部分,立即进入下一…...
JavaScript的diff库详解(示例:vue项目实现两段字符串比对标黄功能)
diff库介绍 diff 库是基于 Myers 差分算法 实现的 JavaScript 文本差异库。 Myers 差分算法 是由 Eugene Myers 在 1986 年发表的一篇经典算法论文 “An O(ND) Difference Algorithm and its Variations” 中描述的一种高效算法,用于计算两个序列(通常是…...
自动驾驶3D目标检测综述(六)
停更了好久终于回来了(其实是因为博主去备考期末了hh) 这一篇接着(五)的第七章开始讲述第八章的内容。第八章主要介绍的是三维目标检测的高效标签。 目录 第八章 三维目标检测高效标签 一、域适应 (一)…...
the request was rejected because no multipart boundary was found
文章目录 1. 需求描述2. 报错信息3. 探索过程 1. 使用postman 排除后端错误2. 搜索网上的解决方法3. 解决方法 1. 需求描述 想要在前端上传一个PDF 发票,经过后端解析PDF之后,将想要的值自动回填到对应的输入框中 2. 报错信息 org.apache.tomcat.u…...
HarmonyOS-面试整理
目录 为什么选择HarmonyOS/ 优点/特点鸿蒙系统的权限有哪些说一说鸿蒙系统的安全机制说一说鸿蒙系统的微内核与安卓的内核区别鸿蒙操作系统的微内核架构有哪些优势分布式能力在鸿蒙系统中如何实现请解释一下鸿蒙系统中的分布式软总线技术如何在鸿蒙操作系统中进行多设备协同开发…...
[C#] 「Unity」「游戏开发」如何在Canvas下的Button控件下实例化Image元素
在开发过程中,经常需要在UI上动态添加元素。特别是在Unity中,Canvas控件通常用来作为UI元素的容器,而Button控件则常用于交互。而在某些情况下,我们可能需要在一个Button下实例化一个Image元素,并确保它的位置与Button的位置保持一致。然而,简单地使用Button的坐标值往往…...
Nginx1.20.2-Linux-安装
文章目录 1.下载压缩包1.官网下载2.找到1.20.23.百度网盘 2.Linux安装1.搭建gcc环境2.上传到 /usr/local/nginx1.20.23.解压1.解压到当前目录2.删除压缩包 4.配置Nginx的编译路径1.进入nginx-1.20.22.执行内部的脚本,指定编译路径为/usr/local/nginx 5.编译并安装6.…...
Elasticsearch名词解释
文章目录 1.什么是Elasticsearch?2.什么是elastic stack(ELK)?3.什么是Lucene?4.什么是文档(document)?5.什么是词条(term)?6.什么是正向索引?7.什么是倒排索引?8.ES中的索引(index)9.映射(Mapping)10.DSL11.elastcisearch与my…...
Node项目——从0开始构建且共享至Gitee
从0开始构建一个Node.js项目涉及多个步骤,包括设置开发环境、初始化项目、安装依赖、编写代码以及配置版本控制等。以下是一个详细的步骤指南: 1. 安装Node.js和npm 首先,确保你已经安装了Node.js和npm(Node Package Manager&am…...
layui多图上传,tp8后端接收处理
环境:layui2.9.21\thinkphp8.1 前端代码: layui.use([upload, layer], function() {const upload layui.upload;const layer layui.layer;const $ layui.$;// 上传图片const uploadInstImage upload.render({elem: #uploadImage,url: /admin/demo/…...
QEMU网络配置简介
本文简单介绍下qemu虚拟机网络的几种配置方式。 通过QEMU的支持,常见的可以实现以下4种网络形式: 基于网桥(bridge)的虚拟网络。基于NAT(Network Addresss Translation)的虚拟网络。QEMU内置的用户模式网…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...
vue3 daterange正则踩坑
<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...
渗透实战PortSwigger靶场:lab13存储型DOM XSS详解
进来是需要留言的,先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码,输入的<>当成字符串处理回显到页面中,看来只是把用户输…...
