Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/копирование данных из файла pdf, лежащего на сайте - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » копирование данных из файла pdf, лежащего на сайте (Макросы/Sub)
копирование данных из файла pdf, лежащего на сайте
rosko Дата: Среда, 12.08.2015, 11:47 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 58
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Помогите, пожалуйста!
Проблемы:
1) на сайте Минфина висит pdf файл со списком банков:
Перечень банков
Было бы здорово иметь макрос, который формирует на листе книги столбцы как в указанном файле. Данный список потребуется иногда обновлять.
2) возможно ли написать второй макрос, который бы брал наименование банка из листи книги из пункта№1, вбивал в input-поле "Наименование банка-гаранта" на другом сайте:
Наименование банка-гаранта
, где поиск выдает информацию по банку: в самом верху страницы-ответа есть поле "Всего записей: 81", необходимо выцепитьэтот номер (здесь 81) и вставить в книгу в строку соответствующего банка. Преграда тут еще в том, что для поиска на сайте: Наименование банка-гаранта необходимо, чтобы название в input-поле
выбиралось из справочника. Для этого наименование банка из пункта один для вставки в input-поле должно быть укорочено до символов в кавычках (насколько я понимаю).

Заранее спасибо за Ваше время и внимание!
 
Ответить
СообщениеПомогите, пожалуйста!
Проблемы:
1) на сайте Минфина висит pdf файл со списком банков:
Перечень банков
Было бы здорово иметь макрос, который формирует на листе книги столбцы как в указанном файле. Данный список потребуется иногда обновлять.
2) возможно ли написать второй макрос, который бы брал наименование банка из листи книги из пункта№1, вбивал в input-поле "Наименование банка-гаранта" на другом сайте:
Наименование банка-гаранта
, где поиск выдает информацию по банку: в самом верху страницы-ответа есть поле "Всего записей: 81", необходимо выцепитьэтот номер (здесь 81) и вставить в книгу в строку соответствующего банка. Преграда тут еще в том, что для поиска на сайте: Наименование банка-гаранта необходимо, чтобы название в input-поле
выбиралось из справочника. Для этого наименование банка из пункта один для вставки в input-поле должно быть укорочено до символов в кавычках (насколько я понимаю).

Заранее спасибо за Ваше время и внимание!

Автор - rosko
Дата добавления - 12.08.2015 в 11:47
rosko Дата: Среда, 12.08.2015, 15:26 | Сообщение № 2
Группа: Пользователи
Ранг: Участник
Сообщений: 58
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
В прикрепленном файле то, что есть на данный момент: макрос вводит в input-поле значения из столбца А.
Ругается на строку:
[vba]
Код
While j < objElement.Length
[/vba]

Кроме того, поиск не осуществляется, т.к. "для поиска на сайте наименование в input-поле должно выбираться из справочника".
К сообщению приложен файл: 1-.xlsm (16.2 Kb)


Сообщение отредактировал rosko - Среда, 12.08.2015, 15:29
 
Ответить
СообщениеВ прикрепленном файле то, что есть на данный момент: макрос вводит в input-поле значения из столбца А.
Ругается на строку:
[vba]
Код
While j < objElement.Length
[/vba]

Кроме того, поиск не осуществляется, т.к. "для поиска на сайте наименование в input-поле должно выбираться из справочника".

Автор - rosko
Дата добавления - 12.08.2015 в 15:26
doober Дата: Среда, 12.08.2015, 16:07 | Сообщение № 3
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
В текстовике 2 шага обмена с сервером.
Для обмена используйте объект MSXML2.XMLHTTP.
Получите конечную ссылку,вставляйте в браузер.
Но можно получить при помощи MSXML2.XMLHTTP текст страницы и регулярками распарсить
К сообщению приложен файл: 1099282.txt (1.2 Kb)


 
Ответить
СообщениеВ текстовике 2 шага обмена с сервером.
Для обмена используйте объект MSXML2.XMLHTTP.
Получите конечную ссылку,вставляйте в браузер.
Но можно получить при помощи MSXML2.XMLHTTP текст страницы и регулярками распарсить

Автор - doober
Дата добавления - 12.08.2015 в 16:07
rosko Дата: Среда, 12.08.2015, 18:05 | Сообщение № 4
Группа: Пользователи
Ранг: Участник
Сообщений: 58
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
doober, Спасибо за помощь, однако у меня не получилось пока. Правильно ли я понял, что через вызов функции можно получить текст, который нужно распарсить и полученное "наименование по справочнику" снова вставить в цикл поиска?
Не подскажите, как получить такой txt как у Вас прикреплен?
К сообщению приложен файл: 9451181.xlsm (18.1 Kb)


Сообщение отредактировал rosko - Среда, 12.08.2015, 18:07
 
