You need to enable JavaScript to run this app. 如何使用Python批量替换Word、Excel文档中的旧logo图片?
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python批量替换Word、Excel文档中的旧logo图片?

批量替换Office文档中旧商标图片的实现方案

你现有的文本替换代码无法直接用于图片替换,原因是Word、Excel文件并非纯文本格式,直接用open读写会直接损坏文件结构,也无法识别到嵌入的图片资源。


实现思路

  • 现在主流的docx(Word)、xlsx(Excel)本质是压缩包格式,解压后嵌入的图片都存放在固定的media目录下,我们可以通过专门的Office处理库定位、替换对应图片
  • 优先统一处理docx/xlsx格式文件,若还有老旧的doc/xls文件,建议先批量转成新格式再操作
  • 操作前必须备份所有原始文档,避免脚本异常导致文件损坏

所需依赖

安装需要的第三方库:

pip install python-docx openpyxl

示例代码(Word版本)

可匹配所有docx文件中和旧商标哈希一致的图片,批量替换为新商标:

import os
import hashlib
from docx import Document

# 配置参数
OLD_IMG_PATH = "旧商标本地路径.png"
NEW_IMG_PATH = "新商标本地路径.png"
DOCX_DIR = "/Users/存放待处理Word文档的目录"

# 计算旧商标的MD5值作为匹配依据
def get_img_md5(img_bytes):
    md5 = hashlib.md5()
    md5.update(img_bytes)
    return md5.hexdigest()

with open(OLD_IMG_PATH, "rb") as f:
    OLD_IMG_HASH = get_img_md5(f.read())

# 遍历所有docx文件处理
for filename in os.listdir(DOCX_DIR):
    if not filename.endswith(".docx") or "~$" in filename:
        continue
    file_path = os.path.join(DOCX_DIR, filename)
    doc = Document(file_path)
    # 遍历文档所有嵌入资源,匹配图片替换
    for part in doc.part.package.parts:
        if part.content_type.startswith("image/"):
            current_img_md5 = get_img_md5(part.blob)
            if current_img_md5 == OLD_IMG_HASH:
                with open(NEW_IMG_PATH, "rb") as new_f:
                    part._blob = new_f.read()
    doc.save(file_path)
    print(f"已处理文件:{filename}")

示例代码(Excel版本)

可匹配所有xlsx文件中的旧商标,按原位置替换为新商标:

import os
import hashlib
from openpyxl import load_workbook
from openpyxl.drawing.image import Image

# 配置参数
OLD_IMG_PATH = "旧商标本地路径.png"
NEW_IMG_PATH = "新商标本地路径.png"
EXCEL_DIR = "/Users/存放待处理Excel文档的目录"

def get_img_md5(img_bytes):
    md5 = hashlib.md5()
    md5.update(img_bytes)
    return md5.hexdigest()

with open(OLD_IMG_PATH, "rb") as f:
    OLD_IMG_HASH = get_img_md5(f.read())

# 遍历所有xlsx文件处理
for filename in os.listdir(EXCEL_DIR):
    if not filename.endswith(".xlsx") or "~$" in filename:
        continue
    file_path = os.path.join(EXCEL_DIR, filename)
    wb = load_workbook(file_path)
    for ws in wb.worksheets:
        replace_idx_list = []
        # 先匹配所有需要替换的旧图片
        for idx, img in enumerate(ws._images):
            current_img_md5 = get_img_md5(img._data())
            if current_img_md5 == OLD_IMG_HASH:
                replace_idx_list.append((idx, img.anchor))
        # 倒序删除旧图片、插入新图片
        for idx, old_anchor in sorted(replace_idx_list, reverse=True):
            ws._images.pop(idx)
            new_img = Image(NEW_IMG_PATH)
            new_img.anchor = old_anchor
            ws.add_image(new_img)
    wb.save(file_path)
    print(f"已处理文件:{filename}")

注意事项

  • 脚本仅支持docx、xlsx格式,老旧的doc、xls格式需要先转换格式再处理
  • 建议先拿3-5份测试文件验证逻辑没问题后,再批量处理所有文档
  • 所有文档处理前必须提前备份,避免不可逆的文件损坏

内容的提问来源于stack exchange,提问作者Jess Crow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 04:36:04