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
相关产品推荐
相关产品推荐