Ответить
Сообщениеdoober, Спасибо за помощь, однако у меня не получилось пока. Правильно ли я понял, что через вызов функции можно получить текст, который нужно распарсить и полученное "наименование по справочнику" снова вставить в цикл поиска?
Не подскажите, как получить такой txt как у Вас прикреплен?

Автор - rosko
Дата добавления - 12.08.2015 в 18:05
doober Дата: Среда, 12.08.2015, 20:36 | Сообщение № 5
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
Подсказываю.
К сообщению приложен файл: 8895771.xlsm (22.7 Kb)


 
Ответить
СообщениеПодсказываю.

Автор - doober
Дата добавления - 12.08.2015 в 20:36
rosko Дата: Четверг, 13.08.2015, 17:53 | Сообщение № 6
Группа: Пользователи
Ранг: Участник
Сообщений: 58
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
doober, Спасибо) Скажите, пожалуйста, зачем добавленные функции, в частности "Readjson(s)", если они работают на ссылках из сообщения №3?
Очевидно, я просто не способен понять. Тем не менее, полностью разобрал Ваши дополнения. Поправьте, пожалуйста, если неправ: макрос zakupki() вызывает функцию RussianStringToURLEncode, которая кодирует русскоязычное наименование в понятное сайту. Далее это закодированное наименование передается в функцию GetHTTPResponse, которая возвращает ответ сайта (Json). Далее Json передается функции Readjson (вот тут тупик понимания: мы получаем Url, а ведь можно распарсить Pattern и взять наименование "по справочнику", а уже дальше выполнить изначальный макрос из сообщения №1, нет?)
К сообщению приложен файл: 1362018.xlsm (23.5 Kb)


Сообщение отредактировал rosko - Четверг, 13.08.2015, 18:05
 
Ответить
Сообщениеdoober, Спасибо) Скажите, пожалуйста, зачем добавленные функции, в частности "Readjson(s)", если они работают на ссылках из сообщения №3?
Очевидно, я просто не способен понять. Тем не менее, полностью разобрал Ваши дополнения. Поправьте, пожалуйста, если неправ: макрос zakupki() вызывает функцию RussianStringToURLEncode, которая кодирует русскоязычное наименование в понятное сайту. Далее это закодированное наименование передается в функцию GetHTTPResponse, которая возвращает ответ сайта (Json). Далее Json передается функции Readjson (вот тут тупик понимания: мы получаем Url, а ведь можно распарсить Pattern и взять наименование "по справочнику", а уже дальше выполнить изначальный макрос из сообщения №1, нет?)

Автор - rosko
Дата добавления - 13.08.2015 в 17:53
doober Дата: Четверг, 13.08.2015, 19:54 | Сообщение № 7
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
rosko,вы все правильно поняли.
Для того.что бы получить необходимую страницу с данными(ссылку на нее),необходимо на сервер передать некоторые
параметры.Банки хранятся в базе сайта под числовыми ID,наименование второстепенно.
Когда вы в справочнике выбираете банк,то скрипт в переменную пишет ИД,вы видите только наименование.
Я до конца не знаю вашей задачи,но все можно взять без браузера
Посмотрите в сторону работы с закупками по FTP.Все эти данные там есть.
PS:Не люблю работать через браузер


 
Ответить
Сообщениеrosko,вы все правильно поняли.
Для того.что бы получить необходимую страницу с данными(ссылку на нее),необходимо на сервер передать некоторые
параметры.Банки хранятся в базе сайта под числовыми ID,наименование второстепенно.
Когда вы в справочнике выбираете банк,то скрипт в переменную пишет ИД,вы видите только наименование.
Я до конца не знаю вашей задачи,но все можно взять без браузера
Посмотрите в сторону работы с закупками по FTP.Все эти данные там есть.
PS:Не люблю работать через браузер

Автор - doober
Дата добавления - 13.08.2015 в 19:54
rosko Дата: Четверг, 13.08.2015, 21:20 | Сообщение № 8
Группа: Пользователи
Ранг: Участник
Сообщений: 58
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
doober, замечательно, что я не ошибался)
задача в том, чтобы пройти это заполнение по справочнику, щелкнуть поиск и выцепить код страницы-ответа поиска. С последней просто взять число гарантий, выданных соответствующим банком. Я пробовал в нижеуказанной функции распарсить Pattern:
[vba]
Код
Function Readjson(ByVal url As String) As String
     bRes = False
     Set objRegExp = CreateObject("VBScript.RegExp")
     objRegExp.Global = True
     objRegExp.IgnoreCase = True
     objRegExp.Pattern = "name"":""(.+?)"",""fz94id"":(\d+),(.+?)""cpz"":""(\d+)"","
     bRes = objRegExp.test(url)
     If bRes Then
         Set objMatches = objRegExp.Execute(url)
         For i = 0 To objMatches.Count - 1
         Set objMatch = objMatches.Item(i)
         Next
     End If
     bbname = objMatches.Item(1)
     Readjson = url
