ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助]提取3000个文件中的图片并另存...

[复制链接]

TA的精华主题

TA的得分主题

发表于 2007-5-22 11:36 | 显示全部楼层 |阅读模式

有一个目录,存储的是产品简介,每个产品为一个Word文件(文件名即为产品编码),每个文件中附有该产品的1或多张图片(文件中未使用公司logo等其它任何图片,且以单张图片形式居多)。

现需在系统中录入产品信息,因此需要先将各图片提取出来作为链接。而使用“打开文件-->另存为html-->选取图片”这样的方法就太慢了!

各位知道是否有什么方法或者第三方软件,可以方便地提取出图片,并以文件名的形式存储。例如:

假设文件“Prod-001.doc”内有两张图片,则可以存储成:prod-001-1.jpg、prod-001-2.jpg这样的形式?

如有困难,只提取第一张图片也可以。

谢谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-5-22 12:01 | 显示全部楼层

想到处理方法了。

这个问题的关键在于:将Word文件转换为html格式。因此只要找到一款软件,可以支持批量转换即可。类似“Ultra PPT to HMTL convert”等均可以完成此功能。

然后,就可以用DOS命令“dir /b *.jpg > lista.bat”取出带路径的jpg文件,然后用Excel打开此文件,修改成“ren <路径>\1.jpg <路径>.jpg”的形式,再执行即可改名。

最后,将所有的jpg文件搜集在一起即可。

TA的精华主题

TA的得分主题

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

可试试运行如下过程
Sub test()
'批量提取指定目录中所有doc文档中的图片

    Dim odoc As Document, ndoc As String, odir1 As String, odir2 As String
    Dim temp1 As String, temp2 As String, ndir As String, njpg As String, i As Integer
    On Error Resume Next
    Application.ScreenUpdating = False
    ChDrive "E"  '设置当前驱动器
    odir1 = "E:\ee\"  '指定doc文档存放位置
    odir2 = "E:\eee\"  '指定临时文件存放位置
    ChDir odir1  '确定搜索doc文档的路径
    ndoc = Dir("*.doc")  '搜索当前目录中所有doc文档
    Do While ndoc <> ""  '在指定目录内各doc文档循环操作
        Set odoc = Documents.Open(odir1 & ndoc)
        '如果文档中有嵌入式图形或浮动图形对象,则将文档临时另存为网页文件
        If odoc.InlineShapes.Count > 0 Or odoc.Shapes.Count > 0 Then
'        odoc.SaveAs FileName:=odoc.Path & "e\" & Left(odoc, Len(odoc) - 4) & ".htm", FileFormat:=wdFormatFilteredHTML
        odoc.SaveAs FileName:=odir2 & Left(odoc, Len(odoc) - 4) & ".htm", FileFormat:=wdFormatHTML
        End If
        temp1 = temp1 & vbTab & odoc.FullName  '以字符串记录所有另存的文件名(含路径)
        odoc.Close False  '关闭当前文档
        ndoc = Dir()
    Loop
    '搜索上述指定"另存为"文件夹中所有以".files"字符串结尾的子文件夹
    ndir = Dir(odir2 & "*.files", vbDirectory)
    Do While ndir <> ""
        temp2 = temp2 & vbTab & odir2 & ndir  '以字符串记录搜索到的所有符合条件的子文件夹名称
        ndir = Dir()
    Loop
    For i = 1 To UBound(Split(temp2, vbTab))  '依次搜索上述各子文件夹中的JPG图像文件
        njpg = Dir(Split(temp2, vbTab)(i) & "\*.jpg")
        Do While njpg <> ""
            '将搜索到的图像文件另存于指定文件夹(暂定为原doc文档存放位置)
            '图像文件命名规则设为:文件名+原自动生成图片的数字编号部分
            FileCopy Split(temp2, vbTab)(i) & "\" & njpg, _
                odir1 & Replace(Replace(Split(temp2, vbTab)(i), odir2, ""), ".files", "") & "_" & Replace(njpg, "image", "")
            njpg = Dir()
        Loop
    Next i
    '删除临时另存的文件
    For i = 1 To UBound(Split(temp1, vbTab))
        Kill Split(temp1, vbTab)(i)
        Kill Split(temp2, vbTab)(i) & "\*.*"
        RmDir Split(temp2, vbTab)(i)
    Next i
    Application.ScreenUpdating = True
End Sub
有个问题尚未解决:将doc文档另存为网页时,原文档中的每张图片对应有2个JPG文件,保存为“筛选过的网页”时,虽可一一对应,但图片像素不高,有待补充。测试版本为word2003。

[此贴子已经被作者于2007-5-23 17:44:57编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-5-24 08:25 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
谢谢sylun了,你的是正解,我的算是“曲线救国”.

TA的精华主题

TA的得分主题

发表于 2007-5-24 10:04 | 显示全部楼层
QUOTE:
以下是引用周日游鱼在2007-5-24 8:25:55的发言:
谢谢sylun了,你的是正解,我的算是“曲线救国”.

其实论坛中已有多种处理方法,我的只是初级的,只针对一种图像格式,练练手而已,谈不上正解。

TA的精华主题

TA的得分主题

发表于 2007-5-24 16:57 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
图片像素不高非常容易解决,将图片还原reset后另存。如果本来就被压缩就没有救了!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 22:42 , Processed in 0.040985 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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