20170601xlVBA正则表达式提取体检数据
Public Sub GetFirst()
GetDataFromWord "初检"
End Sub Public Sub GetDataFromWord(ByVal SheetName As String)
AppSettings
'On Error GoTo ErrHandler
Dim StartTime, UsedTime As Variant
StartTime = VBA.Timer
'Input code here Dim Wb As Workbook
Dim Sht As Worksheet
Dim oSht As Worksheet
Dim Rng As Range
Dim Arr As Variant Dim wdApp As Word.Application
Dim wdDoc As Word.Document
Dim wdRng As Word.Range 'Const SHEET_NAME As String = "提取信息"
Set Wb = Application.ThisWorkbook
Set Sht = Wb.Worksheets(SheetName) Dim FilePath As String
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False
.InitialFileName = Wb.Path
.Title = "提取" & SheetName & "数据"
.Filters.Clear
.Filters.Add "Word文档", "*.rtf*"
If .Show = -1 Then
FilePath = .SelectedItems(1)
Else
MsgBox "您没有选中任何文件夹,本次汇总中断!"
Exit Sub
End If
End With Debug.Print FilePath Set wdApp = New Word.Application
Set wdDoc = wdApp.Documents.Open(FilePath)
Application.StatusBar = ">>>>>>>>Positioning & Replacing >>>>>>>>"
PositioningClear wdDoc, 5 '定位删除英文行 避免正则提取造成干扰 Application.StatusBar = ">>>>>>>>Regexpress Getting array >>>>>>>>"
Arr = RegGetArray(wdDoc.Content.Text) '正则从全文提取内容 存入数组
wdDoc.Close False '关闭doc
wdApp.Quit '退出app
Set wdApp = Nothing
Set wdDoc = Nothing With Sht
.Cells.Clear
.Range("A1:D1").Value = Array("大项", "小项", "D值", "E值")
Set Rng = .Range("A2").Resize(UBound(Arr, 2), UBound(Arr))
Rng.Value = Application.WorksheetFunction.Transpose(Arr)
Sort2003 .UsedRange
End With UsedTime = VBA.Timer - StartTime
Debug.Print "UsedTime:" & Format(UsedTime, "0.000 Seconds")
'MsgBox "UsedTime:" & Format(UsedTime, "0.000 Seconds"), vbOKOnly, "NextSeven QQ "
ErrorExit:
Set Wb = Nothing
Set Sht = Nothing
Set Rng = Nothing
AppSettings False On Error Resume Next
wdApp.Quit Exit Sub
ErrHandler:
If Err.Number <> 0 Then
MsgBox Err.Description & "!", vbCritical, "NextSeven QQ "
Debug.Print Err.Description
Err.Clear
Resume ErrorExit
End If
End Sub
Public Sub AppSettings(Optional IsStart As Boolean = True)
If IsStart Then
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.Calculation = xlCalculationManual
Application.StatusBar = ">>>>>>>>Macro Is Running>>>>>>>>"
Else
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.Calculation = xlCalculationAutomatic
Application.StatusBar = False
End If
End Sub
Function RegGetArray(ByVal OrgText As String) As String()
Dim Reg As Object, Mh As Object, OneMh As Object
Dim Reg2 As Object Dim Arr() As String, Index As Long
Dim Elm As String
Set Reg = CreateObject("Vbscript.Regexp")
Set Reg2 = CreateObject("Vbscript.Regexp") Reg2.Global = True With Reg
'OrgText = Application.ActiveDocument.Content
.MultiLine = True
.Global = True
.Ignorecase = False
'可用
'.Pattern = "(?:\s)?(\S*?)?\s? *" & "(?:[ ])([^ ][^\r\n\v]*?)\s+?(D=[\d\.]+)\s+(E=[\d\.]+)[\s]+?"
.Pattern = "(?:\s+?)([一-龥;,,]*?)?\s? *" & "(?:[ ])([^ ][^\r\n\v]*?)\s+?(D=[\d\.]+)\s+(E=[\d\.]+)[\s]+?"
Set Mh = .Execute(OrgText)
Index = 0
ReDim Arr(1 To 4, 1 To 1)
For Each OneMh In Mh
Index = Index + 1
ReDim Preserve Arr(1 To 4, 1 To Index)
If OneMh.submatches(0) <> "" Then Elm = OneMh.submatches(0) Reg2.Pattern = "[;,,]?(左视图|前视图|纵切面)+[;,,]?"
Arr(1, Index) = Reg2.Replace(Elm, "") Reg2.Pattern = "[\s#G]"
Arr(2, Index) = Reg2.Replace(OneMh.submatches(1), "")
'Debug.Print OneMh.submatches(2)
Arr(3, Index) = Split(OneMh.submatches(2), "=")(1)
'Debug.Print OneMh.submatches(3)
Arr(4, Index) = Split(OneMh.submatches(3), "=")(1)
Next OneMh
End With
RegGetArray = Arr
Set Reg = Nothing: Set Mh = Nothing
Set Reg2 = Nothing
End Function Public Sub PositioningClear(ByVal OpenDoc As Word.Document, ByVal Times As Long)
Dim wdRng As Word.Range
Dim lngStart As Long
Dim lngEnd As Long
Dim lngTime As Long
For lngTime = 1 To Times
lngEnd = OpenDoc.Content.End
With OpenDoc.Content.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "ALIMENTARY SYSTEM"
.Replacement.Text = ""
If .Execute Then
lngStart = .Parent.Start
Set wdRng = OpenDoc.Range(lngStart, lngEnd)
End If
End With If Not wdRng Is Nothing Then
With wdRng.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "[^l^13][A-Za-z0-9\- ,;:.]@[^l^13]"
.MatchWildcards = True
.Wrap = wdFindStop
.Forward = True
.Replacement.Text = "^l"
'n = 0
.Execute Replace:=wdReplaceAll
'Do While .Execute
' n = n + 1
' Debug.Print n; "____________"; .Parent.Text
' If n > 1000 Then Exit Do
'Loop
End With
End If
Set wdRng = Nothing
Next lngTime End Sub Sub Sort2003(ByVal RngWithTitle As Range, Optional SortColumnNo As Long = 1)
'key1代表第一个排序的列的关键字
'Order1表示第一字段的排序方式,赋值为xlAscending表示升序,改为xlDescending表示降序。
'Header表示是否包含标题,赋值为xlYes表示标题不参与排序,赋值为xlNo表示标题也参数排序
'MatchCase表示排序时是否区分大小写,赋值为False表示不区分大小写
'Orientation表示排序方向,赋值为xlTopToBottom或者xlSortColumns表示按列排序,赋值为xlSortRows 表示排行排序
'SortMethod用于限制对汉字排序时的排序方式,赋值为xlPinYin表示按拼音排序,赋值为xlStroke表示按笔划排序
With RngWithTitle
.Sort Key1:=RngWithTitle.Cells(1, SortColumnNo), Order1:=xlAscending, Header:=xlYes, _
MatchCase:=False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin
End With
End Sub
20170601xlVBA正则表达式提取体检数据的更多相关文章
- 接口测试-chap5-使用正则表达式提取响应数据
1.导入相关库 import re 2.re.findall(r"前(.+?)后", 匹配源) 3.前:表示要匹配的文本左边的内容 4.后:表示要匹配的文本右边的内容 5.它的返回 ...
- Jmeter—5 关联 响应数据传递-正则表达式提取器
在测试过程中,遇到一个问题:用户登录成功后服务器会返回一个登录凭证,之后所有的操作都需要带上此凭证.我们怎么获取登录凭证并传递给后续的操作? Jmeter提供了正则表达式提取器,用变量提取参数,后续通 ...
- Qt正则表达式提取数据
这几天在上嵌入式课程设计,需要用到Qt,这个是信号与槽的,寒假的时候也简单学习了一些,但是没有怎么深入,又回过来看了看Qt,发现Qt的ui界面配置与Android的好像,当然Qt也可以拿来开发Andr ...
- Jmeter入门5 关联 响应数据传递-正则表达式提取器
在测试过程中,遇到一个问题:用户登录成功后服务器会返回一个登录凭证,之后所有的操作都需要带上此凭证.我们怎么获取登录凭证并传递给后续的操作? Jmeter提供了正则表达式提取器,用变量提取参数,后续通 ...
- HttpRunner学习4--使用正则表达式提取数据
前言 在HttpRunner中,我们可通过extract提取数据,当响应结果为 JSON 结构,可使用 content 结合 . 运算符的方式,如 content.code,用起来十分方便,但如果响应 ...
- jmeter使用正则表达式提取数据
1.通过正则表达式提取到接口返回的中的某些数据.例如:success":true,"data":{"typeID":"(\w+)" ...
- Jmeter_正则表达式提取器_提取单组数据
1.用处:提取登录信息/获取session或者token数值 2.举例:获取登录结果的获取:msg":"登录成功" 这个数据 3.HTTP->后置处理器->正 ...
- jmeter正则表达式提取多个数据/一组数据时,应该怎么做——debug sampler的使用
背景:今天有个接口需要借助前面接口产生的一组ids数据,来作为入参使用,但是之前都是提取单个接口,所以到底怎么提取接口,遇到了很大的问题,按照多方查取资料都没有成功,最终在一个不相关帖子的最后一句话被 ...
- Jmeter通过正则表达式提取器提取响应结果数据
Jmeter进行接口测试常常会运到一个问题:就是第二个请求如何接收上一个请求响应中的参数.比如,现在个学生金币充值的接口,得先调用登录接口然后从返回里面复制一下sign的值,放到cookie里这样才能 ...
随机推荐
- Fenwick
hdu1394 这题说的是给了一个序列计算这个序列的逆序对总共要进行n次 每次都将目前的第一个放到序列的最后一个位置然后 计算一次逆序对 这样我们只需要先求一次逆序对 然后接着每次都用F=F+(n-T ...
- CATiledLayer
CATiledLayer 有些时候你可能需要绘制一个很大的图片,常见的例子就是一个高像素的照片或者是地球表面的详细地图.iOS应用通畅运行在内存受限的设备上,所以读取整个图片到内存中是不明智的.载入大 ...
- python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码
python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码 python的json.dumps方法默认会输出成这种格式"\u535a\u ...
- Python3.x(windows系统)安装requests库
Python3.x(windows系统)安装requests库 cmd命令: pip install requests 执行结果:
- PN结讲解
可能大家在使用半导体器件的时候只是在使用它的电气属性,并没有很好的关心下它是什么原因才有了这样的电气属性,那么我们本篇就从物理结构分析下PN结吧. 首先看一张比较陈旧的图图: (就按自己的笔记简单谈谈 ...
- bzoj 2654 tree - 二分法 - 最小生成树
给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. Input 第一行V,E,need分别表示点数,边数和需要的白色边数. 接下来E行,每行 ...
- JAVA I/O(六)多路复用IO
在前边介绍Socket和ServerSocket连接交互的过程中,读写都是阻塞的.套接字写数据时,数据先写入操作系统的缓存中,形成TCP或UDP的负载,作为套接字传输到目标端,当缓存大小不足时,线程会 ...
- 解决Type safety: The expression of type List needs
解决Type safety: The expression of type List needs unchecked conversion to conform to 在方法前加上这句话就可以了@Su ...
- 加强树状数组luogu3368
暴力树状数组30分,这该怎么办: 知识点回顾 差分数组中 开头结尾改变了值之后 求他的前缀,发现区间内所有数都改变 然后我们做差分树状数组 #include<cstdio> using n ...
- 基于大规模语料的新词发现算法【转自matix67】
最近需要对商品中的特有的词识别,因此需新词发现算法,matrix的这篇算法很好. 对中文资料进行自然语言处理时,我们会遇到很多其他语言不会有的困难,例如分词——汉语的词与词之间没有空格,那计算机怎么才 ...