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

Python跨Excel复制图片:现有openpyxl脚本仅支持单表且丢失尺寸

Python实现Excel多工作表图片复制并保留原尺寸

原脚本仅支持单工作表,且无法保留图片原有尺寸,核心原因是通过SheetImageLoader转存图片时,丢失了原图片的布局参数(尺寸、位置偏移等)。以下是优化后的解决方案:

import openpyxl
from openpyxl.drawing.image import Image

# 源文件路径和目标文件路径
src_path = 'C:\\miso\\testy\\new_excel_file3.xlsx'
dest_path = 'C:\\miso\\testy\\new_excel_file.xlsx'

# 加载源工作簿
src_wb = openpyxl.load_workbook(src_path)
# 创建目标工作簿
dest_wb = openpyxl.Workbook()
# 删除默认创建的空白工作表(避免与复制的表冲突)
dest_wb.remove(dest_wb.active)

# 遍历源工作簿的所有工作表
for src_sheet in src_wb.worksheets:
    # 在目标工作簿中创建同名工作表
    dest_sheet = dest_wb.create_sheet(title=src_sheet.title)
    
    # 可选:复制源工作表的单元格内容和格式(按需启用)
    for row in src_sheet.iter_rows(values_only=False):
        for cell in row:
            dest_sheet[cell.coordinate].value = cell.value
            # 复制单元格格式
            dest_sheet[cell.coordinate].font = cell.font.copy()
            dest_sheet[cell.coordinate].fill = cell.fill.copy()
            dest_sheet[cell.coordinate].border = cell.border.copy()
            dest_sheet[cell.coordinate].alignment = cell.alignment.copy()
    
    # 复制工作表中的图片,保留原尺寸和位置
    for img in src_sheet.images:
        img_copy = Image(img.ref)
        img_copy.anchor = img.anchor
        img_copy.width = img.width
        img_copy.height = img.height
        dest_sheet.add_image(img_copy)

# 保存目标工作簿
dest_wb.save(dest_path)

核心优化点

  • 多工作表支持:遍历源工作簿所有工作表,为每个表在目标工作簿创建对应同名表
  • 保留图片原布局:直接读取源表images集合中的图片对象,复制其尺寸、锚点参数,无需转存图片流,完整保留原尺寸与位置
  • 可选单元格复制:附带单元格内容与格式的复制逻辑,可根据实际需求启用
  • 清理默认工作表:删除目标工作簿初始创建的空白表,避免表名冲突

内容的提问来源于stack exchange,提问作者Mišo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 03:28:12