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里这样才能 ...
随机推荐
- 每天一个Linux命令(1)ls命令
ls是list的缩写,ls命令是Linux系统下最常用的命令之一. ls命令用于打印当前目录的清单,如果指定其它目录,那么就会显示其他目录的文件及文件夹的清单. 通过ls 命令还可以查看文件其它的详细 ...
- python webdriver 显示等待判断元素是可以被点击的,但是执行脚本时,却提示元素不能点击的解决办法?
我之前运行没问题的环境是firefox版本50,对应的驱动是没有问题的,现在firefox自动升级到了60,驱动没有变,我试着把浏览器装回了50,再试就好了, 所以应该是浏览器跟驱动geckodriv ...
- Linux基础命令---resizefs
resize2fs 调整ext2\ext3\ext4文件系统的大小,它可以放大或者缩小没有挂载的文件系统的大小.如果文件系统已经挂载,它可以扩大文件系统的大小,前提是内核支持在线调整大小. size参 ...
- iphone6 inline-flex兼容问题
在编写微信端页面时,遇到这样的问题:position属性为flex的导航栏,其li标签在其余设备上显示正常,但在iphone6上浮动错误. 究其原因,是iphone6不支持position属性中的fl ...
- Linux中Postfix邮件安装配置(二)
本套邮件系统的搭建,从如何发邮件到收邮件到认证到虚拟用户虚拟域以及反病毒和反垃圾邮件等都有详细的介绍.在搭建过程中必须的参数解释以及原理都有告诉,这样才能更好地理解邮件系统. 卸载自带postfix ...
- TED #10# A rite of passage for late life
Bob Stein: A rite of passage for late life Collection I grew up white, secular and middle class in 1 ...
- https的设置
现有如下的web架构(简化之后的),需要把原来的http访问修改到https访问! haproxy的认证有两种方式: 第一种:haproxy提供ssl证书,后面的nginx访问使用正常的http. 第 ...
- 02: DOM 实例
1.1 Event 对象 <body> <a id="myAnchor" href="http://www.microsoft.com"> ...
- 三星核S5PV210AH-A0 SAMSUNG
三星S5PV210AH-A0 S5PV210又名“蜂鸟”(Hummingbird),是三星推出的一款适用于智能手机和平板电脑等多媒体设备的应用处理器,S5PV210和S5PC110功能一样,110小封 ...
- Python3基础 time 索引值访问元组中的年月日时分秒
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...