使用 openpyxl 在 Excel 特定单元格中插入图片教程


使用 openpyxl 在 Excel 特定单元格中插入图片教程

本文详细介绍了如何使用 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配音 标贝悦读AI配音

在线文字转语音软件-专业的配音网站

标贝悦读AI配音 66 查看详情 标贝悦读AI配音

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")

注意事项与最佳实践

  1. 图片并非真正“嵌入”:请注意,即使经过上述调整,openpyxl 插入的图片在技术上仍然是浮动对象,只是其位置和大小被精确地控制,使其看起来像是“嵌入”在单元格中。这意味着如果您拖动单元格或调整其大小,图片可能不会自动随之移动或缩放。
  2. 路径问题:确保 image_path 是正确的,并且 Python 脚本有权限访问该路径。建议使用绝对路径或确保图片文件与脚本位于同一目录下。
  3. 缩放因子:width / 6 和 height / 18 是经验值。不同的图片分辨率、Excel版本或显示设置可能导致略微不完美的适配。如果发现图片未完全填满单元格或溢出,您可能需要微调这些除数。
  4. 性能考虑:插入大量图片可能会显著增加 Excel 文件的大小和处理时间。如果需要处理大量图片,请考虑优化图片大小或使用更高级的图片处理策略。
  5. 多个图片:如果您需要在不同单元格插入多个图片,只需重复 img = Image(img_path) 和 ws.add_image(img, cell_reference) 步骤,并为每个图片调整其目标单元格的尺寸。
  6. 错误处理:在实际应用中,您应该添加文件不存在、图片损坏等错误处理机制,以提高代码的健壮性。

总结

通过 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

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.