End Function
[/vba]
Однако ругается на строку: (ошибка invalid procedure call or argument)
[vba]
Код
bbname = objMatches.Item(1)
[/vba]
К сообщению приложен файл: 1362018_2.xlsm (20.6 Kb)
 
Ответить
Сообщениеdoober, замечательно, что я не ошибался)
задача в том, чтобы пройти это заполнение по справочнику, щелкнуть поиск и выцепить код страницы-ответа поиска. С последней просто взять число гарантий, выданных соответствующим банком. Я пробовал в нижеуказанной функции распарсить Pattern:
[vba]
Код
Function Readjson(ByVal url As String) As String
     bRes = False
     Set objRegExp = CreateObject("VBScript.RegExp")
     objRegExp.Global = True
     objRegExp.IgnoreCase = True
     objRegExp.Pattern = "name"":""(.+?)"",""fz94id"":(\d+),(.+?)""cpz"":""(\d+)"","
     bRes = objRegExp.test(url)
     If bRes Then
         Set objMatches = objRegExp.Execute(url)
         For i = 0 To objMatches.Count - 1
         Set objMatch = objMatches.Item(i)
         Next
     End If
     bbname = objMatches.Item(1)
     Readjson = url
End Function
[/vba]
Однако ругается на строку: (ошибка invalid procedure call or argument)
[vba]
Код
bbname = objMatches.Item(1)
[/vba]

Автор - rosko
Дата добавления - 13.08.2015 в 21:20
doober Дата: Четверг, 13.08.2015, 22:26 | Сообщение № 9
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
Правильно и делает,что ругается.
Вывел функцией на лист
К сообщению приложен файл: 0000000.xlsm (23.8 Kb)


 
Ответить
СообщениеПравильно и делает,что ругается.
Вывел функцией на лист

Автор - doober
Дата добавления - 13.08.2015 в 22:26
rosko Дата: Четверг, 13.08.2015, 23:03 | Сообщение № 10
Группа: Пользователи
Ранг: Участник
Сообщений: 58
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
doober, вот это класс) С меня благодарность!
Оба макроса оставлять или тот, что моих рук не нужен?
 
Ответить
Сообщениеdoober, вот это класс) С меня благодарность!
Оба макроса оставлять или тот, что моих рук не нужен?

Автор - rosko
Дата добавления - 13.08.2015 в 23:03
doober Дата: Четверг, 13.08.2015, 23:29 | Сообщение № 11
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
Не нужен,он всю картину портит. %)


 
Ответить
СообщениеНе нужен,он всю картину портит. %)

Автор - doober
Дата добавления - 13.08.2015 в 23:29
rosko Дата: Четверг, 13.08.2015, 23:34 | Сообщение № 12
Группа: Пользователи
Ранг: Участник
Сообщений: 58
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
понял ;)
 
Ответить
Сообщениепонял ;)

