|
请查收动态图及附件
WordtoExcel代码如下:
Dim brr(), sfolder$, x& '公共变量
Sub WordtoExcel批量提取()
Dim FSO, arr, StarTime As Date, EndTime As Date
StarTime = Timer '开始时间
Application.ScreenUpdating = False
Call 递归(ThisWorkbook.Path) '遍历当前文件夹及所有子文件夹下的文件
With Sheet3 '工作表【配方汇总新】
.[A2].Resize(UBound(brr, 2), 6) = Application.Transpose(brr) '数组赋值给工作表中的E列
With .Range("A2:F" & UBound(brr, 2) + 1) '设定格式
.Font.Size = 10: .Borders.Value = 1
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
.Columns("A:F").EntireColumn.AutoFit '自动适合栏宽
End With
Application.ScreenUpdating = True
EndTime = Timer '结束时间
MsgBox "从Word中批量提取数据已完成!" & Chr(13) & Format(EndTime - StarTime, "程序运行时间约为:0.00秒"), 64, "提取结果"
End Sub
Sub 递归(ByVal pth) '递归 遍历当前文件夹及所有子文件夹下的文件
'意思是:总结算法规律,通过对自身的反复调用进行深化或遍历处理。
'可以大大缩减代码语句的数量。(相同的算法不用重复写代码了。)
Dim FSO, f, ff, fd, kk, 文件路径$
Set FSO = CreateObject("Scripting.FileSystemObject")
Set f = FSO.GetFolder(pth) '获取文件夹的路径
ff = Dir(f & "\*.doc*") '循环查找Word,可以适应不同版本 '具体提取哪类文件,还是需要根据文件扩展名进行处理
Do While ff <> "" '在目录中循环
文件路径 = f & "\" & ff
Call 从Word中提取数据到Excel中(文件路径) '文件路径
ff = Dir
Loop '结束循环
For Each fd In f.subfolders '子文件夹中遍历
If fd <> sfolder Then 递归 (fd) '子文件夹不是“提取文件”时,进行递归
Next fd
End Sub
Sub 从Word中提取数据到Excel中(文件路径$)
Dim WrdDocApp As Object, wordFilePath$, i As Byte, k As Byte, j As Byte
Application.ScreenUpdating = False
Set WrdDocApp = CreateObject("Word.Application") '用Set关键词创建Word应用程序对象!
wordFilePath = 文件路径 '文件的路径
On Error Resume Next
Set WrdDoc = GetObject(wordFilePath) '使用此代码 ,打开Word文件 视窗会自动隐藏(给人的感觉是没有打开做的操作)
With WrdDoc.Tables(1) '提取Word文件内每1页的第1个表格内容
For i = 4 To .Rows.Count - 3
If WorksheetFunction.Clean(.cell(i, 1).Range.Text) <> "" Then k = k + 1
Next i
End With
If UBound(brr, 2) = "" Then
x = x + k
Else
x = x + UBound(brr, 2) + k
End If
jj = jj + UBound(brr, 2)
ReDim Preserve brr(1 To 6, 1 To x) '重新定义数组
With WrdDoc.Tables(1) '提取Word文件内每1页的第1个表格内容
For j = 1 To k
brr(1, jj + j) = WorksheetFunction.Clean(.cell(.Rows.Count, 6).Range.Text) '表格的最后1行第6列的单元格清除不可见字符后的内容赋值给数组
brr(2, jj + j) = WorksheetFunction.Clean(.cell(1, 4).Range.Text)
brr(3, jj + j) = WorksheetFunction.Clean(.cell(1, 6).Range.Text)
brr(4, jj + j) = WorksheetFunction.Clean(.cell(j + 3, 1).Range.Text)
brr(5, jj + j) = WorksheetFunction.Clean(.cell(j + 3, 2).Range.Text)
brr(6, jj + j) = WorksheetFunction.Clean(.cell(j + 3, 3).Range.Text)
Next j
End With
WrdDocApp.Quit '关闭Word程序
Set WrdDocApp = Nothing
Application.ScreenUpdating = True
End Sub
|
评分
-
2
查看全部评分
-
|