我正在使用VBA自动化来获取我工作中的票务系统的一些信息。我试图将值输入到生成的表中,但只有最有用的信息才能进入列&#34; A&#34;在表格&#34; Plan1&#34;是<td>
,其中包含溢出:隐藏的CSS属性。我不知道它们是否相关,但恰巧是唯一不会出现的数据。有人可以帮帮我吗?
HTML code:
<div id="posicionamentoContent">
<table class="grid">
<thead>...</thead>
<tbody>
<tr id="937712" class="gridrow">
<td width="200px"> Leonardo Peixoto </td>
<td width="200px"> 23/12/2015 09:45 </td>
<td width="200px"> SIM </td>
<td width="200px"> Telhado da loja com pontos de vazamento.</td>
<td width="200px" align="center"></td>
<td width="200px" align="center"></td>
</tr>
...
...
...
完整代码:http://i.stack.imgur.com/4BsFo.png
我需要获得前4个<td>
文本(Leonardo Peixoto,2015年12月23日09:45,SIM和Telhado da loja com pontos de vazamento。)但它们只是我可以和#39的文本;得到。
Obs:当我使用开发人员工具(f12)检查每个元素时,它完美地向我展示了<td>
中我需要的信息。但是当我打开&#34;源代码&#34;页面检查html,代码是这样的:
<div id="tabPosicionamento" style="padding: 5px 0 5px 0;" class="ui-tabs-hide">
div id="posicionamentoContent"></div>
</div>
示例VBA:
Sub extractTablesData1()
'we define the essential variables
Dim IE As Object, obj As Object
Dim ticket As String
Set IE = CreateObject("InternetExplorer.Application")
ticket= InputBox("Enter the ticket code")
With IE
.Visible = False
.navigate ("https://www.example.com/details/") & ticket
While IE.ReadyState <> 4
DoEvents
Wend
ThisWorkbook.Sheets("Plan1").Range("A1:K500").ClearContents
Set data = IE.document.getElementsByClassName("thead")(0).getElementsByTagName("td")
i = 0
For Each elemCollection In data
ThisWorkbook.Sheets("Plan1").Range("A" & i + 1) = data(i).innerText
i = i + 1
Next elemCollection
End With
IE.Quit
Set IE = Nothing
....
....
End Sub
此功能在&#34; A&#34; 列 Plan1 仅<td class=info3"></td>
和<td class=info4"></td>
中返回,但我需要{{ 1}}和<td class=info1"></td>
答案 0 :(得分:1)
由于代理阻止我,我无法读取页面代码,但我前一段时间遇到了类似的问题,我发现的解决方案是将所有数据放在剪贴板上并粘贴。之后,我清理工作表上的数据。
这里我用过的代码:
Set ieTable = ie.document.getElementById("ID")
If Not ieTable Is Nothing Then
Set clip = New DataObject
clip.SetText "<html>" & ieTable.outerHTML & "</html>"
clip.PutInClipboard
Sheet1.Range("A1").Select
ActiveSheet.PasteSpecial Format:="Unicode Text", link:=False, DisplayAsIcon:=False, NoHTMLFormatting:=True
End If
考虑到您需要隔离4 td行,您可以使用循环进行每次搜索。
答案 1 :(得分:0)
在您的示例中,它会对数据进行计算,但不会使用它。此外,单元格分配应该是单元格(x,y).value。这是工作代码。
Sub extractTablesData1()
'we define the essential variables
Dim IE As Object, Data As Object
Dim ticket As String
Set IE = CreateObject("InternetExplorer.Application")
With IE
.Visible = False
.navigate ("put your data url here")
While IE.ReadyState <> 4
DoEvents
Wend
Set Data = IE.document.getElementsByTagName("tr")(0).getElementsByTagName("td")
i = 1
For Each elemCollection In Data
ActiveWorkbook.Sheets(1).Cells(1, i).Value = elemCollection.innerHTML
i = i + 1
Next elemCollection
End With
IE.Quit
Set IE = Nothing
End Sub
答案 2 :(得分:0)
它没有提供我需要的信息(持续<td>
)
<div id="posicionamentoContent">
<table class="grid">
<thead>...</thead>
<tbody>
<tr id="937712" class="gridrow">
<td width="200px"> Leonardo Peixoto </td>
<td width="200px"> 23/12/2015 09:45 </td>
<td width="200px"> SIM </td>
<td width="200px"> Telhado da loja com pontos de vazamento.</td>
<td width="200px" align="center"></td>
<td width="200px" align="center"></td>
</tr>