讲师中心 微信公众号
AI工具推荐 视频效率加速

Python openpyxl在Excel指定单元格插入图片的教程

冬瑶君_2806

冬瑶君_2806

发布时间:2025-11-13 14:10:41

|

497人浏览过

|

来源于php中文网

原创

Python openpyxl在Excel指定单元格插入图片的教程

本教程详细介绍了如何使用python的openpyxl库在excel的特定单元格中插入图片,而非作为浮动封面。核心方法是利用`ws.add_image`指定锚点单元格,并通过调整单元格的行高和列宽,使图片视觉上完美契合单元格尺寸,从而实现图片“嵌入”的效果。

引言

在处理Excel文件时,经常需要在特定位置插入图片。然而,对于许多Python库而言,将图片精确地“嵌入”到单元格中,使其随单元格内容一同移动、调整大小,而非仅仅作为浮动对象覆盖在工作表上,是一个常见的挑战。openpyxl库虽然强大,但其图片处理方式也需要一定的技巧才能达到预期效果。本教程将深入探讨如何利用openpyxl实现图片在Excel指定单元格的视觉“嵌入”。

理解openpyxl的图片插入机制

在Excel中,图片通常被视为“绘图对象”,它们独立于单元格内容存在。当使用openpyxl插入图片时,默认情况下,图片会作为一个浮动对象添加到工作表上。即使指定了img.anchor = 'A1',图片也只是将其左上角锚定到A1单元格的左上角,但其大小和位置仍可能独立于A1单元格的尺寸。

要实现图片“嵌入”到单元格的效果,关键在于两个步骤:

  1. 锚定图片:将图片的左上角精确地锚定到目标单元格的左上角。
  2. 调整单元格尺寸:将目标单元格的行高和列宽调整为与图片尺寸相匹配,从而使图片在视觉上被“包裹”在单元格内部。

实现步骤

以下是使用openpyxl在Excel指定单元格插入图片的详细步骤。

立即学习“Python免费学习笔记(深入)”;

1. 准备工作:导入模块与创建工作簿

首先,确保你已经安装了openpyxl库(pip install openpyxl)。然后,导入必要的模块并创建一个新的Excel工作簿和活动工作表。

from openpyxl import Workbook
from openpyxl.drawing.image import Image

# 创建一个新的工作簿
wb = Workbook()
# 获取活动工作表
ws = wb.active

2. 加载图片

指定要插入的图片路径。openpyxl的Image类可以直接加载图片文件。

# 替换为你的图片文件路径
img_path = "path/to/your/image.jpg" 

# 加载图片
img = Image(img_path)

请确保img_path是正确的,并且图片文件存在。openpyxl支持常见的图片格式,如JPEG、PNG、GIF等。

ClickHouse GitHub Forensics
ClickHouse GitHub Forensics

通过ClickHouse查询GitHub事件数据,用于供应链调查、行为者画像和异常检测。适用于调查基于GitHub的攻击,...

下载

3. 锚定图片到指定单元格

使用ws.add_image()方法将图片添加到工作表。这个方法接受两个参数:图片对象和锚点单元格的引用(例如'A1')。

# 将图片锚定到A1单元格
ws.add_image(img, 'A1')

此时,图片已经添加到工作表,并且其左上角与A1单元格的左上角对齐。然而,图片的大小仍然是其原始大小,可能远超A1单元格的默认尺寸。

4. 关键步骤:调整单元格尺寸以容纳图片

为了使图片在视觉上“嵌入”到单元格中,我们需要调整目标单元格(本例中是A1)的列宽和行高,使其与图片的像素尺寸相匹配。Excel的列宽和行高单位与图片像素单位不同,因此需要进行转换。

经验表明,将图片的宽度像素除以约6,可以得到近似的Excel列宽单位;将图片的高度像素除以约18,可以得到近似的Excel行高单位。这些转换因子可能因Excel版本、DPI设置或默认字体大小而略有不同,但通常能提供一个良好的起点。

# 获取图片的宽度和高度(以像素为单位)
# 注意:openpyxl.drawing.image.Image对象在加载后会自动计算这些属性
# 如果需要精确控制,可以预先获取图片信息
# img.width 和 img.height 属性在 Image 对象中是可用的

# 调整A列的宽度以适应图片宽度
# Excel列宽单位与像素的近似转换因子约为6
ws.column_dimensions['A'].width = img.width / 6 

# 调整第1行的行高以适应图片高度
# Excel行高单位(磅)与像素的近似转换因子约为18
ws.row_dimensions[1].height = img.height / 18 

通过这一步,A1单元格的尺寸将被调整为与图片尺寸大致相同,从而使图片看起来像是被“装”在单元格内部。

5. 保存工作簿

最后,保存修改后的工作簿。

# 保存工作簿
wb.save("output_with_image_in_cell.xlsx")

完整示例代码

将以上步骤整合,得到一个完整的示例:

from openpyxl import Workbook
from openpyxl.drawing.image import Image
import os # 用于检查文件是否存在

