'WORD 加载项 代码模板
Dim cmdBar As CommandBar, cmdBtn As CommandBarControl
Const cmdBtnCap As String = "批量提取操作步骤" Sub AutoExec() Call DelCmdBtn
Call AddCmdBtn End Sub
Sub AutoExit()
Call DelCmdBtn
End Sub Sub AddCmdBtn() Set cmdBar = Application.CommandBars("Tools") Set cmdBtn = cmdBar.Controls.Add(msoControlButton)
With cmdBtn
.Caption = cmdBtnCap
.Style = msoButtonCaption
.OnAction = "GetContents"
End With Set cmdBtn = Nothing
Set cmdBar = Nothing End Sub
Sub DelCmdBtn()
Set cmdBar = Application.CommandBars("Tools")
For Each cmdBtn In cmdBar.Controls
If cmdBtn.Caption = cmdBtnCap Then cmdBtn.Delete
Next Set cmdBtn = Nothing
Set cmdBar = Nothing
End Sub Public Sub GetContents() Application.ScreenUpdating = False Dim xlApp As Object
Dim Wb As Object
Dim Sht As Object
Dim Rng As Object
Dim OpenDoc As Document Dim ExcelPath As String
Const ExcelFile As String = "未完成.xls" Dim FolderPath As String
Dim FilePath As String
Dim FileName As String ExcelPath = ThisDocument.Path & "\" & ExcelFile With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = ThisDocument.Path
.AllowMultiSelect = False
.Title = "请选取Word所在文件夹"
If .Show = -1 Then
FolderPath = .SelectedItems(1)
Else
MsgBox "您没有选中任何文件夹,本次汇总中断!"
Exit Sub
End If
End With s = Split(FolderPath, "\")
c = UBound(s)
ShtName = s(c) If Right(FolderPath, 1) <> "\" Then FolderPath = FolderPath & "\" On Error Resume Next
Set xlApp = GetObject(, "Excel.Application")
If xlApp Is Nothing Then
Set xlApp = CreateObject("Excel.Application")
End If
On Error GoTo 0 Set Wb = xlApp.workbooks.Open(ExcelPath)
Set Sht = Wb.worksheets.Add()
Sht.Name = ShtName
Sht.Cells.clearcontents
Sht.Range("A1:D1").Value = Array("操作编号", "操作任务", "操作序号", "操作步骤") FileName = Dir(FolderPath & "*.doc*")
Do While FileName <> ""
FilePath = FolderPath & FileName
If FileName <> ThisDocument.Name Then
Set OpenDoc = Application.Documents.Open(FilePath)
'If OpenDoc.Tables.Count > 0 Then
Arr = GetArray(OpenDoc) Debug.Print Arr(3, 1) Sht.Cells(Sht.Rows.Count, 2).End(3).offset(1).Resize(UBound(Arr, 2), UBound(Arr)).Value = _
xlApp.worksheetfunction.transpose(Arr) 'End If
OpenDoc.Close False
End If
FileName = Dir
Loop Wb.Close True
xlApp.Quit 'MsgBox "本次提取完成!" 'Application.ScreenUpdating = True
End Sub Function GetArray(ByVal Doc As Document) As Variant
Dim tb As Table
Dim tbCount As Long
Dim RecordStart As Boolean
Dim RecordEnd As Boolean
Dim Arr() As String
Dim Mission As String Doc.Activate
If Selection.Type = wdSelectionIP Then
ActiveDocument.Content.ListFormat.ConvertNumbersToText
ActiveDocument.Content.Find.Execute FindText:="^t", replacewith:=" ", Replace:=wdReplaceAll
Else
Selection.Range.ListFormat.ConvertNumbersToText
Selection.Find.Execute FindText:="^t", replacewith:=" ", Replace:=wdReplaceAll
End If ReDim Arr(1 To 3, 1 To 1)
Index = 0 RecordStart = False
RecordEnd = False tbCount = Doc.Tables.Count
If tbCount > 0 Then
n = 0
For Each tb In Doc.Tables With tb
For i = 1 To .Rows.Count
'Debug.Print tb.Rows(3).Cells(1).Range.Text
If tb.Rows(3).Cells(1).Range.Text Like "*操作任务*" And Mission = "" Then
Mission = tb.Rows(3).Cells(1).Range.Text
Mission = RegGet(Mission, "操作任务[::](\S+?)\s+?")
'Debug.Print Mission
End If If .Rows(i).Cells.Count = 5 Then
If .Rows(i).Cells(1).Range.Text Like "*#*" And _
.Rows(i).Cells(3).Range.Text Like "*得令*" Then
'Debug.Print .Rows(i).Cells(3).Range.Text
RecordStart = True
End If
If .Rows(i).Cells(1).Range.Text Like "*#*" Or .Rows(i).Cells(1).Range.Text = "" And RecordStart = True And RecordEnd = False Then
Index = Index + 1
ReDim Preserve Arr(1 To 3, 1 To Index)
Arr(1, Index) = Mission
Debug.Print Mission
Arr(2, Index) = Replace(Replace(.Rows(i).Cells(1).Range.Text, Chr(7), ""), vbCr, "")
Arr(3, Index) = Replace(Replace(.Rows(i).Cells(3).Range.Text, Chr(7), ""), vbCr, "")
End If If .Rows(i).Cells(1).Range.Text Like "*#*" And _
.Rows(i).Cells(3).Range.Text Like "*汇报*" Then
RecordStart = False
RecordEnd = True
GoTo ExitFunction
End If
End If
Next i
End With
Next tb
End If ExitFunction:
GetArray = Arr End Function
Public Function RegGet(ByVal OrgText As String, ByVal Pattern As String) As String
'传递参数 :原字符串, 匹配模式
Dim Regex As Object
Dim Mh As Object
Set Regex = CreateObject("VBScript.RegExp")
With Regex
.Global = True
.Pattern = Pattern
End With
If Regex.test(OrgText) Then
Set Mh = Regex.Execute(OrgText)
RegGet = Mh.Item(0).submatches(0)
Else
RegGet = ""
End If
Set Regex = Nothing
End Function
Sub 自动编号转文本()
If Selection.Type = wdSelectionIP Then
ActiveDocument.Content.ListFormat.ConvertNumbersToText
ActiveDocument.Content.Find.Execute FindText:="^t", replacewith:=" ", Replace:=wdReplaceAll
Else
Selection.Range.ListFormat.ConvertNumbersToText
Selection.Find.Execute FindText:="^t", replacewith:=" ", Replace:=wdReplaceAll
End If
End Sub

  

20170907wdVBA_GetCellsContentToExcel的更多相关文章

随机推荐

  1. 【python011--数组2】

    一.从列表中获取元素 *跟数组一样,我们可以通过元素的索引值(index)从列表获取单个元素,注意,列表索引值是从0开始的 >>> member= ['尘封','冰点','无名',' ...

  2. 从0开始安装fedora23的笔记-- 以及使用fedora的常规问题-3

    关于sys的目录有: /etc/sys/, 和 /proc/sys fedora的桌面背景图片默认的在: /usr/share/backgrounds/, 里面有f23, gnome, images等 ...

  3. 算法总结(转自CS-Notes)

    转载地址: 注意要点: 1.希尔排序:实际是将元素按步距h分为几组,每组元素没有关系,是组里每个元素跨步距h得到的一组元素是有序的,那么剩下的问题就是组内有序,再处理好组间边界即可.实际解决的方式是不 ...

  4. P2272 [ZJOI2007]最大半连通子图

    思路 tarjan的题目 注意是要选出一个点集而不是边集 第一问就是缩点之后最长链,第二问就是有多少个最长链,注意缩点后连边要去重(不然一个链的方案可能会被统计多次) 代码 #include < ...

  5. Python实现机器学习算法:朴素贝叶斯算法

    ''' 数据集:Mnist 训练集数量:60000 测试集数量:10000 ''' import numpy as np import time def loadData(fileName): ''' ...

  6. 【OData】使用Odata获取数据之后再次获取可能得不到最新的数据问题记录

    工作上遇到个问题是关于系统后台数据库更新了某数据后, 前台界面刷新显示的不是最新的数据.但是大约10分后再次刷新就能显示新的数据,或者重启IIS等web server host. 最开始认为可能是因为 ...

  7. yyyy-MM-dd'T'HH:mm:ss.SSS'Z'即UTC时间,与String日期转换

    本文为博主原创,未经允许不得转载: 最近在使用一个时间插件的时候,接收到的时间格式是 ’2017-11-27T03:16:03.944Z’ ,当我进行双向数据绑定的时候,由后台传过来的时间绑定到时间 ...

  8. NodeJS 获取网页源代码

    获取网页源代码 node 获取网页源代码 var http = require('http'); var url = "http://www.baidu.com/"; // 参数u ...

  9. ZOJ 3987 Numbers(Java枚举)

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3987 题意:给出一个数n,现在要将它分为m个数,这m个数相加起来必须等于n ...

  10. git代码回滚的两种选择

    回滚到指定commit,且保持该commit之前和之后的提交记录 使用git revert命令. git revert HEAD // 回滚到前一次 commit git revert HEAD^ / ...