ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 批量插入图片到word或者excel中

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-4-4 17:03 | 显示全部楼层
约定的童话 发表于 2021-3-30 21:50
新模板没用,还是用之前的模板做的效果,看下https://wwx.lanzoui.com/i2EIqnhjadc

大佬,代码能分享一下吗,万分感谢

补充内容 (2021-4-7 15:31):
能分享分享嘛,目前也只有你的合适,万分感谢

TA的精华主题

TA的得分主题

发表于 2021-4-6 22:24 | 显示全部楼层
wuqing960412 发表于 2021-3-29 20:56
麻烦各位大佬瞅瞅,谢谢

试试看,笨招
Sub 提取照片()
    Dim filesys As Object, drv As Object, fd As FileDialog, t As Table
    Dim wd As Document, wd1 As Document, w$, s$, m$, n%, i%, a%, a1%, b%, b1%, d%, h%
    Application.ScreenUpdating = False
    Set filesys = CreateObject("scripting.filesystemobject")
    Set fd = Application.FileDialog(4)
    fd.AllowMultiSelect = True
    fd.Show               '请选择子文件夹的上一级文件夹,获得父文件夹路径
    On Error Resume Next
    s = fd.InitialFileName
    For Each drv In filesys.GetFolder(s).SubFolders
        If drv.Size > 0 Then
            m = drv.Name
            n = filesys.GetFolder(s & m & "\").Files.Count
            Set wd = Documents.Add
            Selection.TypeText "七、现场照片等影像成果" & m & Chr(13)
            Selection.TypeText Chr(13)
            a = ActiveDocument.Sections.First.PageSetup.PageHeight '页高
            a1 = ActiveDocument.Sections.First.PageSetup.TopMargin '当前文档第一节所在页的顶边距
            h = (a - 2 * a1 - 70) / 28.35
            b = ActiveDocument.Sections.First.PageSetup.PageWidth '页宽
            b1 = ActiveDocument.Sections.First.PageSetup.LeftMargin '左边距
            d = (b - 2 * b1 - 10) / 28.35
            If n Mod 2 = 0 Then
                If n = 2 Then
                    Set t = wd.Tables.Add(Selection.Range, 2, 1)
                    For i = 1 To 2
                        t.Range.Cells(i).Range.InlineShapes.AddPicture s & m & "\" & m & "_" & i & ".jpg"
                        wd.InlineShapes(i).LockAspectRatio = msoFalse
                        wd.InlineShapes(i).Height = CentimetersToPoints(h / 2)
                        wd.InlineShapes(i).Width = CentimetersToPoints(d)
                    Next
                Else
                    Set t = wd.Tables.Add(Selection.Range, n / 2, 2)
                    For i = 1 To n
                        t.Range.Cells(i).Range.InlineShapes.AddPicture s & m & "\" & m & "_" & i & ".jpg"
                        wd.InlineShapes(i).LockAspectRatio = msoFalse
                        wd.InlineShapes(i).Height = CentimetersToPoints(h / 2)
                        wd.InlineShapes(i).Width = CentimetersToPoints(d / 2)
                    Next
                End If
            Else
                Set t = wd.Tables.Add(Selection.Range, (n - 1) / 2, 2)
                For i = 1 To n
                    If i <= n - 1 Then
                       t.Range.Cells(i).Range.InlineShapes.AddPicture s & m & "\" & m & "_" & i & ".jpg"
                       wd.InlineShapes(i).LockAspectRatio = msoFalse
                       wd.InlineShapes(i).Height = CentimetersToPoints(h / 2)
                       wd.InlineShapes(i).Width = CentimetersToPoints(d / 2)
                    Else
                       Selection.EndKey unit:=wdStory
                       Selection.TypeText Chr(13)
                       Selection.Range.InlineShapes.AddPicture s & m & "\" & m & "_" & i & ".jpg"
                       wd.InlineShapes(n).LockAspectRatio = msoFalse
                       wd.InlineShapes(n).Height = CentimetersToPoints(h / 2)
                       wd.InlineShapes(n).Width = CentimetersToPoints(d + 0.35)
                    End If
                Next i
            End If
        End If
        wd.SaveAs2 (s & m & ".docx")
        wd.Close
     Next drv
     Set fd = Nothing
     Set filesys = Nothing
     Application.ScreenUpdating = True
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-4-7 15:36 | 显示全部楼层
z9bhd 发表于 2021-4-6 22:24
试试看,笨招
Sub 提取照片()
    Dim filesys As Object, drv As Object, fd As FileDialog, t As Tab ...

麻烦看下,我这个是怎么回事,还有麻烦问下这个如何读取模板,根据照片生成一个个word文档
2021-04-07_153316.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-4-7 15:50 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
z9bhd 发表于 2021-4-6 22:24
试试看,笨招
Sub 提取照片()
    Dim filesys As Object, drv As Object, fd As FileDialog, t As Tab ...

大佬。,麻烦看下这个https://wwe.lanzous.com/icCvynr71eh

TA的精华主题

TA的得分主题

发表于 2021-4-7 15:56 | 显示全部楼层
wuqing960412 发表于 2021-4-7 15:36
麻烦看下,我这个是怎么回事,还有麻烦问下这个如何读取模板,根据照片生成一个个word文档

不用读取模板,已按你的要求设置好了,你要先打开word,新建一个文档,再把代码复制进去,点选模板所在的文件夹就可以了

TA的精华主题

TA的得分主题

发表于 2021-4-8 08:34 | 显示全部楼层
wuqing960412 发表于 2021-4-7 15:50
大佬。,麻烦看下这个https://wwe.lanzous.com/icCvynr71eh

不是什么大佬,菜鸟一个,和你相比只是时间比较多而已,附件已下载,不一定搞的好,试试看吧

TA的精华主题

TA的得分主题

发表于 2021-4-8 12:41 | 显示全部楼层
wuqing960412 发表于 2021-4-7 15:50
大佬。,麻烦看下这个https://wwe.lanzous.com/icCvynr71eh

你的模板没法用,参照模板要求写了个代码,测试结果基本符合你的要求,你看看,如果不行再做调整

Sub 提取照片()
    Dim filesys As Object, drv As Object, fd As FileDialog, t As Table
    Dim wd As Document, wd1 As Document, w$, s$, m$, n%, i%, a%, a1%, b%, b1%, d%, h%
    Application.ScreenUpdating = False
    Set filesys = CreateObject("scripting.filesystemobject")
    Set fd = Application.FileDialog(4)
    fd.AllowMultiSelect = True
    fd.Show
    On Error Resume Next
    s = fd.InitialFileName
    s1 = Replace(s, "照片", "结果")
    For Each drv In filesys.GetFolder(s).SubFolders
        If drv.Size > 0 Then
            m = drv.Name
            n = filesys.GetFolder(s & m & "\").Files.Count
            Set wd = Documents.Add
            With Selection
                .Font.Name = "宋体"
                .Font.Bold = True
                .Font.Size = "12"
                .Text = "七:现场照片等影像成果" & Chr(13)
                .EndKey unit:=wdStory
            End With
            If n Mod 2 = 0 Then
                If n = 2 Then
                    Set t = wd.Tables.Add(Selection.Range, 2, 1)
                    For i = 1 To 2
                        t.Range.Cells(i).Range.InlineShapes.AddPicture s & m & "\" & m & "_" & i & ".jpg"
                        wd.InlineShapes(i).LockAspectRatio = msoFalse
                        wd.InlineShapes(i).Height = CentimetersToPoints(11.11)
                        wd.InlineShapes(i).Width = CentimetersToPoints(14.62)
                    Next
                Else
                    Set t = wd.Tables.Add(Selection.Range, n / 2, 2)
                    For i = 1 To n
                        t.Range.Cells(i).Range.InlineShapes.AddPicture s & m & "\" & m & "_" & i & ".jpg"
                        wd.InlineShapes(i).LockAspectRatio = msoFalse
                        wd.InlineShapes(i).Height = CentimetersToPoints(11.11)
                        wd.InlineShapes(i).Width = CentimetersToPoints(7.23)
                    Next
                End If
            Else
                For i = 1 To n
                    If i = 1 Then
                       
                       Selection.Range.InlineShapes.AddPicture s & m & "\" & m & "_" & i & ".jpg"
                       wd.InlineShapes(i).LockAspectRatio = msoFalse
                       wd.InlineShapes(i).Height = CentimetersToPoints(11.11)
                       wd.InlineShapes(i).Width = CentimetersToPoints(14.62)
                        Selection.EndKey unit:=wdStory
                        Selection.TypeText Chr(13)
                        Selection.EndKey unit:=wdStory
                       Set t = wd.Tables.Add(Selection.Range, 1, 2)
                    Else
                       t.Range.Cells(i - 1).Range.InlineShapes.AddPicture s & m & "\" & m & "_" & i & ".jpg"
                       wd.InlineShapes(i).LockAspectRatio = msoFalse
                       wd.InlineShapes(i).Height = CentimetersToPoints(11.11)
                       wd.InlineShapes(i).Width = CentimetersToPoints(7.23)
                    End If
                Next i
            End If
        End If
        wd.SaveAs2 (s1 & m & ".docx")
        wd.Close
     Next drv
     Set fd = Nothing
     Set filesys = Nothing
     Application.ScreenUpdating = True
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-23 21:50 , Processed in 0.044057 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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