ТЗ: есть таблица, пользователь тыркает на ней кнопку, запускается макрос, и вся таблица целиком отправляется на веб-сервер в инете. У меня на ум приходят два варианта:
- Программно сделать save as html, а потом получившийся файл тупо переслать на сервер - но как пересылать? Метод Publish работает по такому извратному протоколу, о существовании которого, похоже, знает он один.
- Опять же программно сохранить таблицу как htmlку, потом послать запрос серверу, в который в массив POST записать код свежесгенеренной странички, а на сервере повесить скрипт, который этот код запихает на страничку. Тогда вопрос, как из VBA послать запрос с данными в массиве POST?
Передача данных из Экселя на веб-сервер
Модератор: Naeel Maqsudov
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
- Aent
- Сообщения: 1129
- Зарегистрирован: 01 окт 2006, 14:52
- Откуда: Saratov,Russia
- Контактная информация:
1) А нельзя просто сохранять данные на локальный диск и через FTP (вызываемому" писал(а):как из VBA послать запрос с данными в массиве POST
из VBA) залить в публичный каталог Web сервера. А там подхватить скриптом?
2) Открыть из Excel страницу с WEB формой и sendkey ...
3) В цикле обращаться по адресу вашего серверного скрипта передавая очередную строку как параметр
Что то вроде http://my.web?myid=...,Row=.......................
На сервере обрабатывать обрашение и квитировать по некоему адресу считываемому макросом с помошью веб запроса
Это если не использовать дополнительных компонентов.
Иначе можно воспользоваться методом POST у XMLHTTPRequest.
Вообще, есть куча ActiveX умеющих делать POST

P.S. Возможно вам покажется интересной ссылка
http://blogs.msdn.com/cumgranosalis/arc ... vices.aspx
Хотя это не совсем по теме.
Спасибо, буду пробовать
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
- Aent
- Сообщения: 1129
- Зарегистрирован: 01 окт 2006, 14:52
- Откуда: Saratov,Russia
- Контактная информация:
------
-- HTTP ActiveX v2.4.0 (c) Chilkat --
- Release Description:
- ~~~~~~~~~~~~~~~~~~~
HTTP client component for communicating with HTTP servers.
- Send GET, POST, or HEAD requests to an HTTP server.
- Supports SSL.
- Can save cookies to a persistant XML-based file store.
- Can automatically add cookies from a persistent file store to HTTP
requests.
- Sophisticated caching capabilities.
- Cache can extend across multiple hard drives.
- Supports Basic HTTP authentication (login/password).
- Supports HTTP proxies.
- Supports two caching algorithms: LMFactor and constant-freshness.
- Can automatically follow redirects.
- Provides read and connect timeout properties.
- Allows for custom HTTP request headers to be added to any request.
- Handles international (non-English) web pages including Asian and Middle
Eastern languages.
- Automatically manages a pool of connections with HTTP servers.
- Can mimic FireFox or Internet Explorer.
- Provides access to all HTTP response header fields.
- Supports XMLHTTP.
- Supports multipart/form-data for easy uploads to HTTP server.
http://forum.ru-board.com/topic.cgi?for ... art=480#13
-- HTTP ActiveX v2.4.0 (c) Chilkat --
- Release Description:
- ~~~~~~~~~~~~~~~~~~~
HTTP client component for communicating with HTTP servers.
- Send GET, POST, or HEAD requests to an HTTP server.
- Supports SSL.
- Can save cookies to a persistant XML-based file store.
- Can automatically add cookies from a persistent file store to HTTP
requests.
- Sophisticated caching capabilities.
- Cache can extend across multiple hard drives.
- Supports Basic HTTP authentication (login/password).
- Supports HTTP proxies.
- Supports two caching algorithms: LMFactor and constant-freshness.
- Can automatically follow redirects.
- Provides read and connect timeout properties.
- Allows for custom HTTP request headers to be added to any request.
- Handles international (non-English) web pages including Asian and Middle
Eastern languages.
- Automatically manages a pool of connections with HTTP servers.
- Can mimic FireFox or Internet Explorer.
- Provides access to all HTTP response header fields.
- Supports XMLHTTP.
- Supports multipart/form-data for easy uploads to HTTP server.
http://forum.ru-board.com/topic.cgi?for ... art=480#13
В итоге сделалось через объект WebBrowser. Не самая быстрая вещь, но сойдет:
Код: Выделить всё
'**************************************** Post form data - begin
'sends form fields specified In Names/Values arrays To the URL
Sub PostRequest(URL, Names, Values)
Dim I, FormData, Name, Value
'Enumerate form names And it's values
'and built string representaion of the form data
For I = 0 To UBound(Names)
'URL encode source fields
Name = URLEncode(Names(I))
Value = URLEncode(Values(I))
If FormData <> "" Then FormData = FormData & "&"
FormData = FormData & Name & "=" & Value
Next
IEPostStringRequest URL, FormData
End Sub
'sends URL encoded form data To the URL using IE
Sub IEPostStringRequest(URL, FormData)
'Create InternetExplorer
Dim WebBrowser: Set WebBrowser = CreateObject("InternetExplorer.Application")
'You can uncoment Next line To see form results As HTML
WebBrowser.Visible = True
'Send the form data To URL As POST request
Dim bFormData() As Byte
ReDim bFormData(Len(FormData) - 1)
bFormData = StrConv(FormData, vbFromUnicode)
WebBrowser.Navigate URL, 2 + 4 + 8, , bFormData, _
"Content-type: application/x-www-form-urlencoded" + Chr(10) + Chr(13)
Do While WebBrowser.busy
' Sleep 100
DoEvents
Loop
MsgBox (WebBrowser.Document.body.innerhtml)
'WebBrowser.Quit
End Sub
'URL encode of a string data
Function URLEncode(Data)
Dim I, C, Out
For I = 1 To Len(Data)
C = Asc(Mid(Data, I, 1))
If C = 32 Then
Out = Out + "+"
ElseIf C < 48 Then
Out = Out + "%" + Hex(C)
Else
Out = Out + Mid(Data, I, 1)
End If
Next
URLEncode = Out
End Function
'**************************************** Post form data - end
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Может если правильно объявить переменные немного побыстрее будет ? )
Я про строку
Dim I, FormData, Name, Value
- если i/ целое число, то можно объявить как Dim i As Long
- если FormData строка, то можно объявить так Dim FormData As String
- если Name строка, то можно объявить так Dim Name As String
- Не знаю какое у вас значение принимает переменная Value. Если целое число то Long, если строка, то String.
Я про строку
Dim I, FormData, Name, Value
- если i/ целое число, то можно объявить как Dim i As Long
- если FormData строка, то можно объявить так Dim FormData As String
- если Name строка, то можно объявить так Dim Name As String
- Не знаю какое у вас значение принимает переменная Value. Если целое число то Long, если строка, то String.