
本文详细介绍了如何使用 python 的 `openpyxl` 库在 excel 工作表的特定单元格中插入图片。教程涵盖了图片加载、将其锚定到指定单元格,以及根据图片尺寸自动调整单元格的行高和列宽的关键步骤。通过这些方法,可以实现图片在视觉上完美适配并“嵌入”到指定单元格的效果,而非仅仅作为浮动对象。
在数据可视化和报告生成中,有时需要在 Excel 单元格中直接展示图片,以增强数据的可读性和直观性。然而,许多用户在使用 openpyxl 库时会遇到一个常见问题:图片通常作为浮动对象添加到工作表上,而不是“嵌入”到特定的单元格中。本教程将详细指导您如何利用 openpyxl 的功能,实现将图片精确地放置到指定单元格,并调整单元格尺寸以适应图片。
openpyxl 库允许您将图片添加到工作表,并通过指定锚点来控制其位置。关键在于使用 worksheet.add_image(image_object, cell_reference) 方法,其中 cell_reference 参数是您希望图片左上角对齐的单元格。
首先,您需要导入必要的模块,创建一个工作簿和工作表,然后加载您的图片。
from openpyxl import Workbook from openpyxl.drawing.image import Image # 创建一个新的工作簿和活动工作表 wb = Workbook() ws = wb.active # 指定图片文件的路径 # 请将 "path/to/your/image.jpg" 替换为您的实际图片路径 img_path = "path/to/your/image.jpg" # 加载图片 img = Image(img_path) # 将图片添加到工作表,并将其锚定到 'A1' 单元格 # 这意味着图片的左上角将与 'A1' 单元格的左上角对齐 ws.add_image(img, 'A1')
仅仅将图片锚定到单元格是不够的,图片本身可能比单元格大或小,导致显示不佳。为了让图片看起来像是“嵌入”在单元格中,我们需要根据图片的实际尺寸来调整目标单元格(以及相邻单元格)的行高和列宽。
标贝悦读AI配音
在线文字转语音软件-专业的配音网站
66
查看详情
openpyxl 中的图片尺寸是以 EMUs (English Metric Units) 为单位的,而 Excel 的列宽和行高分别以字符宽度和磅 (points) 为单位。因此,需要一个近似的转换因子来将图片尺寸映射到单元格尺寸。经验证,将图片宽度除以 6 可以大致得到合适的列宽,将图片高度除以 18 可以大致得到合适的行高。
# ... (接上面的代码)
# 获取图片对象的宽度和高度(以EMUs为单位)
# img.width 和 img.height 属性提供了图片的原始尺寸
# 注意:这些值是内部表示,需要转换才能用于Excel的列宽和行高
img_width_emu = img.width
img_height_emu = img.height
# 调整 'A' 列的宽度以适应图片宽度
# 经验值:将图片EMUs宽度除以6,可以近似得到Excel列宽
ws.column_dimensions['A'].width = img_width_emu / 6
# 调整第 1 行的高度以适应图片高度
# 经验值:将图片EMUs高度除以18,可以近似得到Excel行高
ws.row_dimensions[1].height = img_height_emu / 18
# 保存工作簿
wb.s*e("output_with_image_in_cell.xlsx")下面是将图片插入到指定单元格并调整单元格尺寸的完整示例代码:
from openpyxl import Workbook
from openpyxl.drawing.image import Image
import os # 用于检查文件是否存在,可选
def insert_image_into_excel_cell(image_path, cell_reference, output_filename="output_with_image.xlsx"):
"""
将图片插入到Excel工作表的指定单元格,并调整单元格尺寸以适应图片。
Args:
image_path (str): 图片文件的完整路径。
cell_reference (str): 目标单元格的引用,例如 'A1'。
output_filename (str): 生成的Excel文件的名称。
"""
if not os.path.exists(image_path):
print(f"错误:图片文件不存在于 '{image_path}'")
return
wb = Workbook()
ws = wb.active
# 加载图片
img = Image(image_path)
# 将图片添加到工作表,并锚定到指定单元格
ws.add_image(img, cell_reference)
# 解析单元格引用以获取列字母和行号
# 例如,对于 'A1',column_letter='A', row_number=1
from openpyxl.utils import get_column_letter, column_index_from_string
column_letter = ''.join(filter(str.isalpha, cell_reference))
row_number = int(''.join(filter(str.isdigit, cell_reference)))
# 调整列宽和行高以适应图片
# openpyxl的图片尺寸是EMUs,Excel的列宽和行高有不同的单位
# 这里的除数是经验值,可能需要根据实际情况微调
ws.column_dimensions[column_letter].width = img.width / 6
ws.row_dimensions[row_number].height = img.height / 18
# 保存工作簿
wb.s*e(output_filename)
print(f"图片已成功插入到 '{output_filename}' 的 '{cell_reference}' 单元格。")
# --- 使用示例 ---
# 确保替换为您的实际图片路径
my_image_path = "example_image.jpg" # 假设您有一个名为 example_image.jpg 的图片在同一目录下
# 创建一个示例图片文件 (如果不存在)
# 这是一个简单的PIL图像创建,用于测试
try:
from PIL import Image as PILImage, ImageDraw
if not os.path.exists(my_image_path):
img_pil = PILImage.new('RGB', (200, 100), color = 'red')
d = ImageDraw.Draw(img_pil)
d.text((10,10), "Test Image", fill=(255,255,0))
img_pil.s*e(my_image_path)
print(f"已创建示例图片: {my_image_path}")
except ImportError:
print("PIL (Pillow) 库未安装,无法创建示例图片。请确保您有 'example_image.jpg' 文件。")
print("您可以使用 'pip install Pillow' 安装 Pillow 库。")
# 调用函数插入图片到 'B2' 单元格
insert_image_into_excel_cell(my_image_path, 'B2', "report_with_logo.xlsx")
通过 openpyxl 库,我们可以有效地在 Excel 工作表的指定单元格中插入图片,并通过调整单元格的行高和列宽来实现图片与单元格的完美适配。尽管图片在技术上仍是浮动对象,但这种方法提供了在视觉上将图片“嵌入”单元格的强大能力,极大地提升了使用 Python 生成 Excel 报告的灵活性和专业性。理解并运用好 ws.add_image() 方法以及单元格尺寸调整的技巧,将是您在自动化 Excel 任务中的重要工具。
以上就是使用 openpyxl 在 Excel 特定单元格中插入图片教程的详细内容,更多请关注其它相关文章!
# python
# 江油行业网站建设设计
# 河南营销推广公司招聘
# 丹霞贡柑营销推广策略
# 做网站推广外包合法吗
# 淘宝联盟提交网站推广
# 行号
# 多个
# 创建一个
# 加载
# 以适应
# 不存在
# 您的
# excel
# git
# go
# 工具
# win
# 数据可视化
# 常见问题
# red
# 单元格
# 插入图片
# 经验值
# 广东营销推广哪家强些
# seo优化推广多少钱
# seo手法教学视频
# 谷歌seo信息查询
# 惠州seo企业推广
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
抖音网页版官方链接 抖音网页版官网链接入口
疯狂小鸟微信小游戏入口 疯狂小鸟网页版秒玩
J*aScript中高效处理用户输入:从Keyup事件到表单提交的优化实践
Win10如何查看已安装的更新补丁 Win10卸载指定更新教程【教程】
word页码灰色不能用如何解决
广州地铁app准妈咪徽章领取方法
C#解析来自网络的XML流数据 实时错误处理与重试机制
Django模型动态关联检查:高效管理复杂关系
视频号视频怎么提取文案?提取的文案如何优化与使用?
《KARDS》冬季扩展包“国土阵线”上线!全新“协力”机制改变战场格局
iPhone 13 mini如何清理Safari缓存_iPhone 13 mini浏览器缓存清理方法
驱动人生:游戏修复指南
Golang如何测试结构体方法_Golang reflect方法测试与调用技巧
无人机考证官网 中国民航无人机考证官网登录入口
XPath动态元素定位:如何精准选择文本内容变化的元素
悟空浏览器如何恢复关闭的标签页 悟空浏览器撤销关闭网页快捷键设置
《幻兽帕鲁》手游帕鲁捕捉技巧分享
小米手机屏幕失灵乱跳怎么办 屏幕触控问题自检与临时解决方法【应急】
QQ网站入口直接登录 QQ官方正版登录页面
如何在vscode中关闭it环境
电脑开不了机怎么办 电脑无法开机的解决方法
之了课堂app做题入口
暴风影音官网正式版_暴风影音手机版官网下载安卓
Flexbox布局实践:实现底部页脚与顶部粘性导航条的完美结合
《战地6》反作弊已成功拦截240万次作弊 发售第一周98%比赛没有作弊
铁路12306官网登录入口 铁路12306在线购票官方平台
抖音网页版地址直接进入_抖音网页版在线观看入口
嘀嗒顺风车如何开具电子发票
西瓜视频怎么查看访客记录_西瓜视频访客记录查看方法
mysql离线安装后如何启动_mysql离线安装完成后启动服务的方法
在PHP环境中正确加载HTML资源:CSS样式与图片路径指南
《豆瓣》私信用户方法
如何在 WordPress 前端实现内容提交:古腾堡编辑器的替代方案与实践
c++中的const关键字用法大全_c++ const正确使用指南
Golang中的rune与byte类型区别是什么_Golang字符与字节处理详解
秋风萧瑟洪波涌起中的萧瑟指的是什么
淘口令快速解析技巧
Linux如何开发轻量级数据服务模块_Linux服务化设计
电子白板帮助菜单使用指南
firefox火狐浏览器最新官网主页_ firefox火狐浏览器平台入口直达官方链接
msn官方入口2025登录 msn官网2025直达首页入口
《大周列国志》皇帝律令功能介绍
vivo手机视频通话美颜怎么设置_vivo视频通话美颜开启方法
LocoySpider如何批量采集电商商品_LocoySpider电商采集的模板应用
163邮箱网页版官方登录入口 163邮箱网页版访问页面
《饿了么》拼好饭点外卖教程2025
yy漫画登录页面官方入口_yy漫画在线阅读网址入口
Retrofit根路径POST请求:@POST("/") 的应用与解析
《星露谷物语》克林特好感度事件介绍
C#中的Record类型有什么优势?C# 9新特性Record与Class的用法区别
2025-11-14
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。