您好我正在从网站导入整个表格到excel字符串:
Dim fST As String
fST = Doc.getElementsByTagName("table")(0).innerText
之后我想在excel单元格中拆分表格,并使用html表格中的<td>
标签进行拆分,或者至少这是我认为可以做到的选项,所以导入的表一旦导入,将在excel内部相同,每个值都将在单个单元格内。
让我知道谢谢。
这是我正在使用的整个conde:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = Range("URL").Row And _
Target.Column = Range("URL").Column Then
Dim IE As New InternetExplorer
IE.Visible = True
IE.navigate Application.ActiveSheet.Range("URL")
Do
DoEvents
Loop Until IE.readyState = READYSTATE_COMPLETE
Dim Doc As HTMLDocument
Set Doc = IE.document
Dim tbl, trs, tr, tds, td, r, c
Set tbl = Doc.getElementsByTagName("table")(0)
Set trs = tbl.getElementsByTagName("tr")
For r = 1 To trs.Count
Set tds = trs(r).getElementsByTagName("td")
For c = 1 To tds.Count
ActiveSheet.Cells(r, c).Value = tds(c).innerText
Next c
Next r
IE.Quit
End If
End Sub
但它说错误:对象不支持以下行中的此属性或方法:对于r = 1 To trs.Count
答案 0 :(得分:6)
编辑:测试示例
Sub Tester()
Dim IE As Object
Dim tbls, tbl, trs, tr, tds, td, r, c
Set IE = CreateObject("internetexplorer.application")
IE.navigate "http://www.w3schools.com/html/html_tables.asp"
Application.Wait Now + TimeSerial(0, 0, 4)
Set tbls = IE.Document.getElementsByTagName("table")
For r = 0 To tbls.Length - 1
Debug.Print r, tbls(r).Rows.Length
Next r
Set tbl = IE.Document.getElementsByTagName("table")(5)
Set trs = tbl.getElementsByTagName("tr")
For r = 0 To trs.Length - 1
Set tds = trs(r).getElementsByTagName("td")
'if no <td> then look for <th>
If tds.Length = 0 Then Set tds = trs(r).getElementsByTagName("th")
For c = 0 To tds.Length - 1
ActiveSheet.Range("B4").Offset(r, c).Value = tds(c).innerText
Next c
Next r
End Sub
答案 1 :(得分:2)
我也在寻找这个问题的答案。我终于通过与同事交谈找到了解决方案,这实际上是通过录制宏来实现的。
我知道,你们都认为自己超越了这一点,但这实际上是最好的方式。请在此处查看完整帖子:http://automatic-office.com/?p=344简而言之,您希望录制宏并转到数据 - &gt;从网站导航到您的网站,然后选择您想要的表格。告诉我们将哪个细胞放入其中就可以了!
我过去曾使用上面的解决方案“get element by id”类型的东西,这对于一些元素来说很棒,但是如果你想要一个完整的表,并且你没有超级经验,只需记录一个宏。不要告诉你的朋友,然后重新格式化它看起来像你自己的工作,所以没有人知道你使用宏工具;)