在一个 Excel 网络查询中获取多个表
Get multiple tables in one Excel web query
我已经使用 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"))
.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 ...
我想知道是否可以执行这些选项中的任何一个,以更容易的为准 and/or 更好:
- 从Excel开始,打开一个连接循环获取所有数据然后关闭连接,或者
- Excel 检测到 webquery 没有返回任何数据,因此 webquery 为空,因此它会自动重试该 webquery 直到它获得数据,然后移动到下一个查询
编辑: Graphical idea of how the tables should be arranged in one call
您尝试过添加转置吗?
With ActiveSheet.QueryTables.Add(Connection:="URL;http://domain.com", Destination:=Range("$A"))
'...
.Transpose = True
End With
编辑:
我正在考虑使用转置和更改
Destination:=Range("$A")
进入
Destination:=Range(StartingCell)'where StartigCell is valued to set the first empty row
所以所有数据都在列而不是行中
我已经使用 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"))
.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 ...
我想知道是否可以执行这些选项中的任何一个,以更容易的为准 and/or 更好:
- 从Excel开始,打开一个连接循环获取所有数据然后关闭连接,或者
- Excel 检测到 webquery 没有返回任何数据,因此 webquery 为空,因此它会自动重试该 webquery 直到它获得数据,然后移动到下一个查询
编辑: Graphical idea of how the tables should be arranged in one call
您尝试过添加转置吗?
With ActiveSheet.QueryTables.Add(Connection:="URL;http://domain.com", Destination:=Range("$A"))
'...
.Transpose = True
End With
编辑:
我正在考虑使用转置和更改
Destination:=Range("$A")
进入
Destination:=Range(StartingCell)'where StartigCell is valued to set the first empty row
所以所有数据都在列而不是行中