Получить несколько таблиц в одном веб-запросе Excel

Я получаю много таблиц с веб-страницы в 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 ...

Я получаю все эти таблицы, запуская этот код несколько раз, просто меняя веб-таблицы с 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 обнаруживает, что веб-запрос не возвращает никаких данных, поэтому веб-запрос пуст, и поэтому он автоматически повторяет этот веб-запрос, пока не получит данные, а затем переходит к следующему запросу.

EDIT: Графическое представление о том, как таблицы должны быть расположены в одном вызове а>


person g.e    schedule 18.11.2015    source источник
comment
Вариант 1 возможен разными способами. Использование объекта HTTPXML обычно называется «очисткой».   -  person    schedule 18.11.2015
comment
Вот один. ссылка. Нажмите на теги вопроса [xmlhttp-vba] или [html-parsing], чтобы увидеть больше примеров.   -  person    schedule 18.11.2015
comment
С помощью HTPXML я получу все данные, но я должен взять table1, table17... и поставить их прямо друг под другом, а затем table2, table18 поставить справа и так со всеми остальными таблицами, я не знаю, как правильно чтобы переместить их, потому что у меня нет никакой ссылки, как узнать, когда заканчивается одна таблица и начинается следующая...   -  person g.e    schedule 18.11.2015
comment
Чтобы дать ответ на ваш вопрос, мне нужно было бы увидеть html-код, из которого состоит веб-страница, содержащая таблицы. Существует слишком много доступных способов размещения нескольких таблиц на веб-странице, чтобы просто сказать «сделай это», не видя предварительно HTML-макет.   -  person    schedule 18.11.2015
comment
@Jeeped см. пример кода здесь ссылка , оттуда все таблицы, начинающиеся с Belorussia Kup, должны располагаться одна рядом с другой по горизонтали то же самое касается Мексико 2 и так далее   -  person g.e    schedule 18.11.2015


Ответы (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

чтобы все данные были в столбцах, а не в строках

person genespos    schedule 18.11.2015
comment
см. мой комментарий выше с примером кода ссылка, транспонирование не вариант, мой пример относился к таблицам, не просто столбец данных. Я должен перемещать каждый стол рядом друг с другом каждые 17 столов, а затем двигаться вниз... - person g.e; 18.11.2015
comment
@gereqi я отредактировал, чтобы уточнить (но извините, если я неправильно понял ваши потребности) - person genespos; 18.11.2015