python_excel批量插入图片

提取excel的指定列的值的后4位(数值),在其它列名的单元格中,批量嵌入与该数值匹配的图片(未实现居中),每间隔4行处理一次(合并过单元格)。

import pandas as pd
from openpyxl import load_workbook
from openpyxl.drawing.image import Image
from openpyxl.utils import get_column_letter
import os# Excel文件路径
excel_file = r'E:\第二批400平台命名及台账信息_20250210_1.xlsx'
# 工作表名称
sheet_name = '电缆一班'
# 源数据列名(用于截取后四位的列)
source_column = '南网设备ID'# 图片文件夹路径
image_folder = r'E:\现场图片'
# 每隔多少行处理一次
interval = 4
# 图片插入时相对于单元格边缘的偏移量(可根据需要调整)
offset_x = 5
offset_y = 1# 读取Excel文件
df = pd.read_excel(excel_file, sheet_name=sheet_name)# 加载Excel工作簿和工作表
wb = load_workbook(excel_file)
ws = wb[sheet_name]# V/L-位置,W/M-编号
target_column_letter = 'V'# 获取工作表的默认行高和列宽(用于调整图片大小)
default_row_height = ws.row_dimensions[1].height  # 假设第一行的行高代表默认行高
default_col_width = ws.column_dimensions[target_column_letter].width  # 获取目标列的默认列宽# 由于openpyxl不支持直接获取图片的像素尺寸,我们需要假设一个图片尺寸或预先知道它
# 这里我们假设图片将被缩放到适合单元格的大小(可能需要根据实际情况调整)
image_width = default_col_width * 5  # 假设图片宽度是列宽的10倍(这个比例可能需要调整)
image_height = default_row_height * 4  # 假设图片高度是行高的8倍(这个比例也可能需要调整)# 遍历DataFrame,每隔interval行处理一次
for i in range(0, len(df), interval):# 获取当前行的数据row_data = df.iloc[i]# 截取源列值的后四位code = str(row_data[source_column])[-4:]# 构建图片文件名(假设图片文件名与截取的后四位代码匹配,扩展名为.jpg)# V/L-位置,需要加'-1',W/M-编号无需image_filename = f"{code}-1.jpg"image_path = os.path.join(image_folder, image_filename)# 检查图片是否存在if os.path.exists(image_path):# 计算图片插入的Excel行号(从1开始)excel_row = i + 2  # DataFrame索引从0开始,Excel行号从1开始,且第一行是标题行,所以要加2# 创建Image对象img = Image(image_path)# 设置图片大小img.width = image_widthimg.height = image_height# 计算图片的锚点(由于我们要让图片看起来像是嵌入在单元格中,所以锚点需要稍微偏移以适应单元格边框)# 注意:这里的偏移量可能需要根据你的Excel样式和图片大小进行调整# openpyxl的anchor属性接受一个字符串,格式为'{列号}{行号}+{x偏移}+{y偏移}',但openpyxl不直接支持这种带偏移的anchor格式# 因此,我们需要手动计算图片左上角的坐标,并使用add_image时指定top和left属性(但openpyxl的Image对象没有top和left属性,所以我们使用anchor的变通方法)# 不过,为了简化,这里我们仅使用anchor的基本功能,并将图片放置在单元格的左上角附近img.anchor = f'{target_column_letter}{excel_row}'# 由于openpyxl的Image对象不直接支持设置top和left属性,我们需要通过调整anchor字符串中的行号和列号来模拟偏移# 但这种方法并不精确,且依赖于单元格的大小和图片的缩放比例# 一种更精确的方法是使用Lxml库直接操作XML,但这超出了本示例的范围# 在这里,我们简单地将图片放置在单元格的左上角,并可能需要在Excel中手动调整图片位置以使其看起来像是嵌入的# 为了模拟嵌入效果,我们可以将图片插入到前一个单元格的右侧(或根据需要调整)# 但由于我们已经指定了目标列,这里我们直接插入到目标列# 插入图片到工作表中# 注意:由于anchor的限制和openpyxl的API,图片可能不会精确地放置在单元格内部# 你可能需要在Excel中手动调整图片的大小和位置ws.add_image(img)else:print(f"Image not found for code {code} in row {i + 2} (Excel row number).")# 保存修改后的Excel文件(注意:由于图片是作为对象附加的,而不是真正嵌入到单元格中,所以保存后可能需要在Excel中手动调整)
wb.save(excel_file)
print('done!')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/19720.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DeepSeek 助力 Vue 开发:打造丝滑的颜色选择器(Color Picker)

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…

