Чтение html файла через VBA - PullRequest
0 голосов
/ 13 января 2020

В моем проекте я читаю файл html с кодами vba и сканирую его с помощью некоторых подстрок, а затем создаю файл json с этими подстроками. SUBTASK - одна из моих подстрок. Когда я сканирую файл html, он находит 9 SUBTASK , но в моем файле html их больше 9. Мои коды такие.

            For i = 1 To lastrow                    
                txt = Cells(i, 1)                    
                If txt = "All" Or txt = "ALL" Or txt = "V2500-A5" Then   'Or txt = "V2500-A1"
                    engType = txt
                End If

                If txt = "About" Then GoTo skipNextRow

                If Left(txt, 1) <> "0" And Left(txt, 5) <> "TASK " And Left(txt, 4) <> "DMC:" And Right(Left(txt, 11), 8) <> "SUBTASK " Then GoTo skipNextRow                                                            

                If Left(txt, 5) = "TASK " Then
                    locationTASK = InStr(1, txt, "TASK ")

                ElseIf Left(txt, 4) = "DMC:" Then
                    locationDMC = InStr(1, txt, "DMC:")
                    locationIssueNo = InStr(1, txt, "Issue No:")
                    locationIssueDate = InStr(1, txt, "Issue Date:")

                ElseIf Right(Left(txt, 11), 8) = "SUBTASK " Then

                    Debug.Print "Subtask: " & txt
                    locationSUBTASK = InStr(1, txt, "SUBTASK ")

                End If                    

skipNextRow:

           Next i

           ReDim Preserve arrApplicability(w): arrApplicability(w) = engType
           ReDim Preserve arrPartNo(w): arrPartNo(w) = myTemp
           w = w + 1

Моя проблема в разделе SUBTASK проблем в других разделах нет.

1 Ответ

1 голос
/ 13 января 2020

То, как вы находите текст, немного шатко. В ожидаемом формате не так много места для изменений. Не видя вашего фактического ввода, это будет много догадок, но здесь все идет.
Я подозреваю, что слово подзадача помещается в разные столбцы, и вы получаете только те, которые начинаются в столбце 4. Вот несколько советов это может упростить отладку.

  1. Это поможет вам найти пропущенные строки и определить их местоположение. Заменить End If на
    Else
        locationSUBTASK = InStr(1, txt, "SUBTASK")
        Debug.Print "SUBTASK found in position " & locationSUBTASK 
    End If
Mid - это функция, которая немного вам поможет. Заменить Right(Left(txt, 11), 8) на Mid(txt, 4, 8). Не очень помогает вашей текущей проблеме, но все же. Узнайте о регулярных выражениях. Вот фрагмент кода, который поможет вам начать:
    Dim RegExp As Object
    Dim Matches As Object

    Dim txt As String
    txt = "something SUBTASK yada yada"

    Set RegExp = CreateObject("VBScript.RegExp")

    RegExp.Pattern = ".*SUBTASK (.*)"
    Set Matches = RegExp.Execute(txt)
    Debug.Print Matches(0).SubMatches(0)

Шаблон ".*SUBTASK (.*)" означает «Найти слово« ПОДЗАДАЧА »в любом месте строки и отслеживать, что будет после него». , Партия (.*) будет распознана как субматч.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...