Очистка страниц ASP с помощью Excel / VBA - PullRequest
3 голосов
/ 15 июля 2011

Я пытаюсь очистить страницу ASP.NET с помощью Excel. К сожалению, страница возвращает только 50 записей за раз, из нескольких страниц. Собственный модуль Excel для веб-запросов поднимает только первую страницу. Я хочу все страницы.

Как и большинство (всех?) ASP-страниц, есть несколько скрытых переменных, отправляемых обратно на сервер при запросе новой страницы. Важными из них являются _VIEWSTATE и _EVENT_VALIDATION.

Я написал функцию VBA, которая получает исходный HTML-код страницы и удаляет из него эти переменные.

Я также написал страницу .iqy, в которой разрешены запросы POST. Это выглядит примерно так:

WEB
1
http://www.myaspwebsite/search/search_List.aspx
__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=%2FwEPDwULLTEy[....truncated ..50k characters..]Mhudyk5U6u8%2BBpvxDPN8R4%3D&__EVENTVALIDATION=%2FwEWFQL%2FkN%2FBCgL6g%2B5vAvfY06EOAoic4qIIAome%2Bf4PAuOrjYgIAuKrjYgIAuGrjYgIAuCrjYgIAuerjYgIAt7e34UPAvuL7m8CtuLToQ4CiaTioggCyKX5%2Fg8C4tv1sAgC49v1sAgC4Nv1sAgC4dv1sAgC5tv1sAgC%2Fd7fhQ%2BU8QRtxd7MM4Bpa%2F%2FZC7I64eUh3Q%3D%3D&ctl00_RadMenu1_ClientState=&ctl00%24ContentPlaceHolder1%24NavBar1%24PageNoDropDownList=2&ctl00%24ContentPlaceHolder1%24NavBar1%24btnGo=Go&ctl00%24ContentPlaceHolder1%24NavBar2%24PageNoDropDownList=1

Selection=AllTables
Formatting=None
PreFormattedTextToColumns=True
ConsecutiveDelimitersAsOne=True
SingleBlockTextImport=False
DisableDateRecognition=False
DisableRedirections=False

Эта страница iqy успешно возвращает желаемые результаты, если в файл помещен пост-запрос. Я также могу использовать эту страницу .iqy программно в VBA и динамически назначать POST-запрос с помощью QueryTables. Однако мне сказали, что мой запрос ничего не дал. Я подозреваю, что это из-за длины моего аргумента. Только VIEWSTATE составляет около 50 000 символов. Я попытался распечатать строку аргумента в файл, и он обрезает его. Однако я могу прочитать ту же строку из файла и успешно использовать ее динамически.

Мои вопросы: я иду об этом лучшим способом? Какие ограничения я должен знать при этом? Кроме того, есть ли ограничение на размер строки в Excel?

1 Ответ

0 голосов
/ 14 октября 2018

В соответствии с документацией Microsoft по Visual Basic строки (то же значение применяется к строкам VBA):

Строка может содержать от 0 до примерно двух миллиардов (2 ^ 31) символов Юникода.

Этого более чем достаточно для обработки строки 50 КБ. Простой способ обойти ограничения строки IDE и непосредственные ограничения печати окна - это напечатать строку в ячейку Excel, а затем прочитать ее обратно в переменную, когда вам нужно использовать этот фрагмент данных.

...