def add_image_to_excel_cell(image_path, cell_address, output_filename="output_with_image.xlsx"):
    """
    将图片插入到Excel的指定单元格,并调整单元格尺寸以容纳图片。

    Args:
        image_path (str): 要插入的图片文件的路径。
        cell_address (str): 目标单元格的地址,例如 'A1'。
        output_filename (str): 保存Excel文件的名称。
    """
    if not os.path.exists(image_path):
        print(f"错误:图片文件未找到 - {image_path}")
        return

    wb = Workbook()
    ws = wb.active

    try:
        img = Image(image_path)
    except Exception as e:
        print(f"错误:加载图片失败 - {e}")
        return

    # 将图片锚定到指定单元格
    ws.add_image(img, cell_address)

    # 解析单元格地址以获取列和行索引
    from openpyxl.utils import get_column_letter, column_index_from_string
    col_letter = ''.join(filter(str.isalpha, cell_address))
    row_index = int(''.join(filter(str.isdigit, cell_address)))

    # 调整列宽和行高以适应图片
    # 经验转换因子:像素到Excel列宽约6,像素到Excel行高约18
    ws.column_dimensions[col_letter].width = img.width / 6 
    ws.row_dimensions[row_index].height = img.height / 18 

    wb.save(output_filename)
    print(f"图片已成功插入到 {cell_address} 单元格,文件保存为 {output_filename}")

# 使用示例
# 确保 'example.jpg' 存在于脚本相同目录下,或提供完整路径
# 可以从网上下载一张图片用于测试,例如:
# import requests
# img_url = "https://via.placeholder.com/150" # 示例图片URL
# response = requests.get(img_url)
# with open("example.jpg", "wb") as f:
#     f.write(response.content)

# add_image_to_excel_cell("example.jpg", 'B2', "my_excel_with_image.xlsx")

注意事项

  1. 图片并非真正“嵌入”:尽管视觉上图片被包含在单元格内,但从Excel的内部结构来看,它仍然是一个绘图对象,只是被锚定并调整了周围单元格的尺寸。这意味着,如果用户手动调整了单元格的行高或列宽,图片可能不再完美契合。然而,openpyxl默认会设置图片的“属性”为“随单元格移动和调整大小”,这在多数情况下能满足需求。
  2. 尺寸调整的经验值:img.width / 6和img.height / 18是经验性的转换因子。它们可能需要根据具体的Excel版本、操作系统DPI设置、默认字体大小等进行微调,以达到最完美的视觉效果。如果对像素级精度有严格要求,可能需要更复杂的计算或依赖其他库(如Pillow)来获取更详细的图片信息并进行精确转换。
  3. 图片格式支持:openpyxl通常支持常见的图片格式,如JPEG、PNG、GIF等。确保你使用的图片格式是兼容的。
  4. 多图片处理:如果需要在多个单元格中插入图片,只需循环调用add_image_to_excel_cell函数,并为每个图片指定不同的单元格地址和图片路径。
  5. 性能考虑:插入大量高分辨率图片可能会显著增加Excel文件的大小,并可能影响文件打开和处理的速度。建议在插入前对图片进行适当的压缩或缩放。

总结

通过本教程,我们学习了如何利用openpyxl库在Excel的指定单元格中插入图片,并通过巧妙地调整单元格的行高和列宽,使其在视觉上达到“嵌入”的效果。理解图片在Excel中的本质(绘图对象)以及openpyxl的锚定机制是实现这一功能的关键。掌握这些技巧,将使你能够更灵活地使用Python自动化处理包含图片的Excel文档。

热门AI工具

更多
超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

相关专题

更多
pip安装使用方法
pip安装使用方法

安装步骤:1、确保Python已经正确安装在您的计算机上;2、下载“get-pip.py”脚本;3、按下Win + R键,然后输入cmd并按下Enter键来打开命令行窗口;4、在命令行窗口中,使用cd命令切换到“get-pip.py”所在的目录;5、执行安装命令;6、验证安装结果即可。大家可以访问本专题下的文章,了解pip安装使用方法的更多内容。

2550

2023.10.09

更新pip版本
更新pip版本

更新pip版本方法有使用pip自身更新、使用操作系统自带的包管理工具、使用python包管理工具、手动安装最新版本。想了解更多相关的内容,请阅读专题下面的文章。

5883

2024.12.20

pip设置清华源
pip设置清华源

设置方法:1、打开终端或命令提示符窗口;2、运行“touch ~/.pip/pip.conf”命令创建一个名为pip的配置文件;3、打开pip.conf文件,然后添加“[global];index-url = https://pypi.tuna.tsinghua.edu.cn/simple”内容,这将把pip的镜像源设置为清华大学的镜像源;4、保存并关闭文件即可。

7442

2024.12.23

python升级pip
python升级pip

本专题整合了python升级pip相关教程,阅读下面的文章了解更多详细内容。

3627

2025.07.23

PHP 命令行脚本与自动化任务开发
PHP 命令行脚本与自动化任务开发

本专题系统讲解 PHP 在命令行环境(CLI)下的开发与应用,内容涵盖 PHP CLI 基础、参数解析、文件与目录操作、日志输出、异常处理,以及与 Linux 定时任务(Cron)的结合使用。通过实战示例,帮助开发者掌握使用 PHP 构建 自动化脚本、批处理工具与后台任务程序 的能力。

446

2025.12.13

Figma AI自动化智能数据填充与交互生成实战
Figma AI自动化智能数据填充与交互生成实战

告别机械重复,详细演示如何用 AI 填充业务真实数据,并自动为页面添加交互连线,将静态设计稿快速转变为动态原型。

285

2026.05.13

excel对比两列数据异同
excel对比两列数据异同

Excel作为数据的小型载体,在日常工作中经常会遇到需要核对两列数据的情况,本专题为大家提供excel对比两列数据异同相关的文章,大家可以免费体验。

4681

2023.07.25

excel重复项筛选标色
excel重复项筛选标色

excel的重复项筛选标色功能使我们能够快速找到和处理数据中的重复值。本专题为大家提供excel重复项筛选标色的相关的文章、下载、课程内容,供大家免费下载体验。

2836

2023.07.31

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

0

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 43.6万人学习

成为PHP架构师-自制PHP框架
成为PHP架构师-自制PHP框架

共28课时 | 3.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn