ARTICLE · 1008231
批量处理word中的表格到excel中
批量处理word中的表格到excel中你~ 有没有遇到过。每月要处理不同word中填写的表格信息到一个excel中的经历,是否要复制粘贴到手软,还要目不转睛的盯着屏幕进行核查,生怕信息有误导致返工; 很不幸~ 我遇到过。不过我这人有些懒,不喜欢挨个文件的复制粘贴,还要再排查以防报错,所以只能有懒人的方式来解决这个问题了,常规的excel公式是无法实现该效果的,要想完美解决这个问题,只能借助vba了; 一、准备工作 1. wps表格中安装宏插件,可以从网上搜索下载vba插件。 2. 将统计汇总的表格文件与要统计的word文件放到同一目录中。 二、业务逻辑流程 1. 考虑到在实际的统计过程中,可能会出现新的word文档追加到统计汇总表中,因此在统计文档中追加统计开始序号以及数据插入行号。 2. 点击任务栏中的工具→开发工具→添加按钮,完成按钮与vb编辑器中方法的绑定 


注意:设计模式下,选中按钮,点击右键,命令按钮对象的编辑功能可修改按钮的名称。 3. 在vb编辑绑定的方法中开始编写整个业务逻辑,流程如下图所示 
三、效果展示 同一目录中准备如下文档,如下。 
统计表格初始样式如下图所示,由于我期望整体表格采用统一的样式,因此表格主题留出两行,以便复制插入行时,保持样式一致;从图中可以看出,目前表格尚没有数据,故数据插入行号为3、统计开始序号为1。 
点击统计按钮,开始统计当前目录中word文档中的表格,目前已知有三个word文档中都记录了一个表格(每个表格有6行,包含标题),统计后结果如下。 
四、VB代码 五、小结 数据统计到excel,就可以根据excel中的各种公式进行数据的个性化展示了~
选择工具中的开发工具

在开发工具中选择命令按钮进行添加

选择开发工具设计模式,选中按钮点击右键可通过属性设置按钮绑定的方法名称。





Private Sub data_statistics_Click()' 声明变量Dim wdApp As Object, wdDoc As ObjectDim xlWs As WorksheetDim strFolderPath As String, strFileName As StringDim lngRow, docNum As LongDim i As Long, j As Long, k As LongDim cellContent As String' 设置Excel中用于输出的工作表Set xlWs = ActiveSheet' 获取当前工作簿所在目录strFolderPath = ThisWorkbook.Path & "\"' 清空目标工作表内容' xlWs.Cells.Clear' 初始化行号lngRow = xlWs.Range("N1").Text - 2docNum = xlWs.Range("N2").Text - 1' 获取文件夹下所有Word文档strFileName = Dir(strFolderPath & "*.doc*")Application.ScreenUpdating = FalseApplication.DisplayAlerts = False' 遍历所有Word文档Do While strFileName <> ""docNum = docNum + 1' 创建Word应用程序对象Set wdApp = CreateObject("Word.Application")wdApp.Visible = FalseSet wdDoc = wdApp.Documents.Open(strFolderPath & strFileName)' 遍历文档中的所有表格For i = 1 To wdDoc.Tables.CountsumRow = wdDoc.Tables(i).Rows.CountsumColumns = wdDoc.Tables(i).Columns.CountDebug.Print strFileName & "共有" & i & "表格,该表格共有:" & sumRow; "行," & sumColumns; "列"' 循环插入多行xlWs.Rows(lngRow + 2).CopyFor j = 0 To sumRow - 2 '表格的总行数减去1,因此不算标题行,由于从0开始,因此又减去1xlWs.Rows(lngRow + 3).Insert Shift:=xlDownNext jFor Each cell In wdDoc.Tables(i).Range.Cells' Debug.Print cell.Range.Text & "的行号为:" & cell.RowIndex & " 列号为:" & cell.ColumnIndex' 获取单元格内容cellContent = Application.WorksheetFunction.Clean(cell.Range.Text)cellContent = Replace(cellContent, Chr(7), "")cellContent = Replace(cellContent, Chr(13), "")' 将内容写入ExcelIf Not IsEmpty(cellContent) And cell.RowIndex <> 1 ThenIf cell.RowIndex = 2 ThenxlWs.Cells(cell.RowIndex + lngRow, 1).Value = docNumEnd IfxlWs.Cells(cell.RowIndex + lngRow, cell.ColumnIndex + 1).Value = cellContentEnd IfNext cell'合并当前excel文档对应行数的a列,b列和c列Set targetRange_A = Range(Cells(lngRow + 2, 1), Cells(lngRow + sumRow - 1, 1))Set targetRange_B = Range(Cells(lngRow + 2, 2), Cells(lngRow + sumRow - 1, 2))Set targetRange_C = Range(Cells(lngRow + 2, 3), Cells(lngRow + sumRow - 1, 3))' 合并单元格targetRange_A.MergetargetRange_B.MergetargetRange_C.Merge' 设置合并后单元格内容居中对齐With targetRange_A.VerticalAlignment = xlCenter.HorizontalAlignment = xlCenterEnd WithWith targetRange_B.VerticalAlignment = xlCenter.HorizontalAlignment = xlCenterEnd WithWith targetRange_C.VerticalAlignment = xlCenter.HorizontalAlignment = xlCenterEnd With'计算下一个文档开始行lngRow = lngRow + sumRow - 1xlWs.Range(Cells(lngRow + 1, 1), Cells(lngRow + 1, 9)).Interior.Color = RGB(230, 238, 221)xlWs.Range(Cells(lngRow + 1, 1), Cells(lngRow + 1, 9)).Font.Bold = TruexlWs.Range(Cells(lngRow + 1, 1), Cells(lngRow + 1, 9)).Borders.LineStyle = xlNonexlWs.Range(Cells(lngRow + 1, 1), Cells(lngRow + 1, 9)).BorderAround LineStyle:=xlContinuousxlWs.Cells(lngRow + 1, 5).Value = 0xlWs.Cells(lngRow + 1, 5).Font.Color = RGB(230, 238, 221)Next i' 关闭当前Word文档wdDoc.Close SaveChanges:=FalseSet wdDoc = Nothing' 获取下一个文件名strFileName = Dir()Loop' 退出Word应用程序wdApp.QuitSet wdApp = Nothing' 恢复Excel设置Application.ScreenUpdating = TrueApplication.DisplayAlerts = TrueMsgBox "完成!共处理了 " & lngRow & " 行数据。"End Sub