【Python】将图片批量插入execl单元格中

import os
from openpyxl import Workbook
from openpyxl.drawing.image import Image
from openpyxl.utils import get_column_letter


def insert_images_to_excel(folder_path, output_excel="images.xlsx", img_width=100, img_height=100):
    """
    将文件夹中的图片名和图片插入到Excel中

    参数:
    folder_path: 图片文件夹路径
    output_excel: 输出Excel文件名
    img_width: 图片宽度(像素)
    img_height: 图片高度(像素)
    """

    # 支持的主要图片格式
    image_extensions = ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tiff', '.webp']

    # 创建Excel工作簿
    wb = Workbook()
    ws = wb.active
    ws.title = "图片列表"

    # 设置标题
    ws['A1'] = "序号"
    ws['B1'] = "图片名称"
    ws['C1'] = "图片"

    # 调整列宽
    ws.column_dimensions['A'].width = 10
    ws.column_dimensions['B'].width = 30
    ws.column_dimensions['C'].width = 20
    ws.column_dimensions['D'].width = 20

    # 获取文件夹中的所有图片文件
    image_files = []
    for filename in os.listdir(folder_path):
        file_ext = os.path.splitext(filename)[1].lower()
        if file_ext in image_extensions:
            image_files.append(filename)

    if not image_files:
        print("未找到图片文件!")
        return

    print(f"找到 {len(image_files)} 张图片")

    # 插入图片和文件名
    row = 2  # 从第2行开始(第1行是标题)
    for idx, filename in enumerate(sorted(image_files), 1):
        # 插入序号
        ws[f'A{row}'] = idx

        # 插入图片名
        ws[f'B{row}'] = filename

        # 图片路径
        img_path = os.path.join(folder_path, filename)

        try:
            # 插入图片
            img = Image(img_path)

            # 调整图片大小
            img.width = img_width
            img.height = img_height

            # 将图片插入到C列
            ws.add_image(img, f'C{row}')

            # 调整行高以适应图片
            ws.row_dimensions[row].height = img_height * 0.75

            print(f"已插入: {filename}")

        except Exception as e:
            print(f"插入图片 {filename} 时出错: {str(e)}")
            ws[f'C{row}'] = "插入失败"

        row += 1

    # 保存Excel文件
    wb.save(output_excel)
    print(f"\nExcel文件已保存为: {output_excel}")
    print(f"共处理 {len(image_files)} 张图片")


if __name__ == "__main__":
    # 设置参数
    folder_path = input("请输入图片文件夹路径: ").strip()
    output_name = r"demo.xlsx"

    if not os.path.exists(folder_path):
        print("文件夹不存在!")
    else:
        # 可选:自定义输出文件名和图片大小
        # output_name = input("请输入输出Excel文件名(默认为 images.xlsx): ").strip()
        # output_name = output_name if output_name else "images.xlsx"
        # 调用函数
        insert_images_to_excel(
            folder_path=folder_path,
            output_excel=output_name,
            # img_width=120,  # 可调整
            # img_height=120  # 可调整
        )
posted @ 2025-12-16 10:35  Phoenixy  阅读(0)  评论(0)    收藏  举报