Jenkinsdebug:遇到ERROR: unable to select packages:怎么处理

报错信息: 报错信息解释: musl-1.2.5-r0 和 musl-dev-1.2.5-r1: 这里说明 musl-dev 需要一个特定版本的 musl,即 musl1.2.5-r1,但是当前版本的 musl(1.2.5-r0)并不满足这个条件。版本冲突: 当尝试安装新…

并查集基础+优化(下标从0开始)

#include<iostream> #include<algorithm> #include<vector> using namespace std; const int N 1e510; int n,m; int fa[N]; void set(int u,int v) {fa[v] u; } int find(int arr[],int i) {while(arr[i] ! -1){i arr[i]; } return i;//返回的是这个节点…

STM32创建静态库lib

创建静态库lib 1. 新建工程1.1 创建工程文件夹1.2 编写用户相关代码1.2.1 stm32f4xx_it.h1.2.2 stm32f4xx_it.c1.2.3 标准库配置&#xff1a;stm32f4xx_conf.h1.2.4 HAL库的配置&#xff1a;stm32f4xx_hal_conf.h1.2.5 LL库配置&#xff1a;stm32f4xx_ll_conf.h 1.3 移植通用文…

CV -- 基于GPU版显卡CUDA环境+Pycharm YOLOv8 检测

目录 下载 CUDA 下载 cuDNN 下载 anaconda 安装 PyTorch pycharm 搭配 yolo 环境并运行 阅读本文须知&#xff0c;需要电脑中有 Nvidia 显卡 下载 CUDA 打开 cmd &#xff0c;输入 nvidia-smi &#xff0c;查看电脑支持 CUDA 版本&#xff1a; 我这里是12.0&#xff0c;进入…

MATLAB图像处理:图像分割方法

图像分割将图像划分为具有特定意义的子区域&#xff0c;是目标检测、医学影像分析、自动驾驶等领域的核心预处理步骤。本文讲解阈值分割、边缘检测、区域生长、聚类分割、基于图的方法等经典与前沿技术&#xff0c;提供MATLAB代码实现。 目录 1. 图像分割基础 2. 经典分割方…

海康摄像头IPV6模式,手动,自动,路由公告

海康摄像头DS-2DC7220IW-A 网络设置中的IPv6配置选项。IPv6是互联网协议&#xff08;IP&#xff09;的第六版&#xff0c;用于替代IPv4&#xff0c;提供更多的IP地址和改进的网络功能。图片中的选项允许用户选择如何配置设备的IPv6网络连接&#xff1a; 手动&#xff1a;用户可…

NewMap10.3土地勘测定界自动化系统

“NewMap报件通”适用于建设项目用地土地勘测定界工作&#xff0c;其设计理念是以最大化提高作业效率与最简化作业员操作为原则&#xff0c;后台采用数据库管理技术&#xff0c;以“GIS概念”实现了图形数据与属性数据的双向联动&#xff0c;利用该系统可以方便快捷地绘制数字化…

栈(典型算法思想)—— OJ例题算法解析思路

目录 一、1047. 删除字符串中的所有相邻重复项 - 力扣&#xff08;LeetCode&#xff09; 算法代码&#xff1a; 1. 初始化结果字符串 2. 遍历输入字符串 3. 检查和处理字符 4. 返回结果 总结 二、844. 比较含退格的字符串 - 力扣&#xff08;LeetCode&#xff09; 算…

Qt中基于开源库QRencode生成二维码(附工程源码链接)

