Страницы: 1
RSS
Работа из excel с вэб страницами. VBA
 
Уважаемые знатоки, прошу вас помочь.    
 
Нужно сделать следующее:    
Открыть макросом ссылку, которая содержится в ячейке, проверить содержание данной страницы по опр. правилу.  
 
Возможно ли это сделать стандартными методами excel+vba?  
 
Пример прикладывать не вижу смысла, в примере была бы лишь ячейка с рандомной ссылкой.    
Наставьте на пусть истинный, может уже кто-то сталкивался с такой задачей? Помогите
 
Это не поможет?  
http://www.compress.ru/article.aspx?id=12471&iid=473
Учимся сами и помогаем другим...
 
Да, такое сделать возможно.  
 
Примеры подобных макросов можно поглядеть здесь:  
http://excelvba.ru/category/internet  
 
Ничего более конкретного посоветовать не могу, ибо пример выкладывать вам лень, а что такое «проверить содержание данной страницы по опр. правилу» - мне, увы, не понятно.
 
Function WebPageText(ByVal sURL As String) As String  
   On Error Resume Next  
   Set IE = CreateObject("InternetExplorer.Application"):    ' загружаем браузер Internet Explorer  
   IE.Navigate sURL    ' загружаем сайт  
   Application.Wait (Now + TimeValue("0:00:02"))  
   While IE.busy Or (IE.readyState <> 4): DoEvents: Wend    ' ждем, пока загрузится страница  
   WebPageText = IE.Document.body.innerText    ' считываем текст веб-страницы  
   IE.Quit: Set IE = Nothing    ' закрываем браузер  
End Function  
 
Нашёл вот этот кусок, скажите, это нормально, что страницы открываются по 10 секунд?
 
Ну вообще можно проще сделать  
Необязательно запускать Internet Explorer - можно использовать веб-запросы:  
http://excelvba.ru/code/WebQueryRange  
или другие способы вроде этого:  
http://excelvba.ru/code/GetHTTPResponse  
 
 
Но поскольку вы не сказали, что за веб-страницы вас интересуют, и какие данные с них надо получить, - я не могу вам сказать, как сделать проще\быстрее.  
Вообще, скорость загрузки страниц во многом зависит от сложности самих этих страниц, и скорости доступа в интернет.
 
> Ну вообще можно проще сделать  
> Необязательно запускать Internet Explorer - можно использовать веб-запросы:  
 
EducatedFool, ух-ты, ух-ты, не знал, т.к. не приходилось делать запросы прямо из Excel : )  
Я так понимаю это обычный httpXMLRequest-объект?
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
{quote}{login=nerv}{date=09.08.2012 04:16}{thema=}{post}  
EducatedFool, ух-ты, ух-ты, не знал, т.к. не приходилось делать запросы прямо из Excel : )  
Я так понимаю это обычный httpXMLRequest-объект?{/post}{/quote}  
 
nerv, я не понял, это что, шутка?  
ты не знал про веб-запросы в Excel ???  
не верю
 
EducatedFool, ну, я слышал о их существовании, но что конкретно за зверь не вникал : )  
Я смотрю ты синхронные запросы делаешь. Поди вешает прогу на время ожидания?  
 
Кстати, может будет интересно http://xmlhttprequest.ru/
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
{quote}{login=nerv}{date=09.08.2012 04:50}{thema=}{post}  
Я смотрю ты синхронные запросы делаешь. Поди вешает прогу на время ожидания?  
{/post}{/quote}  
 
Я, если честно, в этом не разбираюсь.  
Для меня главное результат - Excel сам вытягивает данные с сайта, с нужной таблицы.  
А какие там запросы - синхронные или нет, я не знаю.  
Это встроенный механизм Excel, а с начинкой Excel я не знаком.  
Вроде там можно выполнять запрос в фоновом режиме (в одном случае Excel подвисает, во втором - нет. по-умолчанию, ничего не подвисает)  
 
Сайт этот читал, брал оттуда даже что-то,  
но не так часто нужны эти запросы, чтобы досконально разбираться в этой теме.
 
Смотрел пример по этой ссылке (т.к. он мне ближе всего):  
http://excelvba.ru/code/GetHTTPResponse  
 
Может я чего то не понимаю? Зачем все эти танцы с бубном?  
 
For i = 0 To UBound(sHTMLBody)  
       GetHTTPResponse = GetHTTPResponse & ChrW(AscW(Chr(AscB(MidB(sHTMLBody, i + 1, 1)))))  
   Next  
 
или  
 
GetHTTPResponse = StrConv(sHTMLBody, vbUnicode)  
 
Почему просто не:  
xmlHttpRequest.responseText ?  
 
Полный код:  
Sub io()  
   Dim arr As Variant  
   Dim counter As Long  
   Dim xmlHttpRequest As Object  
     
   Set xmlHttpRequest = CreateObject("MSXML2.XMLHTTP")  
     
   xmlHttpRequest.Open "GET", "http://excelvba.ru", False  
   xmlHttpRequest.send Null  
     
   arr = Split(xmlHttpRequest.responseText, vbLf)  
     
   For counter = 0 To UBound(arr, 1)  
       Cells(counter + 1, 1).Value = arr(counter)  
   Next  
End Sub
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
хотя по большому счету, думаю, будет достаточно этого  
 
Function HTTP_getText(ByRef url As String) As String  
   With CreateObject("MSXML2.XMLHTTP")  
       .Open "GET", url, False  
       .Send Null  
       Request = .responseText  
   End With  
End Function
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
nerv, всё ты правильно понимаешь.  
Все эти «танцы с бубном» - явно лишнее.  
Я этот код давным-давно взял где-то в инете, и использовал.  
Буквально пару дней назад на больших веб-страницах он начал жестко тормозить,  
и я заменил дурацкий цикл на строку  
GetHTTPResponse = StrConv(sHTMLBody, vbUnicode)  
 
Почему не xmlHttpRequest.responseText?  
не могу сказать, давно не сравнивал результаты выдачи responseText и responseBody  
 
Вроде когда-то уже пробовал избавляться от тормозного цикла, применил responseText - и результат был несколько другим  
А с responseBody и этим загадочным циклом - что надо.
 
{quote}{login=EducatedFool}{date=09.08.2012 09:12}{thema=}{post}Почему не xmlHttpRequest.responseText?  
не могу сказать, давно не сравнивал результаты выдачи responseText и responseBody  
 
Вроде когда-то уже пробовал избавляться от тормозного цикла, применил responseText - и результат был несколько другим  
А с responseBody и этим загадочным циклом - что надо.{/post}{/quote}  
responseBody: Retrieves the response body as an array of unsigned bytes. [возвращает тело ответа в виде массива байтов без знака.]
 
responseText: Retrieves the response body as a string. [возвращает тело ответа в виде строки.]
 
http://msdn.microsoft.com/en-us/library/ie/ms534368(v=vs.85).aspx  
 
исходя из того, что написано join(chr(responseBody), "") = responseText
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
Страницы: 1
Читают тему
Наверх
Loading...