ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 快崩溃了,如何从几千个相同的WORD文件中提取相应的文字和数值到EXCEL里。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-3-5 13:32 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
几千个相同的WORD文档,但我现在只需要其中的几个数据值,如姓名、个人ID、电话、户籍地址、居住地址,提取到一个excel表中并分列显示,我现在用最原始的方式一条一条复制粘贴,手都要断了,而且工作催要的很急,没办法了。我只有请教本坛的达人了,帮助一个能 需要样式.rar (67.75 KB, 下载次数: 51)



处理的方法。先谢谢大家了!!

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-3-6 13:28 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
经过自己学习本坛达人的VBA,现摸索出来了一点点,能抽取一行数据,但一个文档里的另几个同样的表格和同样数据则不能提取。真心希望本坛的老师们能帮助我,谢谢了。
下面是学习老师们的VBA:
Sub GetDocTablletoSheet()
'请在EXCEL VBE中引用MS WORD
    Dim wdApp As Word.Application, wdDoc As Word.Document, wdTable As Word.Table
    Dim strArray() As Variant, xlSheet As Worksheet, myDialog As FileDialog, oSel As Variant
    Dim myArray(11) As String, r As Integer
    On Error Resume Next
    '定义一个三维数组
    strArray = Array("姓名", "居民身份证号", "联系电话", "户籍地址", "实际居住地址")
    Set wdApp = New Word.Application '取得一个New Word对象
   
    Set myDialog = Application.FileDialog(msoFileDialogFilePicker)
    With myDialog
        .Filters.Clear    '清除所有文件筛选器中的项目
        .Filters.Add "所有 WORD 文件", "*.doc", 1    '增加筛选器的项目为所有WORD文件
        .AllowMultiSelect = True    '允许多项选择
        If .Show = -1 Then    '确定
        
        Application.ScreenUpdating = False
        
            For Each oSel In .SelectedItems    '在所有选取项目中循环
                Set wdDoc = wdApp.Documents.Open(Filename:=oSel, Visible:=False)
                Set wdTable = wdDoc.Tables(1)
                With wdTable '将指定的单元格内容赋值给数组
                    myArray(0) = Replace(.Cell(3, 2).Range.Text, Chr(13) & Chr(7), "")
                    myArray(1) = Replace(.Cell(7, 2).Range.Text, Chr(13) & Chr(7), "")
                    myArray(2) = Replace(.Cell(2, 3).Range.Text, Chr(13) & Chr(7), "")
                    myArray(3) = Replace(.Cell(8, 2).Range.Text, Chr(13) & Chr(7), "")
                    myArray(4) = Replace(.Cell(9, 2).Range.Text, Chr(13) & Chr(7), "")
                End With
                Set wdTable = wdDoc.Tables(2)
                With wdTable '将指定的单元格内容赋值给数组
                    myArray(14) = Replace(.Cell(14, 2).Range.Text, Chr(13) & Chr(7), "")
                    myArray(18) = Replace(.Cell(18, 3).Range.Text, Chr(13) & Chr(7), "")
                    myArray(13) = Replace(.Cell(13, 3).Range.Text, Chr(13) & Chr(7), "")
                    myArray(19) = Replace(.Cell(19, 2).Range.Text, Chr(13) & Chr(7), "")
                    myArray(10) = Replace(.Cell(20, 2).Range.Text, Chr(13) & Chr(7), "")
                End With
                wdDoc.Close False


                r = r + 1 '以下开始稍作更改
                Sheets(1).Range(Cells(r, 1), Cells(r, 5)).Value = myArray '为单元格区域赋值
            Next
            With Sheets(1)
                .Rows(1).Insert
                .[A1:H1].Value = strArray
                .UsedRange.Columns.AutoFit
            End With
        End If
    End With
    wdApp.Quit
    Set wdApp = Nothing
    Application.ScreenUpdating = True '恢复屏幕更新
End Sub

已更改但不能全部提取的结果和样式.rar

84.29 KB, 下载次数: 31

TA的精华主题

TA的得分主题

发表于 2015-3-6 23:07 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
楼主的表格好像有点不规范。。。
如果表格规范的话,应该这样就可以的。
Sub test()
Application.ScreenUpdating = False
Dim aCount&, aTable As Table
Dim arr, brr, i&
With ThisDocument
    aCount = .Tables.Count
    ReDim arr(1 To aCount, 1 To 5)
    For i = 1 To aCount
        Set aTable = .Tables(i)
        brr = Split(aTable.Range.Text, Chr(7))
        arr(i, 1) = Left(brr(39), Len(brr(39)) - 1)
        arr(i, 2) = Left(brr(13), Len(brr(13)) - 1)
        arr(i, 3) = Left(brr(8), Len(brr(8)) - 1)
        arr(i, 4) = Left(brr(44), Len(brr(44)) - 1)
        arr(i, 5) = Left(brr(49), Len(brr(49)) - 1)
    Next
End With
Set aExcel = GetObject(, "Excel.Application")
Set aBook = aExcel.workbooks("需导入表样式.xls")
Set aSheet = aBook.worksheets("高地巷1-4号")
aSheet.Range("A2").Resize(aCount, 5) = arr
Application.ScreenUpdating = True
End Sub

TA的精华主题

TA的得分主题

发表于 2015-3-6 23:20 | 显示全部楼层
楼主的表格有重叠,就懒得写代码了,提示一下吧。
像这种情况只能使用find方法来查询,配合selection来取值。
因为表格有重叠,考虑到要去重,最好使用字典。

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-3-7 17:00 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢你的帮助,但我没有能力,也就是您所教的方法。如果可能的话,请您帮助写一个吧,请以我补充
上传的那个包做类比,(可能你没有打开我补充上传的那个包吧)因一个Word里有些有3-4个相同文档,
但正如您所说是不规范的。我一点办法都没有了。

TA的精华主题

TA的得分主题

发表于 2015-3-8 11:31 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
这种文档是否是扫描得到的?

TA的精华主题

TA的得分主题

发表于 2015-3-8 15:19 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
如果文档规范,很容易解决

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-3-8 15:21 | 显示全部楼层
不是扫描的,给我就是Word的了。可能是输入的人学习不太认真吧,输入张贴表格时就不规范。

TA的精华主题

TA的得分主题

发表于 2015-3-8 22:33 | 显示全部楼层
loquat 发表于 2015-3-6 23:07
楼主的表格好像有点不规范。。。
如果表格规范的话,应该这样就可以的。
Sub test()

为何我尝试时有下标超界?请loquat解释下,谢谢

TA的精华主题

TA的得分主题

发表于 2015-3-8 22:41 | 显示全部楼层
1261181315a 发表于 2015-3-8 22:33
为何我尝试时有下标超界?请loquat解释下,谢谢

请问楼主利用代码完成了工作了吗?请分享一下啊
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-16 07:53 , Processed in 0.024570 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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