郑培寅 曹艳杰 余志远
摘 要:Excel和Word为Office办公软件的两种组件,在文字处理、数据统计分析方面有着强大的功能。在具体工作中,两者的数据交互极为常见。本文主要介绍在大批量数据背景下,通过VBA技术实现从Word文档中提取信息到Excel表格,实现数据的快速、准确、自动转换。
关键词:Excel VBA;Word表格;Excel;批量提取
中图分类号:TP391.13文献标识码:A文章编号:1003-5168(2019)16-0035-02
Abstract: Excel and Word are two components of Office office software. They have powerful functions in word processing and data statistical analysis. Data interaction between them is very common in work. This paper mainly introduced how to extract information from Word document to Excel table by VBA technology under the background of mass data, so as to realize fast, accurate and automatic conversion of data.
Keywords: Excel VBA;Word table; Excel;batch extraction
1 应用背景
目前,Office在各行各业的应用非常广泛。而Word和Excel作为最常用的两款工具,具有非常强大的文字和数据处理功能,两者之间的数据交换也非常方便,如从Excel表格批量提取数据到Word文档,可以使用Word中的“邮件合并”功能实现。但是,并不是所有的工作都能通过常规手段轻松实现,而Office为此提供了各个组件之间交互的工具,即VBA(Visual Basic Application),用于解决一些较为特殊的问题[1]。
部分单位因之前信息管理的局限性或其他原因,很多数据分散地存储在Word表格中,而Word表格形式的数据很难进行数据查询、汇总分析等操作,也很难直接作为数据源录入数据库。在面对繁杂、庞大的信息数据时,使用常规方法可能会耗费更多的人力和时间成本。此时,借助Office自带的二次开发工具VBA将能很好地处理此类问题,极大提高工作效率和准确度。
2 应用实例
在现实工作中,需要从Word表格中提取信息的情况较多,如个人简历、党员信息、档案信息及各种申请表、审批表等[2]。本文以某单位档案标签信息的提取为例,说明如何从大量Word表格中提取信息到Excel。
表1为某部门档案标签信息,共有档案号、管理部门、档案类型、地址、所有人、存档日期、保存期限、页数等8个字段信息,若按常规方法将大批量该类文档中的信息复制到Excel中,将耗费大量精力,并且很难保证正确率。由此,可通过VBA技术实现该功能。在使用VBA之前,首先应启用Excel开发工具功能,同时在宏设置中选择启用所有宏。设置完成后新建一个Excel文件,在工作簿sheet1中按顺序录入8个字段作为标题。
上述工作完成后,选择“开发工具”选项卡,打开Visual Basic编辑器,在编辑器中插入一个模块,并将下面代码复制到模块中。本案例实现的代码如下:
Sub 提取信息()
Dim wdApp As Word.Application
Dim curDoc As Word.Document
Dim fpath, filename, fn As String
Dim i As Integer
Set wdApp = CreateObject("word.Application") '新建Word对象
With Application.FileDialog(msoFileDialogFolderPicker)
打开Word存放目录并提取路径
If .Show = False Then Exit Sub
fpath = .SelectedItems(1) & "\"
End With
filename = Dir(fpath & "*.docx")
Do While filename <> ""
fn = fpath & filename
Set curDoc = wdApp.Documents.Open(fn) '打開Word文件
i = 2 '从表格第2行开始复制
Sheet1.Cells(i, 1)=curDoc.Tables(1).Cell(6, 3)
Sheet1.Cells(i, 2)=curDoc.Tables(1).Cell(1, 1)
Sheet1.Cells(i, 3)=curDoc.Tables(1).Cell(2, 1)
Sheet1.Cells(i, 4)=curDoc.Tables(1).Cell(3, 1)
Sheet1.Cells(i, 5)=curDoc.Tables(1).Cell(4, 1)
Sheet1.Cells(i, 6)=curDoc.Tables(1).Cell(5, 1)
Sheet1.Cells(i,7)=curDoc.Tables(1).Cell(5, 3)
Sheet1.Cells(i,8)=curDoc.Tables(1).Cell(6, 1)
复制相应表格内容到当前Excel
i=i+1
curDoc.Close False
filename = Dir '继续下一个word文件
Loop
wdApp.Quit
Set wdApp = Nothing
MsgBox "信息提取完毕!", , "提示"
End Sub
上述代码主要定义了一个Word应用程序对象,并打开文件对话框,用户可以通过对话框选择Word文档存放的目录,并将Word对象指向存在该目录中的*.docx(可根据实际需要修改文件类型)文件,然后从Word文档的表格中提取相应信息到当前Excel表格。本实例假设每个Word文档中存放了一个表格,其中curDoc.Tables(1)语句中的“1”即為该Word文档中的第一个表格。如果每个Word文档中有多个表格,则可使用curDoc.Tables.Count语句统计该Word文档中的表格数量,并选择提取某个表格中的某些信息。
在上述代码复制到新建的模块之后,在Excel中插入一个按钮控件(见图1),将该控件指向已生成的宏“提取信息”,点击该按钮,选择用户文件目录即可开始信息提取。在本实例中,信息提取后对格式进行简单修改,结果见表2。提取完成后,即可对Excel表格中的数据进行汇总分析。
3 结语
应用Excel VBA技术从Word表格中提取信息已在工作中得到广泛应用,并取得了良好的使用效果。特别是目前很多单位都在进行数据库的建设和档案资料的数字化,通过Excel向数据库中导入信息是最为常用的方法,因此,该应用首先通过VBA技术将信息提取至Excel,成功解决了采用常规处理时大量繁杂重复的工作,提高了工作自动化程度。在实际工作中,可根据不同情况具体分析,适当修改VBA代码,以适应不同的表格类型,达到快速准确提取信息的效果。
参考文献:
[1]Excel,Home.Excel 2007 VBA实战技巧精粹[M].北京:人民邮电出版社,2013.
[2]顾海花. VBA在Word和Excel数据交互中的应用[J].南通职业大学学报,2003(3):49-50.