目录 1.QRencode简介 2.编译qrencode 3.在Qt中直接使用QRencode源码 3.1.添加源码 3.2.用字符串生成二维码 3.3.用二进制数据生成二维码 3.4.界面设计 3.5.效果展示 4.注意事项 5.源码下载 1.QRencode简介 QRencode是一个开源的库&#xff0c;专门用于生成二维码&…

字符串哈希动态规划_6

一.字符串哈希 字符串哈希概述 字符串哈希是一种将字符串映射到一个数值的技术&#xff0c;常用于处理字符串相关的算法问题&#xff0c;尤其在处理字符串匹配、子串查找等问题时非常高效。它的核心思想是利用一个哈希函数将字符串映射成一个整数&#xff0c;并根据该整数来判…

Kubernetes控制平面组件:Kubernetes如何使用etcd

云原生学习路线导航页&#xff08;持续更新中&#xff09; kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计&#xff08;一&#xff09;Kubernetes架构原则和对象设计&#xff08;二&#xff09;Kubernetes架构原则和对象设计&#xff08;三&#xff09;Kubernetes控…

Mybatis后端数据库查询多对多查询解决方案

问题场景&#xff1a; 我开发的是一个论文选择系统。 后端用一个论文表paper来存储论文信息。 论文信息中&#xff0c;包含前置课程&#xff0c;也就是你需要修过这些课程才能选择这个论文。 而一个论文对应的课程有很多个。 这样就造成了一个数据库存储的问题。一个paper…

BGP配置华为——RR反射器配置

实验拓扑 与之前实验同理将loop0作为routerID使用&#xff0c;且R1和R2上用loop1接口用于模拟用户其他网段 实验要求 1&#xff0c;在AS100内运行OSPF协议 2.配置路由反射器&#xff0c;使得从R1进入的数据能够反射到全局网络 3.在R1和R2上分别宣告自己的loop1口网段用于观…

CentOS7 离线安装 Postgresql 指南

一、背景 服务器通常都是离线内网环境&#xff0c;想要通过联网方式一键下载安装 Postgresql 不太现实&#xff0c;本文将介绍如何在 CentOS7 离线安装 Postgresql&#xff0c;以及遇到困难如何解决。 二、安装包下载 先在本地下载好 rpm 包&#xff0c;再通过 ftp 上传到服…

vue3项目实践心得-寻找未被使用的最小编号

&#x1f9e1;&#x1f9e1;遇到的问题&#x1f9e1;&#x1f9e1; 在用vue3ts编写编译原理项目中”绘制状态转换图“时&#xff0c;有一个添加状态的功能按钮&#xff0c;用户点击按钮即可添加一个新的状态&#xff0c;至于新的状态的编号值&#xff0c;想着以”最小未被使用…

FPGA简介|结构、组成和应用

Field Programmable Gate Arrays&#xff08;FPGA&#xff0c;现场可编程逻辑门阵列&#xff09;&#xff0c;是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物&#xff0c; 是作为专用集成电路&#xff08;ASIC&#xff09;领域中的一种半定制电路而出现的&#xff0c…

C# 入门简介

关于C# ​ C# &#xff08;读作C Sharp&#xff09;是由微软公司开发的一种面向对象、类型安全、高效且简单的编程语言&#xff0c;最初于 2000 年发布&#xff0c;并随后成为 .NET 框架的一部分。所以学习C#语言的同时&#xff0c;也是需要同步学习.NET框架的&#xff0c;不过…

处理使用 mapstruct 导致分页总数丢失问题

问题 PageHelper 分页总数不对&#xff0c;返回的总数老是等于当前页数目 分析 问题出现在 domain 转 VO 这个步骤&#xff0c;当我把数据库实体类型的 list 转为 vo 类型的 list&#xff0c;然后放进 PageInfo 则会丢失分页信息&#xff1b; 解决方式 从数据库查询出来后…

LabVIEW中的icon.llb 库

icon.llb 库位于 C:\Program Files (x86)\National Instruments\LabVIEW 2019\vi.lib\Platform 目录下&#xff0c;是 LabVIEW 系统中的一个重要库。它的主要功能是与图标相关的操作&#xff0c;提供了一些实用的 VI 用于处理 LabVIEW 图标的显示、修改和设置。通过该库&#x…