【问题标题】:Get multiple tables in one Excel web query在一个 Excel Web 查询中获取多个表
【发布时间】: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 ...

我想知道是否可以执行这些选项中的任何一个,以更容易和/或更好的为准:

  1. 在 Excel 中,打开一个连接并循环获取所有数据,然后关闭连接,或者
  2. 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


【解决方案1】:

您是否尝试过添加转置?

With ActiveSheet.QueryTables.Add(Connection:="URL;http://domain.com", Destination:=Range("$A$1"))
    '...
    .Transpose = True
End With

编辑:

我正在考虑使用转置和更改

Destination:=Range("$A$1")

进入

Destination:=Range(StartingCell)'where StartigCell is valued to set the first empty row

所以所有数据都在列而不是行中

【讨论】:

  • 请参阅我上面的评论以及示例代码link,转置不是一个选项,我的示例指的是表格,而不仅仅是一列数据。我必须每 17 个桌子将每张桌子移到一个相邻的位置,然后向下移动...
  • @gereqi 我编辑澄清(但如果我误解了你的需求,我很抱歉)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-29
  • 1970-01-01
  • 2018-06-15
  • 1970-01-01
  • 1970-01-01
  • 2012-01-09
相关资源
最近更新 更多