Public Sub GetFirst()GetDataFromWord "初检"
End SubPublic Sub GetDataFromWord(ByVal SheetName As String)AppSettings'On Error GoTo ErrHandlerDim StartTime, UsedTime As VariantStartTime = VBA.Timer'Input code hereDim Wb As WorkbookDim Sht As WorksheetDim oSht As WorksheetDim Rng As RangeDim Arr As VariantDim wdApp As Word.ApplicationDim wdDoc As Word.DocumentDim wdRng As Word.Range'Const SHEET_NAME As String = "提取信息"Set Wb = Application.ThisWorkbookSet Sht = Wb.Worksheets(SheetName)Dim FilePath As StringWith Application.FileDialog(msoFileDialogFilePicker).AllowMultiSelect = False.InitialFileName = Wb.Path.Title = "提取" & SheetName & "数据".Filters.Clear.Filters.Add "Word文档", "*.rtf*"If .Show = -1 ThenFilePath = .SelectedItems(1)ElseMsgBox "您没有选中任何文件夹,本次汇总中断!"Exit SubEnd IfEnd WithDebug.Print FilePathSet wdApp = New Word.ApplicationSet 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    '关闭docwdApp.Quit    '退出appSet wdApp = NothingSet wdDoc = NothingWith 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 .UsedRangeEnd WithUsedTime = VBA.Timer - StartTimeDebug.Print "UsedTime:" & Format(UsedTime, "0.000 Seconds")'MsgBox "UsedTime:" & Format(UsedTime, "0.000 Seconds"), vbOKOnly, "NextSeven  QQ "
ErrorExit:Set Wb = NothingSet Sht = NothingSet Rng = NothingAppSettings FalseOn Error Resume NextwdApp.QuitExit Sub
ErrHandler:If Err.Number <> 0 ThenMsgBox Err.Description & "!", vbCritical, "NextSeven QQ "Debug.Print Err.DescriptionErr.ClearResume ErrorExitEnd If
End Sub
Public Sub AppSettings(Optional IsStart As Boolean = True)If IsStart ThenApplication.ScreenUpdating = FalseApplication.DisplayAlerts = FalseApplication.Calculation = xlCalculationManualApplication.StatusBar = ">>>>>>>>Macro Is Running>>>>>>>>"ElseApplication.ScreenUpdating = TrueApplication.DisplayAlerts = TrueApplication.Calculation = xlCalculationAutomaticApplication.StatusBar = FalseEnd If
End Sub
Function RegGetArray(ByVal OrgText As String) As String()Dim Reg As Object, Mh As Object, OneMh As ObjectDim Reg2 As ObjectDim Arr() As String, Index As LongDim Elm As StringSet Reg = CreateObject("Vbscript.Regexp")Set Reg2 = CreateObject("Vbscript.Regexp")Reg2.Global = TrueWith 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 = 0ReDim Arr(1 To 4, 1 To 1)For Each OneMh In MhIndex = Index + 1ReDim 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 OneMhEnd WithRegGetArray = ArrSet Reg = Nothing: Set Mh = NothingSet Reg2 = Nothing
End FunctionPublic Sub PositioningClear(ByVal OpenDoc As Word.Document, ByVal Times As Long)Dim wdRng As Word.RangeDim lngStart As LongDim lngEnd As LongDim lngTime As LongFor lngTime = 1 To TimeslngEnd = OpenDoc.Content.EndWith OpenDoc.Content.Find.ClearFormatting.Replacement.ClearFormatting.Text = "ALIMENTARY SYSTEM".Replacement.Text = ""If .Execute ThenlngStart = .Parent.StartSet wdRng = OpenDoc.Range(lngStart, lngEnd)End IfEnd WithIf Not wdRng Is Nothing ThenWith 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'LoopEnd WithEnd IfSet wdRng = NothingNext lngTimeEnd SubSub 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:=xlPinYinEnd With
End Sub

  

转载于:https://www.cnblogs.com/nextseven/p/7129186.html

