wdVBA正则表达式提取题目

Posted Excel VBA 小天地

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wdVBA正则表达式提取题目相关的知识,希望对你有一定的参考价值。

Public Sub GetContents()
    Dim Reg As Object
    Dim Matches As Object
    Dim OneMatch As Object
    Dim Index As Long
    Dim TimeStart As Variant
    TimeStart = VBA.Timer
    Set Reg = CreateObject("Vbscript.RegExp")
    With Reg
        .Pattern = "^\s*?((?:[^\r]*?\d+题[^\r]?\s*?[^\r]*?\s*?)?\d*[\.,、.](?:[^\r\n]*?\r?[\r\n]+?){1,4}?)\s*?" & _
                   "(A[\.,、.].*?)\s+?" & _
                   "(B[\.,、 .].*?)\s+?" & _
                   "(C[\.,、.].*?)\s+?" & _
                   "(D[\.,、.].*?)\s*?" & "\r?[\r\n]+"
        .MultiLine = True
        .Global = True
        .IgnoreCase = False
    End With

    Dim FilePath As String
    With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = False
        .InitialFileName = ActiveDocument.Path
        .Title = "请选择单个Excel工作簿"
        .Filters.Clear
        .Filters.Add "Excel工作簿", "*.xls*"
        If .Show = -1 Then
            FilePath = .SelectedItems(1)
        Else
            MsgBox "您没有选中任何文件夹,本次汇总中断!"
            Exit Sub
        End If
    End With

    Dim xlApp As Object
    Dim wb As Object
    Dim sht As Object
    Dim StartRow As Long
    Dim StartIndex As Long

    Set xlApp = CreateObject("Excel.Application")
    Set wb = xlApp.workbooks.Open(FilePath)
    Set sht = wb.worksheets.Add(After:=wb.worksheets(wb.worksheets.Count))
    sht.Name = "提取记录" & wb.worksheets.Count - 1
    sht.Range("A1:H1").Value = Array("储存序号", "引言题干", "A选项", "B选项", "C选项", "D选项", "正确答案", "配图名称")

    With sht
        StartRow = .Range("A65536").End(3).Row
        StartIndex = StartRow - 1

        Set Matches = Reg.Execute(ActiveDocument.Content.Text)
        Index = 0
        For Each OneMatch In Matches
            Index = Index + 1
            ‘‘Debug.Print "Question Index  " & N & "   :   " ‘; OneMatch
            For i = 0 To OneMatch.submatches.Count - 1
                .Cells(StartRow + Index, 1).Value = StartIndex + Index
                .Cells(StartRow + Index, 2).Value = OneMatch.submatches(0)
                .Cells(StartRow + Index, 3).Value = OneMatch.submatches(1)
                .Cells(StartRow + Index, 4).Value = OneMatch.submatches(2)
                .Cells(StartRow + Index, 5).Value = OneMatch.submatches(3)
                .Cells(StartRow + Index, 6).Value = OneMatch.submatches(4)
                ‘If i <> 0 Then
                ‘Debug.Print ">>>>Option Index"; i; "  :   "; OneMatch.submatches(i)
                ‘Else
                ‘  Debug.Print ">>>>Question Index  0 "; "  :   "; OneMatch.submatches(i)
                ‘ End If
            Next i
            ‘ If N = 17 Then Exit For
        Next

        With .usedrange
            .HorizontalAlignment = xlGeneral
            .VerticalAlignment = xlCenter
            .WrapText = True
        End With

        If ShowPicName Then xlApp.WorksheetFunction.Transpose (PicName)

        .usedrange.Columns.AutoFit
    End With


    wb.Close True
    xlApp.Quit
    Set sht = Nothing
    Set wb = Nothing
    Set xlApp = Nothing

    Debug.Print VBA.Timer - TimeStart; "秒"
    Set Reg = Nothing
End Sub

  

以上是关于wdVBA正则表达式提取题目的主要内容,如果未能解决你的问题,请参考以下文章

20170907wdVBA_GetCellsContentToExcel

如何使用 JavaScript 正则表达式提取字符串?

java正则表达式提取xxxx(yyyy)中的内容

JAVA正则表达式怎么匹配所有符合要求的子字符串

正则表达式部分提取php代码((数组定义))

在 C 代码中提取字符串的正则表达式(不在注释内)