powered by simpleCommunicator - 2.0.39     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel и up/download файлов
5 сообщений из 5, страница 1 из 1
Excel и up/download файлов
    #39335219
RegisteredUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги!

Может кто-то реализовывал такое и подскажет хорошее решение.

Задача такая:
- Юзер открывает файл Excel
- Excel ломится на определнный URL и выкачивает несколько файлов на локальный диск
- ... тут работает с выкаченными файлами локально ...
- Excel закачивает несколько файлов на сервак

В общем интересует up/download файлов посредством Excel.
(а если еще и заюзать встроенный в винду zip вааще будет тотальный кул)
...
Рейтинг: 0 / 0
Excel и up/download файлов
    #39335250
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RegisteredUserExcel ломится на определнный URL и выкачивает несколько файлов на локальный дискПротокол? Поддержка со стороны сервера?
Вообще в этом смысле VBA Excel ничем не отличается от VB.
Если речь о HTTP (веб) сервере, можно, например, подключить в референсы тот же MSINET.OCX (если отсутствует, загрузить с сайта Майкрософт или там вытащить из инсталлятора студии) и соответственно использовать Microsoft Internet Control, или через штатный WebBrowser, или ещё как...
...
Рейтинг: 0 / 0
Excel и up/download файлов
    #39335272
RegisteredUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaRegisteredUserExcel ломится на определнный URL и выкачивает несколько файлов на локальный дискПротокол? Поддержка со стороны сервера?
Вообще в этом смысле VBA Excel ничем не отличается от VB.
Если речь о HTTP (веб) сервере, можно, например, подключить в референсы тот же MSINET.OCX (если отсутствует, загрузить с сайта Майкрософт или там вытащить из инсталлятора студии) и соответственно использовать Microsoft Internet Control, или через штатный WebBrowser, или ещё как...

предполагаем HTTP
...
Рейтинг: 0 / 0
Excel и up/download файлов
    #39340630
RegisteredUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашел на просторах хороший пример.
Оставлю тут для будущих поколений

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
' Модуль

Private Const INTERNET_FLAG_NO_CACHE_WRITE = &H4000000
Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal lpszAgent As String, ByVal dwAccessType As Long, ByVal lpszProxyName As String, ByVal lpszProxyBypass As String, ByVal dwFlags As Long) As Long
Private Declare Function InternetReadBinaryFile Lib "wininet.dll" Alias "InternetReadFile" (ByVal hfile As Long, ByRef bytearray_firstelement As Byte, ByVal lNumBytesToRead As Long, ByRef lNumberOfBytesRead As Long) As Integer
Private Declare Function InternetOpenUrl Lib "wininet.dll" Alias "InternetOpenUrlA" (ByVal hInternetSession As Long, ByVal sUrl As String, ByVal sHeaders As String, ByVal lHeadersLength As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long
Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer
 
Sub DownloadBinaryFile(sUrl As String, filePath As String, Optional overWriteFile As Boolean)
  Dim hInternet, hSession, lngDataReturned As Long, sBuffer() As Byte, totalRead As Long
  Const bufSize = 128
  ReDim sBuffer(bufSize)
  hSession = InternetOpen("", 0, vbNullString, vbNullString, 0)
  If hSession Then hInternet = InternetOpenUrl(hSession, sUrl, vbNullString, 0, INTERNET_FLAG_NO_CACHE_WRITE, 0)
  Set oStream = CreateObject("ADODB.Stream")
  oStream.Open
  oStream.Type = 1
 
  If hInternet Then
    iReadFileResult = InternetReadBinaryFile(hInternet, sBuffer(0), UBound(sBuffer) - LBound(sBuffer), lngDataReturned)
    ReDim Preserve sBuffer(lngDataReturned - 1)
    oStream.Write sBuffer
    ReDim sBuffer(bufSize)
    totalRead = totalRead + lngDataReturned
    Application.StatusBar = "Downloading file. " & CLng(totalRead / 1024) & " KB downloaded"
    DoEvents
 
    Do While lngDataReturned <> 0
      iReadFileResult = InternetReadBinaryFile(hInternet, sBuffer(0), UBound(sBuffer) - LBound(sBuffer), lngDataReturned)
      If lngDataReturned = 0 Then Exit Do
 
      ReDim Preserve sBuffer(lngDataReturned - 1)
      oStream.Write sBuffer
      ReDim sBuffer(bufSize)
      totalRead = totalRead + lngDataReturned
      Application.StatusBar = "Downloading file. " & CLng(totalRead / 1024) & " KB downloaded"
      DoEvents
    Loop
 
    Application.StatusBar = "Download complete"
    oStream.SaveToFile filePath, IIf(overWriteFile, 2, 1)
    oStream.Close
  End If
  Call InternetCloseHandle(hInternet)
End Sub

' Вызов

Sub Test()
    Dim imgURL As String
    imgURL = "https://upload.wikimedia.org/wikipedia/en/thumb/8/80/Wikipedia-logo-v2.svg/1122px-Wikipedia-logo-v2.svg.png"
    DownloadBinaryFile imgURL, ActiveWorkbook.Path & "\logo.png", True

End Sub
...
Рейтинг: 0 / 0
Excel и up/download файлов
    #39341468
RegisteredUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги!
неожиданное продолжение темы.

Если есть прямая ссылка на файл
типа
Код: vbnet
1.
    imgURL = "https://upload.wikimedia.org/wikipedia/en/thumb/8/80/Wikipedia-logo-v2.svg/1122px-Wikipedia-logo-v2.svg.png"



то всё работает хорошо
Код: vbnet
1.
    DownloadBinaryFile imgURL, ActiveWorkbook.Path & "\logo.png", True



файл сохраняется и открывается в Excel без проблем.

НО мы решили усложнить и засекьюрить веб сервис.
Теперь веб сервис передает массив байтов.

Этот код все получает и сохраняет, НО файл не открывается в Excel.
Размер полученного файла больше чем исходника.

Кто знает как эту фигню побороть?
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel и up/download файлов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]