如何修改工作表中已有图片尺寸 将图片宽度设置为自身高度
问题原因
你的原有代码不生效主要存在以下问题:
- 使用了
_images私有属性,该属性属于openpyxl内部非公开实现,不同版本逻辑差异较大,部分版本修改该属性下的宽高不会同步到文件写入逻辑 - 代码片段缺少工作簿保存逻辑,所有修改仅保留在内存中,不会写入实际文件
- 若加载工作簿时启用了
read_only=True参数,所有修改操作都不会生效
正确实现代码
以下是批量处理目录下所有xlsx表格的完整代码:
import os from openpyxl import load_workbook # 替换为你的表格所在文件夹路径 target_folder = "./excel_files" for filename in os.listdir(target_folder): # 仅处理xlsx格式文件,xls格式需先转换为xlsx再操作 if not filename.lower().endswith(".xlsx"): continue file_path = os.path.join(target_folder, filename) # 加载工作簿时禁止开启只读模式 wb = load_workbook(file_path) # 遍历所有工作表,仅处理第一个工作表可改为 for ws in [wb.worksheets[0]]: for ws in wb.worksheets: for drawing in ws.drawings: # 筛选可设置宽高的图片对象 if hasattr(drawing, "width") and hasattr(drawing, "height"): # 直接将宽度赋值为当前高度,单位自动匹配无需额外转换 drawing.width = drawing.height # 必须执行保存操作,可修改保存路径避免覆盖原文件 wb.save(file_path)
注意事项
- 处理前建议备份原表格,避免修改出错丢失数据
- 若需要按像素指定尺寸,可按
1像素 = 9525 EMU的比例转换,例:设置高度为100像素可赋值drawing.height = 100 * 9525 - 加密的表格需要先解密后再执行处理操作
内容的提问来源于stack exchange,提问作者gustavo
相关产品推荐
相关产品推荐