20170601xlVBA正则表达式提取体检数据相关推荐

  1. C#正则表达式提取文本中以逗号间隔的数据

    使用正则表达式提取文本数据到内存是很方便的技术,下面通过一个例子介绍一下如何使用正则表达式提取文本 文本中内容格式 1,2,3,4,5 2,2,2,2,2 3,3,3,3,3 C#代码如下 publi ...

  2. 利用正则表达式提取网页中Table内的数据

    利用正则表达式提取网页中Table内的数据 using System; using System.Collections.Generic; using System.Linq; using Syste ...

  3. Jmeter工具中参数化、正则表达式提取器、响应断言的实现

    参数化.正则表达式提取器.响应断言的实现 1.实现参数化 2.正则表达式提取器 3.响应断言 上一篇文章实现了用Jmeter工具实现了新增用户和学员登录两个功能,这篇文章将对前两个功能进行优化. 1. ...

  4. 爬虫 | 正则表达式提取腾讯教育新闻链接及图片链接

    前面的爬虫都是通过标签来爬取的,今天就分享一个小例子使用正则表达式来提取网页信息.如果你对正则表达式不熟悉,可以查看我之前写的R正则表达式这篇文章.它对R几个常用正则表达式进行了详尽的解释,包括参数说 ...

  5. android字符串获取数字索引,从字符串中提取特定数据(Extract specific data from a string)...

    从字符串中提取特定数据(Extract specific data from a string) 我有一个带有描述的长字符串. 我想从字符串中提取一些信息. 但我无法弄明白该怎么做. 这是字符串: C ...

  6. 在python中,用正则表达式提取多层括号中最外层括号包含的内容

    提取多层括号中最外层括号包含的内容有几种方式,那么用正则表达式该怎么实现呢? 在python中,用正则表达式提取多层括号中最外层括号包含的内容 比如有一个字符串 : 学习python中有什么不懂的地方 ...

  7. 北风网php笔记正则表达式,PHP中使用正则表达式提取中文实现笔记

    最近老板叫做一个数据查重的小练习,涉及从一个包含中文字段的文件中提取出其中的中文字段并存储,使用php开发.中间涉及到php正则表达式中文匹配的问题,网上搜罗一大片,但是也很乱没有一个准信儿,经过自己 ...

  8. 正则表达式不包含某个字符串_JMeter必知必会系列(18) JMeter正则表达式提取器疑难分析...

    JMeter正则表达式提取器疑难分析 前沿 JMeter正则表达式提取器的配置项中, Regular Expression, Template与 Match No.这三个配置项是比较难以理解的,本文针 ...

  9. 一步一步教你抓数据——用.net精确提取网站数据的通用方法 [转]

    一步一步教你抓数据--用.net精确提取网站数据的通用方法 [转] 2008年02月23日 星期六 16:53 具体实现思路: 1 首先用WebClient类下载网页源码 public static ...

最新文章

  1. 用于面包板的双列直插需要多宽?
  2. 集群调度框架的架构演进之路
  3. spring mvc 拦截器 HandlerInterceptor 的使用
  4. Java 将数据写入磁盘并读取磁盘上的文件
  5. lintcode433 岛屿的个数
  6. 计算机键盘标注,你所不知道的 Windows 10 小诀窍:万能计算器、虚拟键盘、屏幕截图标注...
  7. BZOJ2938[Poi2000]病毒——AC自动机
  8. 027——VUE中事件修饰符:stop prevent self capture
  9. bat命令运行java程序
  10. go 公众号 关注 监听_golang微信公众平台之消息接入
  11. 清除centos上面kde软件的一个脚本,基本好用
  12. cdr怎么转plt_win10系统下cdr格式文本转plt格式文本怎么做
  13. 3d老显示计算机内存不足,3d 出现:应用程序内存不足,将立即关闭。。。 怎么处理...
  14. hbase与hadoop版本兼容问题,强烈谴责hadoop生态圈耦合性
  15. https://blog.csdn.net/Darryl_Tang/article/details/80545688
  16. UnityC# MD5验证
  17. Advanced Installer,搜索注册表,根据注册表选择安装路径
  18. 4月4日网站变灰实录
  19. FORM表单及其属性
  20. 2021年高压电工考试总结及高压电工考试技巧

热门文章

  1. 停笔几天,休息一下也顺便思考一下人生
  2. Add margining capability to a dc/dc converter
  3. stm32内部的CAN总线
  4. acctmod-ftp.sh
  5. 巧妙设置Android来方便管理Linux和Windows
  6. Openwebmail在Ubuntu Linux上的安装过程
  7. QluOJ2018NewCode计算几何(寄蒜几盒)
  8. 20180521 数组转换
  9. RDF -- 资源描述框架
  10. 有源RFID与无缘RFID的区别