ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 541|回复: 14

[求助] 提取图片重命名

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-5-27 22:06 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
求大神写vba代码,提取word里的图片,并根据图片下方格内的内容重命名,放到图片88文件夹中,提取的图片图片不要变小

新建文件夹.zip

1.01 MB, 下载次数: 15

TA的精华主题

TA的得分主题

发表于 2024-5-28 19:55 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

Option Explicit
Sub test()
    Dim strFileName$, strSavePath$, strPath$, inLineShp As InlineShape
   
    Application.ScreenUpdating = False
   
    strPath = ActiveDocument.Path & "\"
    strSavePath = strPath & "图片88\"
    If Dir(strSavePath, vbDirectory) = "" Then MkDir strSavePath
   
    With ActiveDocument
        For Each inLineShp In .InlineShapes
            inLineShp.Select
            With Selection
                .Collapse
                .MoveDown unit:=wdLine
                .MoveEndUntil vbCr
                strFileName = .Range.Text
                ToSaveImg inLineShp, strSavePath & strFileName & ".png"
            End With
        Next
    End With
   
    Application.ScreenUpdating = True
    Beep
End Sub
Function ToSaveImg(ByVal objShp As InlineShape, ByVal strFullPath As String)
    Const TAG_S = "<pkg:binaryData>"
    Const TAGE = "</pkg:binaryData>"
    Dim objNode As Object, IngStart&, IngEnd&, bytImage() As Byte, strXML$, rngShp As Range

    strXML = objShp.Range.WordOpenXML
    IngStart = InStr(strXML, TAG_S)
    If IngStart = 0 Then
        MsgBox "没有图片数据"
        Exit Function
    Else
        IngStart = IngStart + Len(TAG_S)
        IngEnd = InStr(IngStart, strXML, TAGE)
        strXML = Mid$(strXML, IngStart, IngEnd - IngStart)
        Set objNode = CreateObject("MSXML2.DOMDocument").createELement("b64")
        objNode.DataType = "bin.base64"
        objNode.Text = strXML
        bytImage = objNode.nodeTypedValue
        Open strFullPath For Binary As #1
        Put #1, 1, bytImage
        Close #1
        Set objNode = Nothing
    End If
End Function

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-5-28 19:57 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
请参考。。。

18.rar

1.03 MB, 下载次数: 14

评分

3

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-28 20:33 | 显示全部楼层

感谢大佬,没成功,只提取到最后一张图片,没命名

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-28 20:40 | 显示全部楼层

开始用wps打开的,又用word试了下,可以保存,但最后那张图片没命名,就是天空那张

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-28 21:02 | 显示全部楼层
gwjkkkkk 发表于 2024-5-28 19:55
Option Explicit
Sub test()
    Dim strFileName$, strSavePath$, strPath$, inLineShp As InlineShap ...

然后还有重命名的字数多了没显示完,后面的全显示了,前面的没显示,图片多了也没提取完

TA的精华主题

TA的得分主题

发表于 2024-5-28 21:11 | 显示全部楼层
xiangheping 发表于 2024-5-28 21:02
然后还有重命名的字数多了没显示完,后面的全显示了,前面的没显示,图片多了也没提取完

你用简单测试文档的代码用在实际复杂文档上,不出错才怪。
所以你应该提供最复杂的实际文档才对,而非简单的测试文档。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-5-28 22:10 | 显示全部楼层
xiangheping 发表于 2024-5-28 21:02
然后还有重命名的字数多了没显示完,后面的全显示了,前面的没显示,图片多了也没提取完

发个复杂的文档上来看看,我是根据你的提供的文档写的,没问题。。。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-29 06:31 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
gwjkkkkk 发表于 2024-5-28 22:10
发个复杂的文档上来看看,我是根据你的提供的文档写的,没问题。。。

经过反复测试,发现大部分功能正常,只是还有点小问题,就是图片到了第2页就没法提取了,只能提取到第1页的,麻烦大佬有空帮忙修改下

TA的精华主题

TA的得分主题

发表于 2024-5-29 06:41 来自手机 | 显示全部楼层
xiangheping 发表于 2024-5-29 06:31
经过反复测试,发现大部分功能正常,只是还有点小问题,就是图片到了第2页就没法提取了,只能提取到第1页 ...

再发个附件吧,我看下问题在哪里,凭空想象不出。。。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-21 19:17 , Processed in 0.053357 second(s), 19 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表