【Excel VBA 编程】从一堆结构固定的Word文档里抓取数据,整理成一张方便使用的
- 2026-09-13 19:52:20
【Excel VBA 编程】从一堆结构固定的Word文档里抓取数据,整理成一张方便使用的“针对大批量、格式一样的Word文档,实现Tables数据自动采集” 大家有没有这样的经历:面对几十份、甚至上百份格式完全相同的Word文档:报告、申请表、合同或求职简历......,为了方便查看或是数据统计分析,需要把每份文件里的特定信息(如姓名、期限、金额......)汇总到一张Excel表格里 如果手动一个个打开文件、复制粘贴,不仅耗时耗力,还很有可能因为眼花缭乱拷串了行,导致数据出错 

总是听到或看到有人问,编程好学吗?如何入门?多久能学会?它能做些什么?怎么写代码呀?执行过程中出问题了谁能帮帮我...如果你也有类似的问题那就赶快关注我的公众号,一起学起来吧!
此时,我们只需要利用学过的VBA编程知识,写一段代码,就能帮我们快速且准确地完成

效果展示
“D:\常用文件\简历”路径下有一批简历,因为是公司官网下载的,所以结构都一样

现在需要抓取每份简历中姓名、年龄、手机号码、学历及求职意向这5类数据,并输出到Excel中,为了快速查看感兴趣的简历,A列还设置了超链接,最终效果如下:


代码
代码参考:
Sub DataScrapFromWord()' 声明变量Dim wdApp As Object, wdDoc As ObjectDim xlWs As WorksheetDim strFolderPath As String, strFileName As StringDim lngRow As LongDim arrData() As VariantDim i As Integer' 设置Word文档所在文件夹路径(根据实际情况修改)strFolderPath = "D:\常用文件\简历\"' 设置Excel中用于输出的工作表(根据实际情况修改)Set xlWs = ThisWorkbook.Worksheets("Sheet1")lngRow = 2xlWs.Range("A2").CurrentRegion.Offset(1, 0).ClearContentsOn Error Resume NextSet wdApp = GetObject(, "Word.Application")If Err.Number <> 0 ThenSet wdApp = CreateObject("Word.Application")End IfOn Error GoTo 0wdApp.Visible = FalsestrFileName = Dir(strFolderPath & "*.doc*")Application.ScreenUpdating = FalseApplication.DisplayAlerts = FalseDo While strFileName <> ""Set wdDoc = wdApp.Documents.Open(strFolderPath & strFileName)'(根据实际情况修改:抓取想要的数据)With wdDoc.Tables(1)' A列:超链接xlWs.Hyperlinks.Add Anchor:=Range("A" & lngRow), _Address:=strFolderPath & strFileName, _TextToDisplay:="打开简历"xlWs.Cells(lngRow, 2).Value = Application.Clean(.Cell(1, 2).Range.Text) ' word中第1行第2列是姓名->B列xlWs.Cells(lngRow, 3).Value = Application.Clean(.Cell(1, 4).Range.Text) ' word中第1行第4列是性别->C列xlWs.Cells(lngRow, 4).Value = Application.Clean(.Cell(1, 6).Range.Text) ' word中第1行第6列是出生年月->D列'在身份证号、电话号码等长数字前加单引号 "'",可强制Excel将其以文本格式存储xlWs.Cells(lngRow, 5).Value = "'" & Application.Clean(.Cell(3, 2).Range.Text) ' word中第3行第2列是联系方式->E列xlWs.Cells(lngRow, 6).Value = Application.Clean(.Cell(3, 6).Range.Text) ' word中第3行第6列是学历->F列xlWs.Cells(lngRow, 7).Value = Application.Clean(.Cell(5, 2).Range.Text) ' word中第5行第2列是应聘职务->G列End WithwdDoc.Close SaveChanges:=FalseSet wdDoc = NothinglngRow = lngRow + 1strFileName = Dir()LoopwdApp.QuitSet wdApp = NothingApplication.ScreenUpdating = TrueApplication.DisplayAlerts = TrueMsgBox "数据提取完成!共处理 " & (lngRow - 2) & " 个文档。", vbInformationEnd Sub
涉及到的编程知识点是Word文档中表格的操作,其使用的核心对象模型是Tables集合、Table对象、Cell对象:
Tables集合代表一个文档(Document)、一个区域(Range)或一个选定内容(Selection)中的所有表格。可使用 wdDoc.Tables 来引用当前文档中的所有表格
Table对象则代表单个表格。它是Tables集合的成员,可以通过索引号(如 Tables(1) 代表第一个表格)或循环遍历来访问
Cell对象代表一个单元格,其使用方法与Excel中Cells类似,通过行号和列号引用,如.Cell(3, 6),则代表第3行第6列
而Application.Clean的作用是从Word表格单元格的文本中移除所有非必要的、不可见的格式与控制字符,从而确保提取出的数据是“干净”的、可直接用于后续处理或分析的纯文本
好了,今天的内容到此结束了,下期继续
公众号同时也在不间断地分享免费的编程案例,如果想学习更多的编程知识,无论是用来提升自动化办公效率还是想提升自我,都可以关注我的公众号,解锁更多的VBA技能
本文来自网友投稿或网络内容,如有侵犯您的权益请联系我们删除,联系邮箱:wyl860211@qq.com 。