You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python在Jupyter中如何从Excel列随机抽取并展示5张单元格图片

Jupyter环境读取Excel指定列图片并随机抽样展示实现

核心原理说明

之前openpyxl、display方案失效的核心原因:Excel内的嵌入式图片不会存储为单元格的value属性,所有图片都挂载在工作表的独立图片资源列表中,通过位置锚点和对应单元格做绑定,直接读取E列单元格值永远拿不到图片对象。


实现步骤

1. 安装所需依赖

在Jupyter代码单元执行以下命令安装依赖:

pip install openpyxl pillow ipython
  • openpyxl:用于解析xlsx格式的Excel文件,读取嵌入的图片资源
  • pillow:用于处理图片二进制流,生成Jupyter可渲染的图片对象
  • ipython:提供Jupyter内的图片展示能力

注:随机抽样用的random是Python标准库,无需额外安装

2. 可直接运行的代码

将代码中的文件路径替换为本地Excel的实际路径即可:

from openpyxl import load_workbook
from PIL import Image
import io
import random
from IPython.display import display

# 加载目标Excel文件,不要加read_only=True参数
wb = load_workbook(filename="你的本地Excel文件.xlsx", data_only=True)
# 如果不是第一个工作表,替换成对应表名即可,比如wb["Sheet1"]
ws = wb.active

# 筛选所有锚定在E列的图片
e_col_images = []
for img in ws._images:
    # 锚点列索引从0开始计数:A列对应0,E列对应4
    img_anchor_col = img.anchor.col
    if img_anchor_col == 4:
        # 把图片二进制流转为PIL可识别的图片对象
        pil_img = Image.open(io.BytesIO(img._data()))
        e_col_images.append(pil_img)

# 随机无重复抽取5张,若E列总图片数不足5张则取全部
sample_num = min(5, len(e_col_images))
selected_imgs = random.sample(e_col_images, sample_num)

# 逐张在Jupyter中展示
print(f"E列共检测到{len(e_col_images)}张图片,随机抽取{sample_num}张展示:")
for i, img in enumerate(selected_imgs, 1):
    print(f"\n第{i}张:")
    display(img)

常见问题排查

  • 加载Excel文件时不要加read_only=True参数,只读模式下不会加载嵌入的图片资源,会导致图片列表为空
  • 如果文件是.xls后缀的老版本Excel格式,请先另存为.xlsx格式再运行代码,openpyxl不支持老版xls格式解析
  • 如果存在图片跨多列摆放的情况,代码默认以图片左上角锚点所在列作为归属判断标准,和Excel视觉上的单元格归属逻辑一致
  • 不要尝试通过遍历E列单元格读取value属性获取图片,该方式拿到的结果永远是None,从Excel存储原理上就走不通

内容的提问来源于stack exchange,提问作者Nomnomc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 18:48:24