【发布时间】:2019-12-01 15:37:09
【问题描述】:
这是相关的 HTML 代码。
<tr style="background-color: #f0f0f0">
<td> </td><td> a</td><td>a </td><td> </td><td> </td>
</tr>
这是 VBA 代码。
sub gethtmlspace()
Dim trObj As MSHTML.HTMLGenericElement
Dim tdObj As MSHTML.HTMLGenericElement
Dim aRes As Variant, bRes As Variant
Dim temp1 As Long, Temp2 As Long, temp3 As Long, Temp4 As Long
Dim oDom As Object: Set oDom = CreateObject("htmlFile")
Dim oRow As MSHTML.IHTMLElementCollection, oCell As MSHTML.IHTMLElementCollection
temp1 = 0
Temp2 = 0
With CreateObject("MSXML2.ServerXMLHttp")
.Open "GET", "https://docs.google.com/spreadsheets/d/1Yh6WlJTDxbOLPVaVgzn_mk2OAKYVUYgfnT5Wz-8odi4/gviz/tq?tqx=out:html&tq&gid=1", False
.send
oDom.body.innerHTML = .responseText
End With
Set oRow = oDom.getElementsByTagName("TR")
ReDim aRes(0 To oRow.Length - 1, 0 To oRow(0).getElementsByTagName("TD").Length - 1)
For Each trObj In oRow
Set oCell = trObj.getElementsByTagName("td")
For Each tdObj In oCell
aRes(temp1, Temp2) = tdObj.innerText
Temp2 = Temp2 + 1
Next tdObj
Temp2 = 0
temp1 = temp1 + 1
Next trObj
end sub
我希望 aRes 数组包含 HTML 代码中的确切值,即
aRes(1,0) 应该等于空格“” 我的结果为空,即“”
aRes(1,1) 应该等于一个空格和一个字符“a”我的结果只有一个“a”
aRes(1,2) 应该是 "a" 这个是正确检索的。
aRes(1,3) 应该等于两个空格“” 我的结果为空,即“”
aRes(1,4) 应该等于空 我的结果有一个空格,即" "
我知道我可以使用正则表达式来完成任务。但是,我想使用 getelementsbytagname 方法以一种简单的方式进行操作。
我尝试了innerhtml、outertext、outerhtml、textcontent 而不是innertext。但没有运气。 我还搜索了关键词,比如带间距的内部文本、getelementsbytagename 属性。也没有运气。
有人可以帮忙吗?非常感谢。
【问题讨论】:
-
似乎 IE(与 IE 和 MSHTML 相同的引擎)正在自动删除这些空格。如果您在“立即”窗格中键入
oDom.body.innerHtml,您会看到它。