使用 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


相关推荐: win11怎么设置默认终端为Windows Terminal Win11替代CMD和PowerShell【技巧】  VS Code的时间线(Timeline)视图:您的代码时光机  深入理解Python对象引用与链表属性赋值  PDF如何批量加注释_PDF多文件批注高亮操作教程  知音漫客官网首页入口_知音漫客热门漫画推荐  多多买菜门店端app订单查看方法  怎样设置开机后自动运行某个程序_Windows启动文件夹与任务计划【自动化】  《360浏览器》自动保存账号密码设置方法  Python csv 模块处理非字符串数据:列表写入 CSV 文件的机制解析  Win10关闭UAC用户账户控制的方法 Win10降低安全提示等级【技巧】  海棠书屋官方在线书籍入口 海棠书屋文学作品浏览官网链接  抖音火山版注销账号抖音会注销吗 抖音火山版与抖音账号注销关系  Sublime怎么自动添加CSS前缀_Sublime安装Autoprefixer插件  CDR如何复制交互式填充色  Golang如何使用log记录日志信息_Golang log日志记录方法总结  5G和6G的连接密度有什么区别 6G每平方公里能连接多少设备  《土豆雅思》修改密码方法  百度浏览器无法安装扩展程序_百度浏览器插件安装失败原因解析  TikTok私信无法发送表情怎么办 TikTok消息表情发送修复方法  12306不能订票的时间段是固定的吗? | 节假日购票时间有无变化  鲨鱼剧场app金币获取方法  C++如何实现矩阵乘法_C++二维数组矩阵运算代码示例  Eclipse开发J*a快速入门  MySQL多重JOIN技巧:高效关联同一表获取多角色信息  FullCalendar自定义按钮样式定制指南  《华夏千秋》龙女试炼功法获取方法  植物大战僵尸95版游戏版下载_植物大战僵尸95版游戏版安装指南  《画加》约稿流程  J*aScript类型数组_TypedArray使用  淘口令快速解析技巧  QQ网站入口直接登录 QQ官方正版登录页面  Google Drive API服务器端访问指南:服务账户认证详解  百度小说看书时如何翻页_百度小说手动翻页与自动翻页设置  漫蛙漫画官方网站使用_漫蛙manwa网页版在线入口教程  快递查询,一键速查  汽水音乐官方网站登录入口_汽水音乐网页版进入链接  电脑的“恢复环境(WinRE)”找不到怎么办_Windows系统恢复环境重建【高级修复】  抖音号已注销怎么解绑企业认证?不解绑企业认证会怎样?  使用AI在VS Code中将代码从一种语言翻译成另一种  火柴人战争网页版在线玩  快递优选如何查优选物流_快递优选专属物流渠道查询与配送时效  三星A55应用闪退排查步骤_Samsung A55稳定性优化技巧  Lar*el 中高效执行多列更新:单次查询实现  如何取消数字签名  智慧团建活动报名入口 智慧团建活动报名入口手机端官网​  如何快速去除厨房重油污? 2025年最好用的厨房清洁剂推荐  sublime怎么快速在浏览器中预览HTML_sublime配置View in Browser教程  mysql归档数据怎么导出为csv_mysql归档数据导出为csv文件的方法  解决Flex容器横向滚动内容截断与偏移问题  《万兴喵影》导出视频方法 

 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.