ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 同名学生相片重命名问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-4-6 11:43 | 显示全部楼层 |阅读模式
本帖最后由 szqhb 于 2023-4-23 11:00 编辑

偶得一提取学籍卡信息的文档,详见https://club.excelhome.net/thread-1462783-3-1.html
在测试时发现同名学生的相片如果用名字命名相片,只能够提取到最后一个学生的相片(即提取的相片重命名时会覆盖前面的),帮忙修改一下代码。如让第2个起的重名学生在姓名后面加上学籍号或者该生在Word里的序号i。

修改后的代码如下(附件中的代码请自行更换):

Sub Main()
   'Date:2019/2/27 正月廿三 Wednesday
   '标签:word导出图片,word表格数据写到excel
   '备注1:测试过程中会出现word被锁定无法编辑 导致无法打开被选择的word文件 进程删除WINWORD.exe*32 再打开word文件
   '备注2:同上 正在等待其他某个应用程序以完成对象链接与嵌入操作
    Dim fso
    Set fso = CreateObject("Scripting.FileSystemObject")
    Dim DiaFile As FileDialog, I As Integer, wordPath As String
    Dim arr2(1 To 3000, 1 To 14)
    Dim WordApp As Object, wdDoc As Object, Table As Object
    Dim myshape As Object, K As Long
    Set DiaFile = Application.FileDialog(msoFileDialogFilePicker)
    With DiaFile
        .AllowMultiSelect = False
        .Filters.Clear
        .InitialFileName = ThisWorkbook.Path
        .Filters.Add "word Files", "*.doc*"
        .Title = "请选择Word 文件"
        If .Show() = -1 Then
            wordPath = .SelectedItems(1)
        End If
    End With

    If Len(wordPath) > 0 Then
        Application.ScreenUpdating = False
        Set WordApp = CreateObject("Word.Application")

        Set wdDoc = WordApp.Documents.Open(wordPath)
        For I = 1 To wdDoc.Tables.Count
            '----------------处理表格-----------------------------
            Set Table = wdDoc.Tables(I)
            K = K + 1
            arr2(I, 1) = Replace(Table.cell(2, 2).Range.Text, Chr(13) & Chr(7), "")        '姓名
            arr2(I, 2) = Replace(Table.cell(2, 4).Range.Text, Chr(13) & Chr(7), "")        '性别
            arr2(I, 3) = Replace(Table.cell(3, 2).Range.Text, Chr(13) & Chr(7), "")        '学籍号
            arr2(I, 4) = Replace(Table.cell(3, 6).Range.Text, Chr(13) & Chr(7), "")        '出生日期
            arr2(I, 5) = "'" & Replace(Table.cell(4, 4).Range.Text, Chr(13) & Chr(7), "")        'sfz
            arr2(I, 6) = Replace(Table.cell(5, 2).Range.Text, Chr(13) & Chr(7), "")        '所在学校
            arr2(I, 7) = Replace(Table.cell(6, 6).Range.Text, Chr(13) & Chr(7), "")        '所在学校
            arr2(I, 8) = Replace(Table.cell(7, 2).Range.Text, Chr(13) & Chr(7), "")        '所在学校
            arr2(I, 9) = Replace(Table.cell(10, 2).Tables(1).cell(2, 2).Range.Text, Chr(13) & Chr(7), "")
            arr2(I, 10) = Replace(Table.cell(10, 2).Tables(1).cell(2, 3).Range.Text, Chr(13) & Chr(7), "")
            arr2(I, 11) = Replace(Table.cell(10, 2).Tables(1).cell(3, 2).Range.Text, Chr(13) & Chr(7), "")
            arr2(I, 12) = Replace(Table.cell(10, 2).Tables(1).cell(3, 3).Range.Text, Chr(13) & Chr(7), "")
            arr2(I, 13) = Replace(Table.cell(13, 1).Range.Text, Chr(13) & Chr(7), "")        '学籍变动时间
            arr2(I, 14) = Replace(Table.cell(13, 2).Range.Text, Chr(13) & Chr(7), "")        '学籍变动情况
            Set Table = Nothing
            '----------------处理图片-----------------------------
            Set myshape = wdDoc.InlineShapes(I)
            If myshape.Type = 3 Then
                myshape.Select
                Set myshape = myshape.ConvertToShape
                With myshape
                    .ScaleHeight 1, True, msoScaleFromMiddle
                    .ScaleWidth 1, True, msoScaleFromMiddle
                End With

                wdDoc.ActiveWindow.Selection.Copy
                With Worksheets("Sheet1").ChartObjects.Add(0, 0, myshape.Width, myshape.Height).Chart
                    .Parent.Select
                    .Paste
                   ' .Export wdDoc.Path & "\提取后重命名的照片\" & arr2(I, 3) & ".jpg" '相片以学籍号命名
                  
                   ' .Export wdDoc.Path & "\提取后重命名的照片\" & arr2(I, 1) & arr2(I, 3) & ".jpg" '相片以姓名和学籍号命名
                   If Not fso.FileExists(wdDoc.Path & "\提取后重命名的照片\" & arr2(I, 1) & ".jpg") Then '判断,如果图片文件夹不存在同名图片,则以学生姓名命名
                        .Export wdDoc.Path & "\提取后重命名的照片\" & arr2(I, 1) & ".jpg"  '相片以学生名字命名
                   Else '如果图片文件夹存在同名图片,则以学生姓名及学籍号命名以示区分
                     .Export wdDoc.Path & "\提取后重命名的照片\" & arr2(I, 1) & arr2(I, 3) & ".jpg" '以学生姓名及学籍号命名
                   End If
                       .Parent.Delete
                End With
                '还原
                Set myshape = myshape.ConvertToInlineShape
               End If
        Next
        wdDoc.Close 0
        WordApp.Quit
        Set wdDoc = Nothing
        Set WordApp = Nothing
        If K > 0 Then
            Sheet1.Range("A2").Resize(K, 14) = arr2
            MsgBox "操作完成。感谢Excehome技术论坛的“未忘初心“和 “ione_fox“大师!"
        End If
    End If
    Application.ScreenUpdating = True
    Set fso = Nothing
End Sub

批量提取学籍卡信息.zip

534.25 KB, 下载次数: 22

TA的精华主题

TA的得分主题

发表于 2023-4-6 12:09 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
用姓名加学籍号命名照片即可
222.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-4-6 14:23 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
yylucke 发表于 2023-4-6 12:09
用姓名加学籍号命名照片即可

谢谢你的关心!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-16 05:49 , Processed in 0.040819 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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