Автор - rosko
Дата добавления - 13.08.2015 в 23:34
rosko Дата: Четверг, 13.08.2015, 23:42 | Сообщение № 13
Группа: Пользователи
Ранг: Участник
Сообщений: 58
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
последний вопрос по этой теме(
если число "всего записей: .." выглядит так : "Всего записей: более 2100" - как у Уралсиба
можно ли это учесть, ибо выдает 1 на лист
 
Ответить
Сообщениепоследний вопрос по этой теме(
если число "всего записей: .." выглядит так : "Всего записей: более 2100" - как у Уралсиба
можно ли это учесть, ибо выдает 1 на лист

Автор - rosko
Дата добавления - 13.08.2015 в 23:42
doober Дата: Пятница, 14.08.2015, 09:06 | Сообщение № 14
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
Можно.
Немного код изменил,оказывается нужны куки.
К сообщению приложен файл: 2224312.xlsm (23.2 Kb)


 
Ответить
СообщениеМожно.
Немного код изменил,оказывается нужны куки.

Автор - doober
Дата добавления - 14.08.2015 в 09:06
rosko Дата: Пятница, 14.08.2015, 09:34 | Сообщение № 15
Группа: Пользователи
Ранг: Участник
Сообщений: 58
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
doober, Спасибо)
дома Ваш код из сообщения №9 работал
на работе и тот и новый выдают только нули(
буду разбираться :(
 
Ответить
Сообщениеdoober, Спасибо)
дома Ваш код из сообщения №9 работал
на работе и тот и новый выдают только нули(
буду разбираться :(

Автор - rosko
Дата добавления - 14.08.2015 в 09:34
doober Дата: Пятница, 14.08.2015, 10:45 | Сообщение № 16
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
Установите Fiddler2
Посмотрите обмен с сервером.
Возможно политика нашей компании что-то не разрешает.


 
Ответить
СообщениеУстановите Fiddler2
Посмотрите обмен с сервером.
Возможно политика нашей компании что-то не разрешает.

Автор - doober
Дата добавления - 14.08.2015 в 10:45
rosko Дата: Пятница, 14.08.2015, 11:52 | Сообщение № 17
Группа: Пользователи
Ранг: Участник
Сообщений: 58
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
doober, да вот даже сторонние программы запрещены %)
все ссылки макроса доступные и работают, если их вызывать
не пойму, в чем преграда( прокси попробую прописать
 
Ответить
Сообщениеdoober, да вот даже сторонние программы запрещены %)
все ссылки макроса доступные и работают, если их вызывать
не пойму, в чем преграда( прокси попробую прописать

Автор - rosko
Дата добавления - 14.08.2015 в 11:52
rosko Дата: Пятница, 14.08.2015, 14:07 | Сообщение № 18
Группа: Пользователи
Ранг: Участник
Сообщений: 58
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
doober, при пошаговой отладке код останавливается в данной функции:
[vba]
Код
Function GetHTTPResponse(ByVal sURL As String, oXMLHTTP) As String
       'On Error Resume Next
       Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP")
       With oXMLHTTP
           .Open "GET", sURL, False
           .send
           GetHTTPResponse = .responseText
       End With
      ' Set oXMLHTTP = Nothing
End Function
[/vba]
а именно,после строки
[vba]
Код
.send
[/vba]:
Если взять переменную sUrl из строки выше обрыва, вставить в watch window и запустить ответную ссылку в браузер, то вроде работает


Сообщение отредактировал rosko - Пятница, 14.08.2015, 14:09
 
Ответить
Сообщениеdoober, при пошаговой отладке код останавливается в данной функции:
[vba]
Код
Function GetHTTPResponse(ByVal sURL As String, oXMLHTTP) As String
       'On Error Resume Next
       Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP")
       With oXMLHTTP
           .Open "GET", sURL, False
           .send
           GetHTTPResponse = .responseText
       End With
      ' Set oXMLHTTP = Nothing
End Function
[/vba]
а именно,после строки
[vba]
Код
.send
[/vba]:
Если взять переменную sUrl из строки выше обрыва, вставить в watch window и запустить ответную ссылку в браузер, то вроде работает

Автор - rosko
Дата добавления - 14.08.2015 в 14:07
krosav4ig Дата: Среда, 19.08.2015, 19:52 | Сообщение № 19
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
rosko,
по первому вопросу из 1 поста: зачем pdf, если у минфина есть опендата 7710168360-BanksID?
в файле сделал несколько вариантов получения списка банков
+
на основе кода doober сделал еще 1 вариант получения закупок, если при первом запросе (выбор из справочника) возвращается >1 значения, выпадает форма для выбора нужного, выбор двойным тыком
на форме контрол MSFlexgird, если у вас он не установлен, работать не будет, в архиве msflxgrd_ocx.zip нужные файлы, копируем в system32 (если x64 - в syswow64) и запускаем install_msflxgrd
К сообщению приложен файл: 2224312.zip (98.0 Kb)


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

Сообщение отредактировал krosav4ig - Четверг, 20.08.2015, 01:46
 
Ответить
Сообщениеrosko,
по первому вопросу из 1 поста: зачем pdf, если у минфина есть опендата 7710168360-BanksID?
в файле сделал несколько вариантов получения списка банков
+
на основе кода doober сделал еще 1 вариант получения закупок, если при первом запросе (выбор из справочника) возвращается >1 значения, выпадает форма для выбора нужного, выбор двойным тыком
на форме контрол MSFlexgird, если у вас он не установлен, работать не будет, в архиве msflxgrd_ocx.zip нужные файлы, копируем в system32 (если x64 - в syswow64) и запускаем install_msflxgrd

Автор - krosav4ig
Дата добавления - 19.08.2015 в 19:52
krosav4ig Дата: Среда, 19.08.2015, 19:52 | Сообщение № 20
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
К сообщению приложен файл: msflxgrd_ocx.zi.001 (100.0 Kb) · msflxgrd_ocx.zi.002 (66.9 Kb)


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

Сообщение отредактировал krosav4ig - Четверг, 20.08.2015, 01:43
 
Ответить
Сообщение

Автор - krosav4ig
Дата добавления - 19.08.2015 в 19:52
Мир MS Excel » Вопросы и решения » Вопросы по VBA » копирование данных из файла pdf, лежащего на сайте (Макросы/Sub)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!