20170907wdVBA_GetCellsContentToExcel
'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的更多相关文章
随机推荐
- easyui中datagrid常见功能
1.数据加载,需要拼接成标准json格式{}.如果是jsonarray格式[{},{}],无法识别. 2.后端将list拼接成datagrid能识别的json格式,需要首先new JSONObject ...
- Bootstrap3基础 bg-danger/info... 辅助类样式 背景文本颜色
内容 参数 OS Windows 10 x64 browser Firefox 65.0.2 framework Bootstrap 3.3.7 editor ...
- linux命令之crontab定时执行任务【转】
本文转载自:https://www.cnblogs.com/coffy/p/5608095.html 一.crond简介 crond 是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护 ...
- 我为什么选择Go语言(Golang)
作为一个以开发为生的程序员,在我心目中编程语言如同战士手里的武器,好与不好主要看使用的人是否趁手.是否适合,没有绝对的高低之分. 从2013年起,学习并使用Golang已经有4年时间了,我想叙述一下我 ...
- shell脚本中如何实现scp传输?
示例脚本如下: #! /bin/sh expect -c " spawn scp -r /home/jello/jello.txt jello@110.110.110.110:/home/j ...
- <Python>判断变量是否是DataFrame 或者 Series
https://stackoverflow.com/questions/14808945/check-if-variable-is-dataframe Use the built-in isinsta ...
- 【解决办法】Undefined command/function 'mapminmax'.
原因: 低版本7.0中没有mapminmax这个函数,对应的归一化函数是premnmx和postmnmx,具体请查看着两个函数的用法升级到2009就肯定可以正常使用这个函数了 解释: premnmx. ...
- 题解——CF Manthan, Codefest 18 (rated, Div. 1 + Div. 2) T3(贪心)
是一道水题 虽然看起来像是DP,但其实是贪心 扫一遍就A了 QwQ #include <cstdio> #include <algorithm> #include <cs ...
- 题解——HDU 1848 Fibonacci again and again
一道组合游戏的题目 SG函数的板子题 预处理出SG函数的值然后回答询问即可 代码 #include <cstdio> #include <algorithm> #include ...
- 到底什么是 ROI Pooling Layer ???
到底什么是 ROI Pooling Layer ??? 只知道 faster rcnn 中有 ROI pooling, 而且其他很多算法也都有用这个layer 来做一些事情,如:SINT,检测的文章等 ...