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

如何使用Python脚本自动批量将图片插入Excel文件的指定单元格

完全可以实现,无需手动批量粘贴

处理150张图靠手动复制粘贴不仅耗时久,还很容易出现图片错位、大小不匹配遮挡单元格内容的问题。Python脚本可实现全流程自动化,所有需要自定义的参数仅3项,刚好对应你提到的图片存储路径、目标Excel文件路径、指定文件夹内的图片总数。

核心实现依赖

仅需两个通用开源库,无复杂环境配置:

  • openpyxl:操作Excel文件,支持嵌入式插入图片
  • Pillow:自动调整图片尺寸,匹配单元格大小,避免图片超出边界
    安装依赖直接执行命令:
    pip install openpyxl pillow

可直接复用的脚本

所有需要改动的配置统一放在脚本开头的配置区,无需修改核心逻辑即可使用:

# -------------------------- 自定义配置区,仅修改以下3项即可 --------------------------
IMAGE_DIR = "你的图片文件夹存储路径"
OUTPUT_EXCEL_PATH = "最终生成的Excel文件存储路径"
EXPECTED_TOTAL_IMG = 150
# -----------------------------------------------------------------------------------
import os
import re
from openpyxl import Workbook
from openpyxl.drawing.image import Image as XLImage
from PIL import Image as PILImage

# 固定设置A、B列宽度与行高,避免单元格变形
COLUMN_WIDTH = 30
ROW_HEIGHT = 150
wb = Workbook()
ws = wb.active
ws.column_dimensions['A'].width = COLUMN_WIDTH
ws.column_dimensions['B'].width = COLUMN_WIDTH

# 读取文件夹内所有图片,按文件名自然数字顺序排序,避免10.jpg排在2.jpg前的排序异常
def natural_sort(file_name):
    parts = re.split(r'(\d+)', file_name)
    return [int(part) if part.isdigit() else part.lower() for part in parts]

all_images = [f for f in os.listdir(IMAGE_DIR) if f.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp'))]
all_images = sorted(all_images, key=natural_sort)[:EXPECTED_TOTAL_IMG]

# 逐行插入图片:第i行A列放第2i-1张图,B列放第2i张图
target_w = COLUMN_WIDTH * 7  # 列宽转像素的近似换算值
target_h = ROW_HEIGHT * 1.33
for row_idx in range(len(all_images) // 2):
    ws.row_dimensions[row_idx + 1].height = ROW_HEIGHT
    # 插入A列图片
    img_path_a = os.path.join(IMAGE_DIR, all_images[2 * row_idx])
    with PILImage.open(img_path_a) as pil_img:
        orig_w, orig_h = pil_img.size
        scale = min(target_w/orig_w, target_h/orig_h)
        new_w = int(orig_w * scale)
        new_h = int(orig_h * scale)
    xl_img_a = XLImage(img_path_a)
    xl_img_a.width = new_w
    xl_img_a.height = new_h
    ws.add_image(xl_img_a, f"A{row_idx + 1}")

    # 插入B列图片
    img_path_b = os.path.join(IMAGE_DIR, all_images[2 * row_idx + 1])
    with PILImage.open(img_path_b) as pil_img:
        orig_w, orig_h = pil_img.size
        scale = min(target_w/orig_w, target_h/orig_h)
        new_w = int(orig_w * scale)
        new_h = int(orig_h * scale)
    xl_img_b = XLImage(img_path_b)
    xl_img_b.width = new_w
    xl_img_b.height = new_h
    ws.add_image(xl_img_b, f"B{row_idx + 1}")

wb.save(OUTPUT_EXCEL_PATH)
print("全部图片插入完成")

实际使用注意事项

  • 脚本默认按文件名的数字自然顺序匹配图片,如需调整对应规则,只要修改文件命名或排序逻辑即可
  • 内置的等比缩放逻辑不会拉伸变形图片,最终生成的Excel文件比直接手动插入原图体积小30%-50%
  • 所有插入的图片为嵌入式存储,不会因为移动本地文件出现图片丢失的问题
  • 如果出现图片读取失败,优先检查图片文件名是否包含特殊字符、路径是否存在中文编码异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 00:54:07