【发布时间】:2015-11-18 08:51:34
【问题描述】:
我使用 Web 查询将许多表格从网页获取到 Excel。 网页中的表格是这样列出的
- A1
- A2
- A3
- A4
- A5
- A6
- A7
- A8
- A9
- A10
- A11
- A12
- A13
- A14
- A15
- A16
- A17
- B1
- B2
- B3
- B4
- B5
- B6
- B7
- B8
- B9
- B10
- B11
- B12
- B13
- B14
- B15
- B16
- B17
- ...
在 Excel 中我需要它们是这样的:
A1 B1 C1 D1 E1 F1 G1 ...
A2 B2 C2 D2 E2 F2 G2 ...
我通过多次运行这段代码得到所有这些表,只需将 webtables 从 1,18,35,52,69... 更改为 2,19,36,53,70...3,20, 37,54,71... 直到 17,34,51,68,85... 以及从 A1 到 AE1、BI1... 的数据范围:
With ActiveSheet.QueryTables.Add(Connection:="URL;http://domain.com", Destination:=Range("$A$1"))
.Name = "table-01"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlSpecifiedTables
.WebFormatting = xlWebFormattingNone
.WebTables = _
"1,18,35,52,69,86,103,120,137,154,171,188,205,222,239,256,273,290,307,324,341,358,375,392,409,426,443,460,477,494,511,528,545,562,579,596,613,630,647,664,681,698,715,732,749,766,783,800,817,834"
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = True
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
上面的代码运行 17 次以获取所有数据并将其从所有垂直到水平移动到 Excel 中。 但这需要很长时间,我注意到对于每个网络查询,我都打开了一个新连接,将数据放入 Excel,关闭,移至下一个,打开连接,将数据放入 Excel,关闭......等等 17次。但是在高负载的情况下,网络服务器有时会以错误和空白页面进行响应,所以我进入了我的 Excel 空白部分,例如:
A1 B1 C1 xx E1 F1 G1 ...
A2 B2 C2 xx E2 F1 G2 ...
我想知道是否可以执行这些选项中的任何一个,以更容易和/或更好的为准:
- 在 Excel 中,打开一个连接并循环获取所有数据,然后关闭连接,或者
- Excel 检测到 Web 查询未返回任何数据,因此 Web 查询为空白,因此它会自动重试该 Web 查询,直到它获得数据,然后移至下一个查询
编辑: Graphical idea of how the tables should be arranged in one call
【问题讨论】:
-
选项 1 可以通过多种方法实现。使用 HTTPXML 对象,通常称为“抓取”。
-
这是一个。 link。点击问题的 [xmlhttp-vba] 或 [html-parsing] 标签查看更多示例。
-
使用 HTPXML 我将获取所有数据,但我必须将 table1、table17 ... 放在彼此正下方,然后将 table2、table18 放在右侧,以此类推表,我不知道如何正确移动它们,因为我没有任何参考如何知道何时完成一张桌子并开始下一张......
-
要回答您的问题,我必须查看构成包含表格的网页的 html 代码。有太多的方法可用于在网页上放置多个表格,以简单地声明“执行此操作”而无需先查看 HTML 布局。
-
@Jeeped 请在此处查看示例代码 link ,从那里开始,所有以 Belorussia Kup 开头的表都应该水平相邻,这同样适用于 Meksiko 2 等等
标签: vba excel excel-web-query