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正则表达式提取体检数据的更多相关文章

  1. 接口测试-chap5-使用正则表达式提取响应数据

    1.导入相关库 import re 2.re.findall(r"前(.+?)后", 匹配源) 3.前:表示要匹配的文本左边的内容 4.后:表示要匹配的文本右边的内容 5.它的返回 ...

  2. Jmeter—5 关联 响应数据传递-正则表达式提取器

    在测试过程中,遇到一个问题:用户登录成功后服务器会返回一个登录凭证,之后所有的操作都需要带上此凭证.我们怎么获取登录凭证并传递给后续的操作? Jmeter提供了正则表达式提取器,用变量提取参数,后续通 ...

  3. Qt正则表达式提取数据

    这几天在上嵌入式课程设计,需要用到Qt,这个是信号与槽的,寒假的时候也简单学习了一些,但是没有怎么深入,又回过来看了看Qt,发现Qt的ui界面配置与Android的好像,当然Qt也可以拿来开发Andr ...

  4. Jmeter入门5 关联 响应数据传递-正则表达式提取器

    在测试过程中,遇到一个问题:用户登录成功后服务器会返回一个登录凭证,之后所有的操作都需要带上此凭证.我们怎么获取登录凭证并传递给后续的操作? Jmeter提供了正则表达式提取器,用变量提取参数,后续通 ...

  5. HttpRunner学习4--使用正则表达式提取数据

    前言 在HttpRunner中,我们可通过extract提取数据,当响应结果为 JSON 结构,可使用 content 结合 . 运算符的方式,如 content.code,用起来十分方便,但如果响应 ...

  6. jmeter使用正则表达式提取数据

    1.通过正则表达式提取到接口返回的中的某些数据.例如:success":true,"data":{"typeID":"(\w+)" ...

  7. Jmeter_正则表达式提取器_提取单组数据

    1.用处:提取登录信息/获取session或者token数值 2.举例:获取登录结果的获取:msg":"登录成功" 这个数据 3.HTTP->后置处理器->正 ...

  8. jmeter正则表达式提取多个数据/一组数据时,应该怎么做——debug sampler的使用

    背景:今天有个接口需要借助前面接口产生的一组ids数据,来作为入参使用,但是之前都是提取单个接口,所以到底怎么提取接口,遇到了很大的问题,按照多方查取资料都没有成功,最终在一个不相关帖子的最后一句话被 ...

  9. Jmeter通过正则表达式提取器提取响应结果数据

    Jmeter进行接口测试常常会运到一个问题:就是第二个请求如何接收上一个请求响应中的参数.比如,现在个学生金币充值的接口,得先调用登录接口然后从返回里面复制一下sign的值,放到cookie里这样才能 ...

随机推荐

  1. EditPlus 5.1.2066 中文版(1月30日修正)

    之前有一些网友反馈汉化版的 EditPlus 中翻页键无法正常工作.经过调查,发现是翻译工具的问题. 因此,我用新的工具重新翻译了 EditPlus.翻页键在新中文版中应该可以正常工作了. 有需要的网 ...

  2. SQL Server报“GUID应包含带4个短划线的32位数”

    转自:http://www.seayee.net/article/info_106.html 最近在配置一台服务器的MS SQL Server 2005的维护计划自动备份数据库,能创建维护计划,但设置 ...

  3. 制作系统U盘,不用做任何动作直接从U盘启动装系统(非PE的)

    用U盘装系统可以用PE方式,进入PE系统,选择镜像文件,然后装,这种比较麻烦. 下面介绍一下从U盘启动,直接装系统的方法,这种方法从U盘启动后,不用做任何动作,就像用光盘装系统一样简单 首先要制作一下 ...

  4. centos 网卡配置

    地址:/etc/sysconfig/network-scripts vi  /etc/sysconfig/network-scripts/ifcfg-eth0 1.固定ip配置 DEVICE=eth0 ...

  5. pollard_rho 学习总结 Miller_Rabbin 复习总结

    吐槽一下名字,泼辣的肉..OwO 我们知道分解出一个整数的所有质因子是O(sqrt(n)/ln(n))的 但是当n=10^18的时候就显得非常无力的 这个算法可以在大概O(n^(1/4))的时间复杂度 ...

  6. apt-get build-dep

    apt-get 里面有个 build-dep参数,手册写着:build-dep causes apt-get to install/remove packages in an attempt to s ...

  7. 在服务中用管理员权限创建一个可弹出UI的进程 (转载)

    转载:http://blog.csdn.net/woshinia/article/details/7850295 转载:http://blog.csdn.net/hurryboylqs/article ...

  8. python函数总结

    1.函数是一种子程序.程序员使用函数来减少代码重复,并用于组织或模块化程序.一旦定义了函数,它可以从程序中的许多不同位置被多次调用.参数允许函数具有可更改的部分.函数定义中出现的参数称之为形参,函数调 ...

  9. 导出数据库表为world文档说明,以及PowerDesigner导出表结构pdm设计文档

    如何使用“mysql导出数据库结构为world工具”以及如何使用powerdesigner映射数据库模型 一.通过powerdesigner配置ojdbc 1.安装并打开powerdesigner,新 ...

  10. acm模板生成

    为迎接,接下来的区域赛,要做好准备(虽然不是特别有信心,但是还是要鼓励自己,可以取得收获的,加油) acm_latex模板: https://www.cnblogs.com/palayutm/p/64 ...