You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Word 2013中如何编程提取文档内链接/插入图片的文件名(不含扩展名)

解决方案:提取单个Word文档中链接的.emf图片文件名

我刚好处理过类似的需求,给你一个基于Python的轻量方案,能直接从单个Word文档里提取所有链接/插入的.emf图片文件名(不含扩展名),适配网络驱动器的存储场景,而且不需要批处理:

前置准备

首先需要安装python-docx库,它能直接解析docx的内部结构,处理图片相关的属性:

pip install python-docx

核心代码实现

下面的代码会遍历文档里的所有嵌入式和浮动式图片,筛选出.emf格式的,然后提取不含扩展名的文件名,还会自动去重:

from docx import Document
import os

def extract_emf_image_names(doc_path):
    # 打开目标Word文档
    doc = Document(doc_path)
    emf_file_names = []
    
    # 遍历文本流中的嵌入式图片
    for inline_img in doc.inline_shapes:
        # 判断是否为图片类型
        if inline_img.type == 3:
            # 获取图片路径:区分链接式和嵌入式
            if inline_img.is_linked:
                img_full_path = inline_img.link_path
            else:
                # 嵌入式图片从docx内部关联信息提取文件名
                blip_obj = inline_img._inline.graphic.graphicData.pic.blipFill.blip
                img_full_path = blip_obj.embed if hasattr(blip_obj, 'embed') else blip_obj.link
            
            # 筛选.emf格式的图片
            if img_full_path.lower().endswith('.emf'):
                # 提取不含扩展名的文件名
                file_name = os.path.splitext(os.path.basename(img_full_path))[0]
                emf_file_names.append(file_name)
    
    # 遍历浮动式图片(不在文本流中的图片)
    for floating_img in doc.shapes:
        if floating_img.shape_type == 13:
            if floating_img.is_linked:
                img_full_path = floating_img.link_path
                if img_full_path.lower().endswith('.emf'):
                    file_name = os.path.splitext(os.path.basename(img_full_path))[0]
                    emf_file_names.append(file_name)
    
    # 去重后返回结果
    return list(set(emf_file_names))

# 示例调用:替换成你的网络驱动器文档路径
if __name__ == "__main__":
    target_doc = r"\\your-network-drive\docs\target-document.docx"
    extracted_names = extract_emf_image_names(target_doc)
    
    print("提取到的.emf图片文件名(不含扩展名):")
    for name in extracted_names:
        print(f"- {name}")

代码说明

  1. 覆盖所有图片类型:同时遍历inline_shapes(文本内的嵌入式图片)和shapes(浮动式图片),避免漏掉任何位置的图片
  2. 兼容链接/嵌入图片:通过is_linked属性区分链接式图片(直接获取网络路径)和嵌入式图片(从docx内部关联信息提取文件名)
  3. 适配网络路径:Python支持直接使用SMB网络路径(比如\\server\share\file.docx),不需要额外映射驱动器
  4. 自动去重:用set过滤掉重复插入的同一张图片,保证结果唯一

如果你的已有导出工具已经将嵌入式图片导出到本地目录,也可以直接遍历该目录下的.emf文件提取文件名,不过上面的代码不需要依赖导出工具,直接从docx文件解析获取。

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

火山引擎 最新活动