C# 添加、替换、提取、或删除Excel中的图片
在Excel中插入与数据相关的图片,能将关键数据或信息以更直观的方式呈现出来,使文档更加美观。此外,对于已有图片,你有事可能需要更新图片以确保信息的准确性,或者将Excel 中的图片单独保存,用于资料归档、备份或在其他项目中重复使用。
本文将介绍如何在.NET 程序中通过C# 在Excel中插入图片,或者替换、提取、删除Excel中的图片。
本文需要用到一个免费库 Free Spire.XLS for .NET。该库可以在Visual > Studio > NuGet程序包管理器中搜索 “FreeSpire.XLS” 来安装。也可以通过下列链接下载产品包后手动添加引用。
https://www.e-iceblue.cn/Downloads/Free-Spire-XLS-NET.html
C# 在Excel中插入图片
免费Spire.XLS库提供的 Worksheet.Pictures.Add(int topRow, int leftColumn, Image image) 方法可在工作表指定单元格中插入图片,并返回一个 ExcelPicture 对象。然后你可以通过ExcelPicture类下的各属性设置图片的宽度、高度、与单元格边框的距离等。
C#代码:
using Spire.Xls;namespace InsertImageInExcel
{class Program{static void Main(string[] args){// 创建工作簿Workbook workbook = new Workbook();// 获取第一张工作表Worksheet sheet = workbook.Worksheets[0];// 在指定单元格中插入图片(此处为第一行第二列,即B1单元格)ExcelPicture pic = sheet.Pictures.Add(1, 2, "示例.png");// 设置图片宽高度pic.Width = 120;pic.Height = 120;// 调整图片所在位置的列宽和行高sheet.Columns[1].ColumnWidth = 20;sheet.Rows[0].RowHeight = 110;// 设置单元格边框与图片之间的距离pic.LeftColumnOffset = 90;pic.TopRowOffset = 20;// 保存Excel文件workbook.SaveToFile("插入图片.xlsx", ExcelVersion.Version2016);}}
}

C# 替换Excel中的图片
要替换Excel中的图片,我们可以先通过 Worksheet.Pictures[index] 属性获取工作表中指定的图片,然后加载一张新图片并将其赋值给 ExcelPicture 的 Picture 属性,从而完成图片的替换操作。
C#代码:
using Spire.Xls;
using Spire.Xls.Collections;
using System.Drawing;namespace ReplacePictureinExcel
{class Program{static void Main(string[] args){// 加载Excel文档Workbook workbook = new Workbook();workbook.LoadFromFile("插入图片.xlsx");// 获取第一张工作表Worksheet sheet = workbook.Worksheets[0];// 取工作表中第一张图片ExcelPicture pic = sheet.Pictures[0];// 替换图片pic.Picture = Image.FromFile("pic.jpg");// 保存文档workbook.SaveToFile("替换图片.xlsx", ExcelVersion.Version2016);}}
}

C# 提取Excel中的图片
提取Excel中的图片的实现思路为先遍历工作表中的所有图片,然后通过 ExcelPicture.Picture.Save() 方法将每一张图片保存到指定的文件路径。
C#代码:
using Spire.Xls;namespace ExtractImages
{class Program{static void Main(string[] args){// 加载Excel文档Workbook workbook = new Workbook();workbook.LoadFromFile("图标.xlsx");// 获取第一张工作表Worksheet sheet = workbook.Worksheets[0];// 遍历工作表中所有图片for (int i = sheet.Pictures.Count - 1; i >= 0; i--){// 提取图片保存到指定路径ExcelPicture picture = sheet.Pictures[i];picture.Picture.Save(string.Format("提取图片\\图片-{0}.png", i));}}}
}

C# 删除Excel中的图片
对于Excel中的不相关或错误图片,我们可以使用 Worksheet.Pictures[index].Remove() 方法通过索引删除指定图片。要删除所有图片,可以遍历每张图片然后删除。
C#代码:
using Spire.Xls;namespace DeleteImages
{class Program{static void Main(string[] args){// 加载Excel文档Workbook workbook = new Workbook();workbook.LoadFromFile("图标.xlsx");// 获取第一张工作表Worksheet sheet = workbook.Worksheets[0];// 遍历每一张图片并删除for (int i = sheet.Pictures.Count - 1; i >= 0; i--){sheet.Pictures[i].Remove();}// 保存文档workbook.SaveToFile("删除图片.xlsx", ExcelVersion.Version2016);}}
}

除了操作Excel工作表中的图片外,免费库Free Spire.XLS for .NET 还支持操作多其他种元素,如形状、图表、超链接、水印等。更多功能教程可查看:Spire.XLS for .NET 中文教程
相关文章:
C# 添加、替换、提取、或删除Excel中的图片
在Excel中插入与数据相关的图片,能将关键数据或信息以更直观的方式呈现出来,使文档更加美观。此外,对于已有图片,你有事可能需要更新图片以确保信息的准确性,或者将Excel 中的图片单独保存,用于资料归档、备…...
AI大模型开发原理篇-5:循环神经网络RNN
神经概率语言模型NPLM也存在一些明显的不足之处:模型结构简单,窗口大小固定,缺乏长距离依赖捕捉,训练效率低,词汇表固定等。为了解决这些问题,研究人员提出了一些更先进的神经网络语言模型,如循环神经网络、…...
赛博算卦之周易六十四卦JAVA实现:六幺算尽天下事,梅花化解天下苦。
佬们过年好呀~新年第一篇博客让我们来场赛博算命吧! 更多文章:个人主页 系列文章:JAVA专栏 欢迎各位大佬来访哦~互三必回!!! 文章目录 #一、文化背景概述1.文化起源2.起卦步骤 #二、卦象解读#三、just do i…...
iperf 测 TCP 和 UDP 网络吞吐量
注:本文为 “iperf 测网络吞吐量” 相关文章合辑。 未整理去重。 使用 iperf3 监测网络吞吐量 Tom 王 2019-12-21 22:23:52 一 iperf3 介绍 (1.1) iperf3 是一个网络带宽测试工具,iperf3 可以擦拭 TCP 和 UDP 带宽质量。iperf3 可以测量最大 TCP 带宽…...
内外网文件摆渡企业常见应用场景和对应方案
在如今的企业环境中,内外网文件摆渡的需求越来越常见,也变得越来越重要。随着信息化的不断推进,企业内部和外部之间的数据交换越来越频繁,如何安全、高效地进行文件传输成了一个关键问题。今天,咱就来聊聊内外网文件摆…...
【微服务与分布式实践】探索 Sentinel
参数设置 熔断时长 、最小请求数、最大RT ms、比例阈值、异常数 熔断策略 慢调⽤⽐例 当单位统计时⻓内请求数⽬⼤于设置的最⼩请求数⽬,并且慢调⽤的⽐例⼤于阈值,则接下来的熔断时⻓内请求会⾃动被熔断 异常⽐例 当单位统计时⻓内请求数⽬⼤于设置…...
论文阅读(十五):DNA甲基化水平分析的潜变量模型
1.论文链接:Latent Variable Models for Analyzing DNA Methylation 摘要: 脱氧核糖核酸(DNA)甲基化与细胞分化密切相关。例如,已经观察到肿瘤细胞中的DNA甲基化编码关于肿瘤的表型信息。因此,通过研究DNA…...
Android View 的事件分发机制解析
前言:当一个事件发生时(例如触摸屏幕),事件会从根View(通常是Activity的布局中的最顶层View)开始,通过一个特定的路径传递到具体的View,这个过程涉及到三个关键的阶段:事…...
内容检索(2025.01.30)
随着创作数量的增加,博客文章所涉及的内容越来越庞杂,为了更为方便地阅读,后续更新发布的文章将陆续在此汇总并附上原文链接,感兴趣的小伙伴们可持续关注文章发布动态! 博客域名:http://my-signal.blog.cs…...
【25美赛A题-F题全题目解析】2025年美国大学生数学建模竞赛(MCM/ICM)解题思路|完整代码论文集合
我是Tina表姐,毕业于中国人民大学,对数学建模的热爱让我在这一领域深耕多年。我的建模思路已经帮助了百余位学习者和参赛者在数学建模的道路上取得了显著的进步和成就。现在,我将这份宝贵的经验和知识凝练成一份全面的解题思路与代码论文集合…...
新鲜速递:DeepSeek-R1开源大模型本地部署实战—Ollama + MaxKB 搭建RAG检索增强生成应用
在AI技术快速发展的今天,开源大模型的本地化部署正在成为开发者们的热门实践方向。最火的莫过于吊打OpenAI过亿成本的纯国产DeepSeek开源大模型,就在刚刚,凭一己之力让英伟达大跌18%,纳斯达克大跌3.7%,足足是给中国AI产…...
H264原始码流格式分析
1.H264码流结构组成 H.264裸码流(Raw Bitstream)数据主要由一系列的NALU(网络抽象层单元)组成。每个NALU包含一个NAL头和一个RBSP(原始字节序列载荷)。 1.1 H.264码流层次 H.264码流的结构可以分为两个层…...
Xposed-Hook
配置 Xposed 模块的 AndroidManifest.xml: <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"package"your.package.name"><applicationandr…...
【PyTorch】6.张量形状操作:在深度学习的 “魔方” 里,玩转张量形状
目录 1. reshape 函数的用法 2. transpose 和 permute 函数的使用 4. squeeze 和 unsqueeze 函数的用法 5. 小节 个人主页:Icomi 专栏地址:PyTorch入门 在深度学习蓬勃发展的当下,PyTorch 是不可或缺的工具。它作为强大的深度学习框架&am…...
实现基础的shell程序
1. 实现一个基础的 shell 程序,主要完成两个命令的功能 cp 和 ls 1.1.1. cp 命令主要实现: ⽂件复制⽬录复制 1.1.2. ls 命令主要实现: ls -l 命令的功能 1.1. 在框架设计上,采⽤模块化设计思想,并具备⼀定的可扩…...
【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.18 逻辑运算引擎:数组条件判断的智能法则
1.18 逻辑运算引擎:数组条件判断的智能法则 1.18.1 目录 #mermaid-svg-QAFjJvNdJ5P4IVbV {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-QAFjJvNdJ5P4IVbV .error-icon{fill:#552222;}#mermaid-svg-QAF…...
【Leetcode 每日一题】350. 两个数组的交集 II
问题背景 给你两个整数数组 n u m s 1 nums_1 nums1 和 n u m s 2 nums_2 nums2,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值…...
一文读懂fgc之cms
一文读懂 fgc之cms-实战篇 1. 前言 线上应用运行过程中可能会出现内存使用率较高,甚至达到95仍然不触发fgc的情况,存在内存打满风险,持续触发fgc回收;或者内存占用率较低时触发了fgc,导致某些接口tp99,tp…...
集合的奇妙世界:Python集合的经典、避坑与实战
集合的奇妙世界:Python集合的经典、避坑与实战 内容简介 本系列文章是为 Python3 学习者精心设计的一套全面、实用的学习指南,旨在帮助读者从基础入门到项目实战,全面提升编程能力。文章结构由 5 个版块组成,内容层层递进&#x…...
知识库管理系统助力企业实现知识共享与创新价值的转型之道
内容概要 知识库管理系统(KMS)作为现代企业知识管理的重要组成部分,其定义涵盖了系统化捕捉、存储、共享和应用知识的过程。这类系统通过集成各种信息来源,不仅为员工提供了一个集中式的知识平台,还以其结构化的方式提…...
SpringBoot 日志与配置文件
SpringBoot 配置文件格式 Properties 格式 Component ConfigurationProperties(prefix "person") //和配置文件person前缀的所有配置进行绑定 Data public class Person {private String name;private Integer age;private Date birthDay;private Boolean like;pr…...
【C语言】static关键字的三种用法
【C语言】static关键字的三种用法 C语言中的static关键字是一个存储类说明符,它可以用来修饰变量和函数。static关键字的主要作用是控制变量或函数的生命周期和可见性。以下是static关键字的一些主要用法和含义: 局部静态变量: 当static修饰…...
Qt中Widget及其子类的相对位置移动
Qt中Widget及其子类的相对位置移动 最后更新日期:2025.01.25 下面让我们开始今天的主题… 一、开启篇 提出问题:请看上图,我们想要实现的效果是控件黄色的Widge(m_infobarWidget)t随着可视化窗口(m_glWidge…...
【Node.js】Koa2 整合接口文档
部分学习来源:https://blog.csdn.net/qq_38734862/article/details/107715579 依赖 // koa2-swagger-ui UI视图组件 swagger-jsdoc 识别写的 /***/ 转 json npm install koa2-swagger-ui swagger-jsdoc --save配置 config\swaggerConfig.js const Router requir…...
Docker/K8S
文章目录 项目地址一、Docker1.1 创建一个Node服务image1.2 volume1.3 网络1.4 docker compose 二、K8S2.1 集群组成2.2 Pod1. 如何使用Pod(1) 运行一个pod(2) 运行多个pod 2.3 pod的生命周期2.4 pod中的容器1. 容器的生命周期2. 生命周期的回调3. 容器重启策略4. 自定义容器启…...
leetcode——排序链表(java)
给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 示例 1: 输入:head [4,2,1,3] 输出:[1,2,3,4] 示例 2: 输入:head [-1,5,3,4,0] 输出:[-1,0,3,4,5] 示例 3: …...
告别重启!Vue CLI 动态代理配置实战:实现热更新与灵活配置
在前端开发中,代理配置是解决跨域问题的常见手段。尤其是在使用 Vue CLI 进行开发时,我们经常需要通过 devServer.proxy 来配置代理。然而,传统的代理配置通常是静态的,修改后需要重启开发服务器,这在频繁调整代理配置…...
基于springboot的校园部门资料管理系统
博主介绍:java高级开发,从事互联网行业多年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了多年的设计程序开发,开发过上千套设计程序,没有什么华丽的语言,只有实…...
数据结构初阶之堆的介绍与堆的实现
一、堆的概念与结构 如果有一个关键码的集合,把它的所有元素按完全二叉树的顺序存储在一个一维数组中,并满足:,则称为小堆(或大堆)。 将根结点最大的堆叫做最大堆或大根堆,根结点最小的堆叫做…...
Day29(补)-【AI思考】-精准突围策略——从“时间贫困“到“效率自由“的逆袭方案
文章目录 精准突围策略——从"时间贫困"到"效率自由"的逆袭方案**第一步:目标熵减工程(建立四维坐标)** 与其他学习方法的结合**第二步:清华方法本土化移植** 与其他工具对比**~~第三步:游戏化改造…...
