You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何获取Word文档中全部图片引用(含嵌入型)并导出至文件?

如何提取Word文档中所有图片(含嵌入型)并记录信息?

嘿,我懂你现在的困扰——你用Win10上的Office 2016处理.doc格式的Word文档,想把所有图片(不管是链接的还是嵌入的)都找出来记录下来,方便后续复制到单独文件夹。但你现有的VBA代码只能抓到msoLinkedPicturewdInlineShapeLinkedPicture这种链接型的图片,对嵌入的msoPicturewdInlinePicture完全没辙,对吧?

为什么嵌入图片没法直接获取来源路径?

因为嵌入的图片已经被打包进Word文档的内部结构里了,不存在外部的文件路径可以直接读取。所以我们的解决方案是:直接把嵌入图片导出到指定文件夹,同时记录导出后的文件路径,这样就能实现你后续整理图片的需求。

修改后的VBA代码(支持所有图片类型)

下面是调整后的代码,它不仅能抓取链接图片的路径,还能导出嵌入图片并记录它们的导出位置:

Sub ExportAllPictures()
    Dim FileOut As String
    Dim exportFolder As String
    ' 自定义导出文件夹和记录文件路径,根据需求修改
    exportFolder = "C:\Temp\Images\ExportedPics\"
    FileOut = "C:\Temp\Images\Pictures.txt"
    
    ' 自动创建导出文件夹(如果不存在)
    If Dir(exportFolder, vbDirectory) = "" Then
        MkDir exportFolder
    End If
    
    Open FileOut For Output As #1
    Dim numOne As Integer, numTwo As Integer, numThree As Integer
    Dim numFour As Integer, numFive As Integer, numSix As Integer
    Dim picCounter As Integer
    numOne = 0: numTwo = 0: numThree = 0
    numFour = 0: numFive = 0: numSix = 0
    picCounter = 1 ' 计数器:给导出图片命名,避免重名覆盖
    
    Dim strShapeRange As String
    Dim strInlineShapes As String
    
    ' 处理文档中的Shape类型图片
    With ActiveDocument.Range
        For Each Shp In .ShapeRange
            With Shp
                If .Type = msoLinkedPicture Then
                    numOne = numOne + 1
                    Print #1, "Linked Picture (Shape): " & .LinkFormat.SourceFullName
                ElseIf .Type = msoPicture Then
                    numTwo = numTwo + 1
                    ' 生成唯一文件名
                    Dim shpPicPath As String
                    shpPicPath = exportFolder & "Shape_Pic_" & picCounter & ".png"
                    ' 导出嵌入图片为PNG格式(可换成pbJPG等)
                    Shp.Export shpPicPath, pbPNG
                    Print #1, "Embedded Picture (Shape): " & shpPicPath
                    picCounter = picCounter + 1
                Else
                    numThree = numThree + 1
                End If
            End With
        Next Shp
        
        ' 处理文档中的InlineShape类型图片
        For Each iShp In .InlineShapes
            With iShp
                If .Type = wdInlineShapeLinkedPicture Then
                    numFour = numFour + 1
                    Print #1, "Linked Picture (Inline): " & .LinkFormat.SourceFullName
                ElseIf .Type = wdInlinePicture Then
                    numFive = numFive + 1
                    ' 生成唯一文件名
                    Dim inlinePicPath As String
                    inlinePicPath = exportFolder & "Inline_Pic_" & picCounter & ".png"
                    ' 导出嵌入图片为PNG格式
                    iShp.Export inlinePicPath, pbPNG
                    Print #1, "Embedded Picture (Inline): " & inlinePicPath
                    picCounter = picCounter + 1
                Else
                    numSix = numSix + 1
                End If
            End With
        Next iShp
    End With
    
    ' 弹出统计信息提示框
    strShapeRange = "msoLinkedPicture: " & numOne & vbCr & "msoPicture: " & numTwo & vbCr & "else_ShapeRange: " & numThree & vbCr
    strInlineShapes = vbCr & "wdInlineShapeLinkedPicture: " & numFour & vbCr & "wdInlinePicture: " & numFive & vbCr & "else_InlineShapes: " & numSix
    MsgBox "处理完成!" & vbCr & vbCr & strShapeRange & strInlineShapes
    Close #1
End Sub

代码关键点说明

  • 自动创建文件夹:如果指定的导出文件夹不存在,代码会自动创建,避免运行报错
  • 唯一文件名:用计数器给每个导出的图片命名,防止不同图片重名覆盖
  • 导出格式:默认用PNG格式导出,你可以把pbPNG换成pbJPGpbGIF等其他格式,根据需求调整
  • 记录明细:在Pictures.txt里会区分链接图片和嵌入图片的路径,方便后续查看

注意事项

  • 运行代码前,确保你对指定的文件夹有写入权限,不然会弹出权限错误
  • 对于.doc格式的文档,Office 2016完全兼容,代码可以正常运行
  • 如果需要保留图片的原始格式,可能需要额外处理,但Word中嵌入的图片大多会被转换为内部格式,导出为PNG/JPG是最通用的方案

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

火山引擎 最新活动