让AI帮我用java实现EasyExel读取图片—支持WPS嵌入图片
🌈 场景概述
java 小伙伴相信都使用 EasyExcel 以及 POI 库实现过 Excel 批量导入、导出功能,但只有部分人实现过 excel 导入带图片数据的场景。这个技术实现手段网上也有很多案例和demo,最常见的就是通过 XSSFPictureData
来实现。但是在 WPS 单元格嵌入图片场景下,本法无效。
本文讲解:如何利用 AI 在5分钟内实现用 Java EasyExcel 针对 WPS Excel 单元格嵌入图片的读取。
🎯 本节你将学到:
- 什么?凡是用过电脑的人99%都会数据库?
- Excel 真的是你平时见到的那个样子么?
- 用 AI 5分钟搞定Java EasyExcel 针对 WPS Excel 单元格嵌入图片的读取。
👇 视频版教程
(喜欢看视频教程就看视频,喜欢看图文教程就继续往下滑)
让AI帮我用java实现EasyExel读取图片(支持WPS嵌入图片),AI 5分钟搞定普通程序员5天工作量
👉🏻 笔记原文👉🏻 让AI帮我用java实现EasyExel读取图片—支持WPS嵌入图片 · 语雀
1、常规Excel读取图片的问题
最常见的通过 java + easyexcel 实现excel图片读取的方法,基本都是通过Apache POI
库XSS*
方法实现:
import org.apache.poi.xssf.usermodel.XSSFPictureData;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;// 假设你已经有了一个MultipartFile类型的Excel文件
XSSFWorkbook workbook = new XSSFWorkbook(file.getInputStream());
Sheet sheet = workbook.getSheetAt(0);
Map<String, XSSFPictureData> pictures = new HashMap<>();for (XSSFPictureData picture : workbook.getAllPictures()) {pictures.put(picture.getPackagePart().getPartName().getName(), picture);
}// 遍历sheet中的所有形状,找到图片并处理
for (POIXMLDocumentPart dr : sheet.getRelations()) {if (dr instanceof XSSFDrawing) {XSSFDrawing drawing = (XSSFDrawing) dr;for (XSSFShape shape : drawing.getShapes()) {if (shape instanceof XSSFPicture) {XSSFPicture picture = (XSSFPicture) shape;XSSFPictureData picData = pictures.get(picture.getPackagePart().getPartName().getName());// 处理图片数据,例如保存到服务器或数据库}}}
}
但是,本法对于 WPS 内嵌图片无效,因为 WPS 内嵌图片使用了 DISPIMG
函数,我们用上面的方法解析后,得到的只是函数信息,并非图片信息。如下图的 =DISPIMG("ID_79A9B2935BEA4B1B8836ECE25C09D573",1)
2、揭开 Excel 的神秘面纱
🧑🎓 你以为的Excel 🆚 真实的Excel
你以为的Excel
真实的Excel
📚 这里要讲一个知识,就是 Excel 可以被理解为一种简单的数据库:
因为它具有存储和组织数据的能力,并且可以通过公式、查询和宏等功能来处理数据。以下是一些将 Excel 视为数据库的理由:
- 数据存储:Excel 文件(.xlsx 或 .xls)可以存储大量的数据,类似于数据库中的表。
- 表格结构:Excel 中的工作表类似于数据库中的表,它们都有行和列的结构。
- 数据操作:Excel 提供了排序、筛选和查找等基本的数据操作功能,这些也是数据库管理系统(DBMS)中常见的操作。
- 数据查询:Excel 允许使用公式和函数(如 VLOOKUP、HLOOKUP、INDEX 和 MATCH)来查询和分析数据。
- 数据验证:Excel 提供数据验证功能,可以限制输入的数据类型,类似于数据库中的数据完整性约束。
- 宏和自动化:Excel 的宏功能可以用来自动化重复性的数据操作任务,类似于数据库中的存储过程和触发器。
然而,尽管 Excel 具有这些数据库的特性,它也有一些限制,使其不适合作为大型或复杂的数据库解决方案:
- 性能问题:对于大型数据集,Excel 的性能可能会下降,因为它不是为处理大规模数据而设计的。
- 数据安全和权限管理:Excel 在数据安全和权限管理方面不如专业的数据库管理系统强大。
- 数据一致性和完整性:Excel 缺乏数据库管理系统中的数据一致性和完整性约束。
- 多用户访问:Excel 文件通常不适合多用户同时访问和编辑,而数据库管理系统支持多用户并发访问。
- 扩展性和可伸缩性:随着数据量的增长,Excel 的扩展性和可伸缩性不如专业的数据库系统。
因此,虽然 Excel 可以被视为一种数据库,但它更适合于小型、简单的数据管理和分析任务。对于需要高性能、高安全性、复杂查询和大规模数据处理的场景,专业的数据库管理系统(如 MySQL、PostgreSQL、Oracle 等)会是更合适的选择。
前面我们截图中的“真实的Excel”是怎么回事?
其实很简单:
我们将 WPS 创建的.xlsx
文件后缀名改为.zip
后解压缩文件,得到的就是这个效果。
3、EasyExcel 读取WPS内嵌图片如何解决
3.1 先来找到图片位置以及绑定方式
根据前面的分析,我们可以看到 wps 的内嵌图片是通过DISPIMG
函数加载的,同时我们通过 Excel 神秘面纱中看到了其“Excel 数据的底层文件构造”,接下来我们找到这个函数与图片之间的逻辑关系,然后通过代码找到这个图片就行了。
- 文件:/xl/cellimages.xml
- 文件:/xl/_rels/cellimages.xml.rels
- 最后找到图片
3.2 让AI帮助我们用java实现
- 首先打开领航AGI聚合平台:领航AGI
- 点击 playground 进入 AI 工具
- 输入提示要求(第一次没有提到wps问题,所以生成的代码仍存在问题,这里不做演示,直接下一步)
- 告诉他wps内嵌图片问题,并把文件xml给AI
AI完整对话内容(点击查看全部)
3.3 看最终代码
这里面我后来把文件名称调整了下,方便后期大家检索
WPSExcelImportImgListener.java
package com.sinosoft.hanlin.jyy.handler;import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.sinosoft.hanlin.jyy.core.vo.common.WPSExcelImportImgDemoVo;
import lombok.Getter;import java.util.ArrayList;
import java.util.List;/*** @author 微信 LHYYH0001* @description: Excel带图片导入* 处理图片与数据行的关联。由于图片的对应顺序已在 ExcelImageExtractor 中提供,这里可以通过行号进行匹配。* @create 2024-11-05 09:07**/
@Getter
public class WPSExcelImportImgListener extends AnalysisEventListener<WPSExcelImportImgDemoVo> {private List<WPSExcelImportImgDemoVo> dataList = new ArrayList<>();@Overridepublic void invoke(WPSExcelImportImgDemoVo data, AnalysisContext context) {// 处理每一行的数据dataList.add(data);}@Overridepublic void doAfterAllAnalysed(AnalysisContext context) {// 所有数据解析完成后执行}
}
WPSExcelImportImgDemoVo.java
package com.sinosoft.hanlin.jyy.core.vo.common;import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;@Data
public class WPSExcelImportImgDemoVo {@ExcelProperty("标题")private String title;// // 将图片字段设置为 List<ImageData> 类型,用于接收多张图片
// @ExcelProperty(value = "图片")
// private List<ImageData> picture;@ExcelProperty(value = "图片")private String picture;
}
WPSExcelImportImgExtractor.java
package com.sinosoft.hanlin.jyy.handler;import org.apache.commons.io.IOUtils;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;public class WPSExcelImportImgExtractor {/*** 提取 Excel 中的图片,并返回单元格与图片路径的映射* <p>* WPS 的内置函数无法提取图片,需要使用第三方库解析XML文件。* WPS 内嵌图片会把图片做DISPIMG函数处理,如=DISPIMG("ID_9D6E8C240C8945178DFF238232B217BF",1)* 我们可以将.xlsx 文件后缀改成.zip后解压,即可看到* 在xl路径下的cellimages.xml文件中,可以看到函数中的id值* 并且在cellimages.xml.rels中可以看到函数与图片之间的关系,而图片就位于xl/media路径下** @param inputStream Excel 文件的输入流* @param outputDir 图片保存的目标目录* @return 单元格位置(如 A1)与图片路径的映射* @throws Exception 异常*/public Map<String, String> extractImages(InputStream inputStream, String outputDir) throws Exception {Map<String, String> cellImageMap = new HashMap<>();Map<String, String> relsMap = new HashMap<>();Map<String, byte[]> imagesData = new HashMap<>();// 创建目标目录File dir = new File(outputDir);if (!dir.exists()) {dir.mkdirs();}ZipInputStream zis = new ZipInputStream(inputStream);ZipEntry zipEntry;ByteArrayOutputStream baos = null;String sheetXml = null;String cellImagesXml = null;String cellImagesRelsXml = null;// 首先遍历所有的Zip条目,找到需要的XML和图片文件while ((zipEntry = zis.getNextEntry()) != null) {String entryName = zipEntry.getName();if ("xl/cellimages.xml".equals(entryName)) {baos = new ByteArrayOutputStream();IOUtils.copy(zis, baos);cellImagesXml = baos.toString("UTF-8");baos.close();} else if ("xl/_rels/cellimages.xml.rels".equals(entryName)) {baos = new ByteArrayOutputStream();IOUtils.copy(zis, baos);cellImagesRelsXml = baos.toString("UTF-8");baos.close();} else if (entryName.startsWith("xl/media/")) {byte[] imageBytes = IOUtils.toByteArray(zis);String imageName = entryName.substring("xl/media/".length());imagesData.put(imageName, imageBytes);}zis.closeEntry();}zis.close();// 解析cellimages.xml.rels,建立rId到图片文件名的映射if (cellImagesRelsXml != null) {DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();Document relsDoc = builder.parse(new ByteArrayInputStream(cellImagesRelsXml.getBytes("UTF-8")));NodeList relNodes = relsDoc.getElementsByTagName("Relationship");for (int i = 0; i < relNodes.getLength(); i++) {Element relElement = (Element) relNodes.item(i);String rId = relElement.getAttribute("Id");// e.g., "media/image1.png"String target = relElement.getAttribute("Target");relsMap.put(rId, target.substring("media/".length()));}}// 解析cellimages.xml,提取图片与单元格的关系if (cellImagesXml != null) {DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();Document cellImagesDoc = builder.parse(new ByteArrayInputStream(cellImagesXml.getBytes("UTF-8")));NodeList cellImageNodes = cellImagesDoc.getElementsByTagName("etc:cellImage");for (int i = 0; i < cellImageNodes.getLength(); i++) {Element cellImageElement = (Element) cellImageNodes.item(i);// 获取图片 name 属性,如 "ID_6C483737A6AC427DAA4E4974252FB8A8"Element picElement = (Element) cellImageElement.getElementsByTagName("xdr:pic").item(0);Element cNvPr = (Element) picElement.getElementsByTagName("xdr:cNvPr").item(0);// e.g., "ID_6C483737A6AC427DAA4E4974252FB8A8"String imageName = cNvPr.getAttribute("name");// 获取 r:embed 属性,如 "rId1"Element blipFill = (Element) picElement.getElementsByTagName("xdr:blipFill").item(0);Element blip = (Element) blipFill.getElementsByTagName("a:blip").item(0);// e.g., "rId1"String rId = blip.getAttribute("r:embed");// e.g., "image1.png"String imageFileName = relsMap.get(rId);// TODO: 根据需要确定图片对应的单元格位置// 由于cellimages.xml中没有直接包含单元格位置的信息,这里需要通过其他途径获取// 例如,可以通过图片的位置信息(如x, y坐标)与单元格的位置对应// 但是这需要解析更多的XML信息,这里假设图片对应的顺序与数据行对应// 保存图片到本地byte[] imageBytes = imagesData.get(imageFileName);if (imageBytes != null) {String savedImagePath = outputDir + File.separator + imageFileName;FileOutputStream fos = new FileOutputStream(savedImagePath);fos.write(imageBytes);fos.close();// 由于缺少单元格位置信息,这里需要自定义逻辑进行映射// 例如,可以将图片顺序与数据行顺序对应// 这里将图片名存储到一个列表中,后续与数据行进行关联cellImageMap.put(imageName, savedImagePath);}}}return cellImageMap;}
}
ImportImgDemoApi.java
// ImportImgDemoApi.java
package com.sinosoft.hanlin.jyy.core.api;import com.alibaba.excel.EasyExcel;
import com.sinosoft.hanlin.jyy.annotation.NoAuth;
import com.sinosoft.hanlin.jyy.core.vo.common.WPSExcelImportImgDemoVo;
import com.sinosoft.hanlin.jyy.handler.WPSExcelImportImgExtractor;
import com.sinosoft.hanlin.jyy.handler.WPSExcelImportImgListener;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.util.List;
import java.util.Map;/*** 数据+图片导入*/
@Slf4j
@RestController
@RequestMapping("/easy")
public class ImportImgDemoApi {/*** 从输入流中读取 Excel 文件并解析数据,包括图片* @author 微信 LHYYH0001** @param filePath Excel 文件* @return 包含解析后数据的列表*/@ApiOperation(value = "Excel导入带图片demo", notes = "Excel导入带图片demo", produces = MediaType.APPLICATION_JSON_VALUE)@PostMapping(value = "/import", produces = MediaType.APPLICATION_JSON_VALUE)@NoAuthpublic List<WPSExcelImportImgDemoVo> importExcel(@RequestParam("filePath") MultipartFile filePath, HttpServletResponse httpServletResponse) throws Exception {// 创建监听器WPSExcelImportImgListener listener = new WPSExcelImportImgListener();// 获取文件输入流InputStream inputStreamForData = filePath.getInputStream();// 使用 EasyExcel 读取数据EasyExcel.read(inputStreamForData, WPSExcelImportImgDemoVo.class, listener).sheet().doRead();List<WPSExcelImportImgDemoVo> dataList = listener.getDataList();// 重置输入流以供图片提取InputStream inputStreamForImages = filePath.getInputStream();// 提取图片并保存WPSExcelImportImgExtractor extractor = new WPSExcelImportImgExtractor();// 修改为您希望保存图片的目录String imageOutputDir = "/Users/javastarboy/Desktop/京东自营/";Map<String, String> cellImageMap = extractor.extractImages(inputStreamForImages, imageOutputDir);// 遍历数据并关联图片// 假设图片的顺序与数据行的顺序一致int imageIndex = 0;for (int i = 0; i < dataList.size(); i++) {WPSExcelImportImgDemoVo vo = dataList.get(i);// 获取对应的图片String imagePath = null;if (i < cellImageMap.size()) {imagePath = (String) cellImageMap.values().toArray()[i];// 将图片路径设置到实体类vo.setPicture(imagePath);log.info("图片 {} 已关联到标题 {}", imagePath, vo.getTitle());}}// 关闭输入流inputStreamForImages.close();// 返回数据列表return dataList;}
}
验证一下
请求后,excel的图片会存储在 imageOutputDir
路径下。
存储逻辑可以根据你的业务逻辑做对应调整,上面imageOutputDir
只是demo演示
分享不易,点赞、关注,支持下哦~
相关文章:
让AI帮我用java实现EasyExel读取图片—支持WPS嵌入图片
🌈 场景概述 java 小伙伴相信都使用 EasyExcel 以及 POI 库实现过 Excel 批量导入、导出功能,但只有部分人实现过 excel 导入带图片数据的场景。这个技术实现手段网上也有很多案例和demo,最常见的就是通过 XSSFPictureData 来实现。但是在 W…...
C# 实现对指定句柄的窗口进行键盘输入的实现
在C#中实现对指定句柄的窗口进行键盘操作,可以通过多种方式来实现。以下是一篇详细的指南,介绍如何在C#中实现这一功能。 1. 使用Windows API函数 在C#中,我们可以通过P/Invoke调用Windows API来实现对指定窗口的键盘操作。以下是一些关键的…...
深度学习之卷积问题
1 卷积在图像中有什么直观作用 在卷积神经网络中,卷积常用来提取图像的特征,但不同层次的卷积操作提取到的特征类型是不相同的,特征类型粗分如表1所示。 表1 卷积提取的特征类型 卷积层次特征类型浅层卷积边缘特征中层卷积局部特征深…...
yum安装zabbix5.0升级php到74的办法
【背景】 公司时不时有扫描漏洞,之前发现了php漏洞,因开启防火墙,限定IP+端口,暂时躲过升级;现在,老话重提,开启了KPI考核,躲是躲不过去的了,升级吧 【难题】 服务器为centos7,因操作系统问题,只能安装zabbix5.0。当时图省力,官网的办法,都是yum安装,很是简便。…...
JavaWeb合集23-文件上传
二十三 、 文件上传 实现效果:用户点击上传按钮、选择上传的头像,确定自动上传,将上传的文件保存到指定的目录中,并重新命名,生成访问链接,返回给前端进行回显。 1、前端实现 vue3AntDesignVue实现 <tem…...
当AI遇上时尚:未来的衣橱会由机器人来打理吗?
内容概要 在当今这个快速发展的时代,人工智能与时尚的结合正在逐渐改写我们对衣橱管理的认知。传统的衣橱管理常常面临着空间不足、穿搭单调及库存过多等挑战,许多人在挑选服饰时难以做出决策。然而,随着技术的进步,智能推荐和自…...
【初阶数据结构篇】二叉树OJ题
文章目录 须知 💬 欢迎讨论:如果你在学习过程中有任何问题或想法,欢迎在评论区留言,我们一起交流学习。你的支持是我继续创作的动力! 👍 点赞、收藏与分享:觉得这篇文章对你有帮助吗࿱…...
Windows系统中Oracle VM VirtualBox的安装
一.背景 公司安排了师带徒,环境搭建问题一直是初级程序员头疼的事情,我记录一下这些基础的内容,方便初学者。大部分开发者的机器还是windows系统,所以写了怎么安装。 二.版本信息及 操作系统:windows11 家庭版…...
go语言使用总结(持续更新)
整理后的内容如下: 1. 先了解函数签名,再了解传入参数以及调用 函数签名是函数的声明部分,包括函数名、参数列表和返回值列表。理解函数签名是理解函数行为的第一步,尤其是在了解参数类型、参数数量和返回值类型等方面。通过了解…...
如何在Android中自定义property
在Android中创建自定义的属性(Android property)通常用于调试、性能调优或传递应用和系统之间的信息。 以下是如何在Android中创建和使用自定义属性的步骤: 1. 定义属性 在Android中,属性是以“属性名称属性值”形式定义的键值对…...
机器学习5_支持向量机_原问题和对偶问题——MOOC
目录 原问题与对偶问题的定义 定义该原问题的对偶问题如下 在定义了函数 的基础上,对偶问题如下: 综合原问题和对偶问题的定义得到: 定理一 对偶差距(Duality Gap) 强对偶定理(Strong Duality Theo…...
索引的细节
目录 什么是线性 搜索算法? 算法:二进制搜索算法 二进制搜索如何工作? 什么是二叉排序树? 构建二叉排序树 什么是AVL树? AVL树的性能分析 什么是线性 搜索算法? 线性搜索是一种非常简单的搜索算法。在…...
LeetCode 540.有序数组中的单一元素
思路一:hash,键存入元素,值存入次数,然后遍历,不是最优解 思路二:二分查找 假设数组为 [1, 1, 2, 2, 3, 4, 4],其中唯一出现一次的元素是 3。在一个有序数组中,如果没有唯一的元素&…...
【图文】【DIY便签】如何自行编译OPENCV使用动态库
1 去官网下载安装包和源码 下面红色圈中的是源码,绿色圈中的是安装包: 2 配置工具链 安装过程不说了,教程到处都是。编译的话使用CMAKE,配置如下: 上面两个路径分别是: 源码目录编译生成的文件放置的位…...
WordPress文章自动提交Bing搜索引擎:PHP推送脚本教程
随着网站SEO优化的重要性日益增加,将新发布的内容快速提交到搜索引擎显得尤为重要。尤其对于Bing站长平台,自动化推送能让Bing尽快发现和索引我们网站的新内容。本文将详细介绍如何通过PHP脚本自动推送WordPress当天发布的文章至Bing站长平台,确保新文章被Bing及时收录。 前…...
C++题目分享
嗨嗨嗨,我又来更新这个系列了,很久没更新了。让我们看一看有那些有趣的题目: 题目一: 1.以单链表作为存储结构,实现线性表的就地逆置(提示,就地逆置:在不使用额外的数据结构或空间…...
【Spring 框架】初识 Spring
文章目录 前言1. 什么是 Spring2. 什么是 Maven3. 第一个 SpringBoot 项目4. 项目讲解结语 前言 在前面我们一起学习了 JavaSE 的基础知识,随着学习的深入,我们也将逐步介绍 JavaEE 的内容,像 Spring 框架,Mybatis 等等。在本篇博…...
链表(Linkedlist)
序言 我们都了解链表是一种数据的存储结构,在Java使用中逻辑与c,c语言数据结构别无二致,但主要由于Java中不存在指针的说法,从而导致在实现过程中的代码不同,所以在学习的过程中我们无需过于担心,逻辑都是…...
信息安全工程师(79)网络安全测评概况
一、定义与目的 网络安全测评是指参照一定的标准规范要求,通过一系列的技术、管理方法,获取评估对象的网络安全状况信息,并对其给出相应的网络安全情况综合判定。其对象主要为信息系统的组成要素或信息系统自身。网络安全测评的目的是为了提高…...
保研考研机试攻略:python笔记(3)
🐨🐨🐨11sort 与 sorted 区别 sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。 list 的 sort 方法返回的是对已经存在的列表进行操作, 无返回值,而内建函数 sorted 方法返回的…...
刘卫国MATLAB程序设计与应用课后答案PDF第三版
刘卫国《MATLAB程序设计与应用》(第三版)是对普通高等教育“十一五”国家级规划教材《MATLAB程序设计与应用》(第二版)的一次全面修订。全书总体保持第二版原有体系结构,但根据技术发展和应用的需要扩充了许多新内容。全书强调数学方法、算法…...
【鉴权】Web 会话管理:Cookie、Session 和 Token 深度对比
目录 引言一、Cookie二、Session三、Token (JWT)四、总结对比五、Token、Session 和 Cookie 的选择总结 引言 在现代 Web 开发中,Cookie、Session 和 Token 都是用于用户身份验证和状态管理的常见技术。每种技术有其特定的应用场景和优缺点,理解它们之间…...
ArkTS--应用状态
应用状态 应用状态相关的内容需要使用模拟器或真机调试,在API 11开始也支持preview 1.LocalStorage LocalStorage是页面级的UI状态存储,通过Entry装饰器接收参数可以在页面内共享数据 1.1 页面内共享数据 import {MyUser} from ../model/MyUser //用户对…...
yolov8涨点系列之引入CBAM注意力机制
文章目录 YOLOv8 中添加注意力机制 CBAM 具有多方面的好处特征增强与选择通道注意力方面空间注意力方面 提高模型性能计算效率优化: yolov8增加CBAM具体步骤CBAM代码(1)在__init.pyconv.py文件的__all__内添加‘CBAM’(2)conv.py文件复制粘贴CBAM代码(3)修改task.py…...
java标准JavaBean类
1. public class test {//属性private String username;private String password;private String email;private String gender;private int age;//快捷键//altinsert//altFninsert//插件PTG1秒生成标准Javabean //插件ptg c//空参public test() {}//全部参数…...
MATLAB界面设计全攻略:从基础入门到高级应用
引言 MATLAB作为一种功能强大的科学计算软件,不仅可以进行各种复杂的数值计算,还可以通过其图形用户界面设计工具(GUI)为用户提供可视化操作界面。本教程旨在详细介绍MATLAB界面设计的全过程,为初学者提供从入门到精通…...
JavaScript API部分知识点
一、Dom获取&属性操作 (一)、 Web API 基本认知 1、变量声明 const 声明的值不能更改,而且const声明变量的时候需要里面进行初始化 但是对于引用数据类型,const声明的变量,里面存的不是 值,是 地址…...
钉钉调试微应用整理2
第一步 新建应用 钉钉开放平台](https://open-dev.dingtalk.com/) 去新增应用 第二步 配置应用信息 把本地代码运行起来,并设置本地地址 第三步 在本地代码添加调试命令 这里有2中添加方式 哪一种都可以 方式一: index.html页面中 <!DOCTYPE h…...
C++初级入门(1)
第一部分 基础语法入门 一、基础 1、变量与常量 1、变量 变量存在的意义:方便管理内存空间 2、常量 用于记录程序中不可更改的数据 #define 常量名 常量值 const 数据类型 常量名常量值 ; 2、数据类型 1、整型 short 2字节 int 4字节 long Wi…...
group_concat配置影响程序出bug
在 ThinkPHP 5 中,想要临时修改 MySQL 数据库的 group_concat_max_len 参数,可以使用 原生 SQL 执行 来修改该值。你可以通过 Db 类来执行 SQL 语句,从而修改会话(Session)级别的变量。 步骤 设置 group_concat_max_l…...
小程序 wordpress打包/深圳网络推广收费标准
题目链接:https://ac.nowcoder.com/acm/contest/886/C 解题思路: 想到类似dp的思路,用cnt[fa]记录父节点不包括自身的回文子串总数,那么 当前的总数可以分为3部分 cnt[now] cnt[fa] 1(父节点本身) 当前在父节点串两边新添…...
wordpress 登录小工具/seo建站系统
Linux系统为每一个进程维护一个单独的地址空间,包含了进程的内存分区即:代码段、数据、运行时堆栈,共享库等部分。 【实验与演示】 堆与全局变量的比较: struct A {char ch;int n; }; A a; A b; int main() {A* ptrnew A;cout&…...
成都科技网站建设联系/重庆百度快照优化
1. 前言 自1994年由爱立信推出至今,蓝牙技术已经走过了20个岁月。从最初的Bluetooth V1.0,到Bluetooth V4.0(最新的为V4.1,2013年底发布),经历了近9个版本的修订后,发展为当前的状况。 说实话&a…...
时时彩五星做号网站/简单制作html静态网页
注意: 父pom中一定要写版本号才行!!!! 1、< packaging> <packaging>pom</packaging>在父级项目中的pom.xml文件使用的packaging配置一定为pom。父级的pom文件只作项目的子模块的整合,在…...
环保网站可以做哪些内容/手机系统优化
Jenkins Docker 1. CI/CD概述与流程 2. 部署Git代码版本仓库并上传Java项目源代码 3. 部署Harbor镜像仓库 4. 部署Docker 5. 部署Jenkins(配置JDK和Maven环境) 6. Jenkins 流水线脚本 7. Jenkins 参数化构建 8. 发布测试...
wordpress网站 添加微信/如何开展网络营销
质数:在大于1的整数中,如果只包含1和本身这两个约数,那么就是素数 试除法: 时间复杂度 O(sqrt(n)) 代码: static boolean prime(int n){if(n < 2) return false;for(int i 2; i < n/i; i){//因为i能被整除&am…...