VBA Скачать файл xlsx с веб-сайта (DMS или EDM) - PullRequest
0 голосов
/ 22 марта 2020

Именно с плохим уровнем в VBA я ищу ваш опыт по этой проблеме, безуспешно изучая различные предметы, похожие на мои. Действительно, я хочу загрузить файл .xlsx с веб-сайта (или системы управления документами). Ссылка на сайт выглядит следующим образом: https://www.mezzoteam.com/login.aspx с обязательной аутентификацией.

Следующий код используется для подключения к веб-сайту с параметрами подключения и для доступа к странице, где находится файл скачано содержится:

Sub GetTable_GED()

'Renseigner le lien de la page de connexion et la page du taleau à récupérer
Const cURL = "https://www.mezzoteam.com/login.aspx?ReturnUrl=%2flayout_documents.aspx"
Const cURL2 = "https://www.mezzoteam.com/window_document.aspx?&wsfromlink=22e58a2a-fa83-4462-9b30-1768498b67e6&id=ffc12ca9-1333-4b35-b5eb-7d3857f00b70"

Dim IE As InternetExplorer
Dim Doc As HTMLDocument
Dim LoginForm As HTMLFormElement
Dim objElement As Object
Dim objCollection As Object

'Créer une nouvelle fenetre dans le navigateur
Set IE = New InternetExplorer

'Activer le débogage de la page
IE.Visible = True

'Lancer la page
IE.navigate cURL

'Chargement initial de la page

Do While IE.readyState <> READYSTATE_COMPLETE Or IE.Busy: DoEvents: Loop

Set Doc = IE.document

'Identifier la structure de la page
Set LoginForm = Doc.forms(0)

'Remplir les paramètres de connexion de type username, password
'input name="ctl00$body$userName" id="ctl00_body_userName" class="form-control" placeholder="email@example.com" autocomplete="username" type="email"
'<input name="ctl00$body$password" type="password" id="ctl00_body_password" class="form-control" autocomplete="current-password">

With Doc

  .getElementById("ctl00_body_userName").Value = "xxxxxxxx@xxxx.com"
  .getElementById("ctl00_body_password").Value = "xxxxxxx"

  'Executer en cliquant le bouton de connexion
'<input type="submit" name="ctl00$body$LoginButton" value="Se connecter" id="ctl00_body_LoginButton" class="btn btn-block btn-primary">

  .getElementsByName("ctl00$body$LoginButton")(0).Click

End With

Do While IE.readyState <> READYSTATE_COMPLETE Or IE.Busy: DoEvents: Loop

'Maintenant, allons dans la page où se trouve le tableau à récupérer
IE.navigate cURL2
Do While IE.readyState <> READYSTATE_COMPLETE Or IE.Busy: DoEvents: Loop

Set objElement = IE.document

With objElement

'<button id="ctl00_BodyPlaceHolder_actionsbar_download" type="button" value="download" class="btn btn-primary"><span id="ctl00_BodyPlaceHolder_actionsbar_download_label">Télécharger</span> </button>

.getElementById("ctl00_BodyPlaceHolder_actionsbar_download").Click **click buton to download file**

End With

End Sub

'' '

На данном этапе загрузка не запускается! У меня есть это сообщение об ошибке: «Ошибка выполнения 438: свойство или метод, не управляемый этим объектом» из кода .getElementById("ctl00_BodyPlaceHolder_actionsbar_download").Click

Моя потребность: загрузить этот файл .xlsx и открыть его в рабочей книге активного листа.

Я также прикрепляю на рисунках страницу, на которую нацелен файл, а также код HTML, выделяющий файл для загрузки.

HTML кодовая страница, где файл содержит

С уважением,

1 Ответ

0 голосов
/ 23 марта 2020

Так что .getElementsById("yui-gen1000018")(0).Click предполагает, что используемый вами метод вернул бы коллекцию элементов, которые совместно используют один и тот же id. Из этой коллекции вы хотели бы нажать на 1-й элемент.

Однако , такой метод, как .getElementsById(), не существует. Вы ищете метод .getElementById() и возвращает единственный элемент с указанным id вместо набора элементов. Помните, что id элемента HTML должен быть уникальным.

Итак, если элемент, который вы хотите щелкнуть, на самом деле имеет уникальный id, равный yui-gen1000018, то способ щелкнуть это будет:

.getElementById("yui-gen1000018").Click

...