用vba读取html文件
在我的项目中,我正在读取一个带有vba代码的html文件,我正在用一些子字符串扫描它,然后我正在用这些子字符串创建一个json文件子任务是我的子字符串之一。当我扫描html文件时,它会找到9个子任务,但在我的html文件中有9个以上。我的密码是这样的用vba读取html文件,vba,Vba,在我的项目中,我正在读取一个带有vba代码的html文件,我正在用一些子字符串扫描它,然后我正在用这些子字符串创建一个json文件子任务是我的子字符串之一。当我扫描html文件时,它会找到9个子任务,但在我的html文件中有9个以上。我的密码是这样的 For i = 1 To lastrow txt = Cells(i, 1) I
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
i=1至最后一行的
txt=单元(i,1)
如果txt=“全部”或txt=“全部”或txt=“V2500-A5”,则“或txt=“V2500-A1”
engType=txt
如果结束
如果txt=“About”,则转到skipNextRow
如果左(txt,1)“0”和左(txt,5)“任务”和左(txt,4)“DMC:”和右(左(txt,11),8)“子任务”,则转到skipNextRow
如果左(txt,5)=“任务”,则
locationTASK=InStr(1,txt,“任务”)
ElseIf Left(txt,4)=“DMC:”然后
位置DMC=InStr(1,txt,“DMC:”)
位置ISSUENO=InStr(1,txt,“发行号:”)
locationIssueDate=InStr(1,txt,“发布日期:”)
ElseIf Right(Left(txt,11),8)=“子任务”然后
调试。打印“子任务:&txt”
locationSUBTASK=InStr(1,txt,“子任务”)
如果结束
SkipnProw:
接下来我
ReDim保留阵列适用性(w):阵列适用性(w)=engType
ReDim保存arrPartNo(w):arrPartNo(w)=myTemp
w=w+1
我的问题在子任务中,其他部分没有问题。您查找文本的方式有点不稳定。在预期的格式中没有太大的更改空间。在看不到您的实际输入的情况下,这将是一个很大的猜测,但这是事实。
我怀疑单词subtask放在不同的列中,而您只得到从第4列开始的那些。下面是一些可能使调试更容易的提示
Mid
是一个对您有所帮助的函数。将Right(Left(txt,11),8)
替换为Mid(txt,4,8)
。这对你当前的问题没有帮助,但仍然是模式
“*SUBTASK(.*)”
的意思是“在一行中的任何地方找到单词'SUBTASK',并跟踪它后面的内容。”。(.*)
部件将被识别为子匹配。代码太多了。你能把范围缩小到一个更容易处理的问题吗?@braX我编辑了我的代码。只有读取和扫描代码。是的。使用正则表达式。我宁愿使用Dim regex作为RegExp,matches作为MatchCollection,sm作为SubMatches@TomRobinson,我同意。在本例中,我选择了通用对象来降低入口阈值。不确定这是好是坏。
Else
locationSUBTASK = InStr(1, txt, "SUBTASK")
Debug.Print "SUBTASK found in position " & locationSUBTASK
End If
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)