Макросы для excel яндекс

Программа поиска названий и изображений товара по артикулу

Программа предназначена для вывода описания и изображений найденных в yandex.ru по заданному артиклю

На первом этапе работы макроса, производится поиск артикула, либо другого ключевого слова, в поисковой системе yandex.ru

(процесс поиска скрыт от пользователя, скриншот результатов поиска) 

Полученные результаты поиска выводятся в виде списка на форме.

Пользователь из этого списка выбирает наиболее подходящий для себя вариант описания товара, после чего выбранный вариант вставляется в таблицу:

Список выбора загруженных описаний

На втором этапе работы макроса, производится поиск картинок по введенному артикулу (либо другому ключевому слову) в images.yandex.ru
(процесс поиска картинок скрыт от пользователя, скриншот результатов поиска) 

Результат загружается на форму. После того как пользователь кликнет по понравившемуся изображению, оно вставляется в таблицу:
(щелкните на картинке для увеличения)

Внешний вид формы с загруженными изображениями

На листе настроек задаются размеры вставляемой картинки за счет регулирования высоты и ширины ячеек,
а также количество отображаемых на форме изображений: 

Лист настроек программы

Автор макроса: Кульмашев Антон (Watcher_1)

В этой статье я рассказываю (и показываю на видео), как с помощью макроса Excel нормализовать базу телефонных номеров и загрузить сегмент в Яндекс.Аудитории за 84 секунды.

Скачать макрос для загрузки e-mail адресов в Яндекс.Аудитории

Давайте представим ситуацию. У вашего заказчика есть база клиентов. От вас он узнал, что в Яндекс.Директ есть инструмент, который позволяет показывать данной аудитории рекламу с уникальным предложением. Вы приняли решение ее запустить.

Заказчик предоставил вам файл, в котором все номера имели разный формат: где-то с +7, где-то с пробелами, два телефона в строке, дополнительные символы в виде ?, ; и т.д., а к некоторым даже были текстовые подписи (имена, комментарий).

Загрузка данных CRM (телефонов) в Яндекс.Аудитории за 60 секунд

Пример неотформатированной базы клиента

База насчитывает 10 000+ телефонных номеров. И для того, чтобы запустить ретаргетинг по файлу, нужно сначала создать сегмент, а перед этим очистить список от лишних символов, поскольку Яндекс имеет четкие требования по загружаемым файлам в Яндекс.Аудитории.

Что же делать в таком случае? Использовать Excel? Находить, заменять, удалять? Как вариант. Но есть более простое решение, которое позволяет нормализовать базу телефонных номеров для последующей загрузки в 2 клика. И это макрос Excel.

Загрузка данных CRM (телефонов) в Яндекс.Аудитории за 60 секундЗагрузка данных CRM (телефонов) в Яндекс.Аудитории за 60 секунд

Макрос Excel

Принцип работы макроса очень простой – вы загружаете в него список телефонов из блокнота (формат .txt), а далее он все сделает за вас.

Что он умеет?

  1. удаляет дубли;
  2. удаляет все лишние символы, включая текст и специальные символы (%, $, -, !, ?, #, >, <, /, _ и т.д.);
  3. если в одной строчке написано несколько телефонных номеров, то он автоматически отделяет их и переносит в один столбец;
  4. нормализует запросы согласно стандарту 7XXXXXXXXXX ;
  5. ячейки номеров, которые отличаются от стандарта, помечаются красным цветом (в дальнейшем очень легко отфильтровать, изменить или удалить такие телефоны);
  6. для городских телефонов в дополнительном поле можно указать код и задать диапазон (например, меньше 8 цифр, но больше 5);
  7. удаляет данные загруженного файла (кнопка Очистить лист).

Загрузка данных CRM (телефонов) в Яндекс.Аудитории за 60 секундЗагрузка данных CRM (телефонов) в Яндекс.Аудитории за 60 секунд

Красным подсвечиваются номера, которые отличаются от стандарта по длине

Данный способ применим не только для загрузки Яндекс.Аудиторий. Собственные списки можно загружать в Google Ads (не всем, читайте этот материал) и в инструменты таргетированной рекламы (Facebook, myTarget, ВКонтакте).

Макрос не нужно настраивать. Все, что необходимо сделать:

  1. разрешить редактирование;
  2. перед началом работы включить содержимое макроса.

Давайте на примере загрузим базу номеров телефонов, состоящую из 5000+ контактов, в Яндекс.Аудитории. Как думаете, сделаю я это быстрее 90 секунд?

Магия? Теперь это доступно и вам! Просто скачайте макрос и сэкономьте себе время!


Краткое описание

Новая версия макроса для Excel (VBA) для быстрого и удобного получения гео-координат/адресов из Yandex и Google. В качестве исходных данных на листе указывается список адресов (для получения координат) или список координат (для обратного геокодирования). Результаты запроса будут выведены в соседние ячейки.

Подробное описание

Некоторое время назад на сайте был опубликован макрос для получения координат из Yandex.
Несмотря на небольшой размер своего кода, макрос в удобном режиме позволяет по заданному списку адресов получать их geo-координаты (широту и долготу).

В текущей статье публикуем новый (доработанный) макрос для работы с координатами и адресами.

Изменения в новом макросе:

  1. Макрос может работать с API Яндекса и Гугла.
    Для работы с сервисом Яндекса используйте лист «yandex», для работы с Гуглом — лист «google». Предыдущая версия работала только с Яндекс.
  2. Из кода макроса исключен параметр KEY.
    Это значит, что теперь не нужно получать ключ разработчика для корректной работы макроса. Теперь всё работает без KEY. Разумеется, общие ограничения сервисов по прежнему имеют место — это около 25 000 запросов в сутки с одного IP. При необходимости узнать более подробно о действующих ограничениях, следуйте по ссылкам: лимиты для яндекса, лимиты для гугл.
  3. Добавлена возможность обратного геокодирования (определение адреса по долготе и широте).
    Для работы с обратным геокодированием необходимо соблюдать несколько важных нюансов, касающихся формата записи строки с координатами:
         — для Yandex координаты необходимо указывать в формате (через запятую, без пробелов): долгота,широта
         — для Google координаты необходимо указывать в формате (через запятую, без пробелов): широта,долгота
    В приложенном файле с макросом на соответствующих листах есть примеры как для Yandex, так и для Google.
  4. Добавлена статистика по количеству обработанных строк.
    Статистика начинает отображаться после запуска макроса. Наблюдать статистику можно в строке статус бара Excel.
  5. Типы переменных для работы с XML переименованы в Object.
    В предыдущей версии макроса типы были строго заданы как MSXML2.DOMDocument и MSXML2.IXMLDOMNodeList. Как следствие, возникали ошибки в процессе работы, если на ПК пользователя не было соответствующих библиотек «Microsoft XML».

Помимо указанных изменений, новый макрос содержит ряд других улучшений кода, в той или иной степени влияющих на корректность результата. По опыту, при тестировании макроса сервис Yandex показал более точный результат определения координат. Google, в свою очередь, показал более высокую скорость работы.

Также не забывайте, что оба сервиса хоть и служат одной и той же цели, но результат, полученный в каждом из них, немного отличается. Отличие не большое, но оно есть и, возможно, его стоит учесть. Поэтому, если этот момент вам принципиально важен, обязательно вручную проверьте результат в разных поисковых системах.

Важно!


Для работы с макросом предварительно необходимо получить API-ключ для Yandex/Google. Видео с инструкцией, как подключить нужный API Yandex, можно посмотреть по ссылке.
Соответствующее значения API-ключа указывается на листе «Настройки».
В целом, для Yandex принципиально ничего не изменилось, а вот у Google с августа 2018 г. действуют новые условия получения API (необходимо регистрировать аккаунт Google Cloud Platform и привязывать к нему свою б/карту; после данных настроек суточный бесплатный лимит по-прежнему работает).

В случае неработоспособности данного макроса, перед написанием комментария и/или отправки писем на мой адрес обязательно ознакомьтесь со списком основных проблем и способами их решения.



Скачать (Сохранить) файл с Яндекс-диска макросом Excel

Pelena

Дата: Понедельник, 05.12.2016, 22:18 |
Сообщение № 1

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Приветствую всех!
Друзья, помогите советом, как можно (и можно ли вообще) обратиться к папке, созданной на Яндекс-диске, из макроса книги Excel? Есть ли возможность как-то прописать путь к такой папке, скачать из неё файлы, а потом после обработки сохранить в ту же папку под другим именем?

Подробнее: есть проект, в котором открывается шаблон Excel (.xlt), соответственно, создаётся новая книга, в ней заполняются данные, отрабатывают разные макросы, в том числе, создаются документы Word на основе опять-таки шаблонов (.dot) и сохраняются в отдельную папку. Проект рабочий, но у клиента возникла идея хранить шаблоны и сформированные документы на Яндекс-диске.
Хотелось бы услышать ваше мнение об этой идее, насколько она вообще реализуема?
Пришла к выводу, что непосредственно запускать шаблоны с Яндекса не получится. То есть надо скачивать куда-то во временную папку. Но как??!!
[p.s.]Если нужны файлы, могу сочинить примеры[/p.s.]


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

Саня

Дата: Понедельник, 05.12.2016, 23:37 |
Сообщение № 2

Группа: Друзья

Ранг: Ветеран

Сообщений: 1067


Репутация:

560

±

Замечаний:
0% ±


XL 2016

 

Ответить

doober

Дата: Понедельник, 05.12.2016, 23:48 |
Сообщение № 3

Группа: Друзья

Ранг: Ветеран

Сообщений: 913


Репутация:

317

±

Замечаний:
0% ±


Excel 2010

Здравствуйте Елена.

Элементарно Ватсон.
так получаем ссылку на файл для закачки.С обратной операцией дела не имел.
[vba]

Код

Function GetyanURU() As String
    Dim RRz As String
    GetyanURU = «»
    UU = «https://yadi.sk/i/W-RyKT4o32K3PG»
    UU = Replace(UU, «/», «%2F»)
    UU = Replace(UU, «:», «%3A»)
    url = «https://cloud-api.yandex.net/v1/disk/public/resources/download?public_key=» & UU
    On Error Resume Next
    Set oXMLHTTP = CreateObject(«MSXML2.XMLHTTP»)
    With oXMLHTTP
        .Open «GET», url, False
        .send
        sHTML = .responseText
        Set RegExp = CreateObject(«VBScript.RegExp»)
        RegExp.Pattern = Chr(34) & «(https(.+?))» & Chr(34)

        Set oMatches = RegExp.Execute(sHTML)
        If oMatches.Count > 0 Then
            GetyanURU = oMatches(0).subMatches(0)
        End If
    End With
    Set oXMLHTTP = Nothing
End Function

[/vba]


 

Ответить

Pelena

Дата: Вторник, 06.12.2016, 00:03 |
Сообщение № 4

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Саня, Сергей, спасибо за ответы. Испробую оба варианта yes


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

krosav4ig

Дата: Вторник, 06.12.2016, 02:10 |
Сообщение № 5

Группа: Друзья

Ранг: Старожил

Сообщений: 2346


Репутация:

989

±

Замечаний:
0% ±


Excel 2007,2010,2013

Здравствуйте.
можно подключить ЯДиск как сетевой диск
windows
Mac OS


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

 

Ответить

Pelena

Дата: Вторник, 06.12.2016, 09:34 |
Сообщение № 6

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Андрей, спасибо за ответ. Была мысль о сетевом диске, но не сообразила, как обратиться к Яндексу. Следуя инструкциям по ссылке, сетевой диск создала. Но почему-то не удаётся использовать путь Z: в макросе, вернее, не всегда удаётся, буду ещё экспериментировать.

Саня, твой вариант тоже попробовала, установила программу, в общем понравилось, путь прописывается в макросе, как обычно, всё запускается, создаётся, сохраняется, причём достаточно быстро. И папку можно сделать общедоступной при необходимости. Спасибо!

Сергей, с помощью Вашего макроса у меня получилось закачать файл с Яндекс-диска, спасибо! Не знаю только вот, как отправить созданные документы обратно :(

Сегодня пообщаюсь с клиентом, обрисую ситуацию, пусть решает, может ещё передумает)
Ещё раз всем большое спасибо!


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

_Boroda_

Дата: Вторник, 06.12.2016, 09:56 |
Сообщение № 7

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

Но почему-то не удаётся использовать путь Z:

У меня на работе иногда тоже не ловится прямая ссылка на z (у меня он не z, а f) — f:Дальше_какой-то_путь
А вот так всегда работает —
вставить гиперссылкой путь f:Дальше_какой-то_путь, пройти по этой ГС — откроется Проводник и в нем уже в пути (наверху который пишется) вместо f пишется нормальное название этого диска. Вот его и копируем


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

Pelena

Дата: Вторник, 06.12.2016, 10:41 |
Сообщение № 8

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Спасибо, Саш.
Но всё равно не получается создать документ на основе шаблона из вложенной папки templates. Хотя путь вроде видит, создаёт по нему папку, сохраняет в ней файл. Видимо, это уже дело не в пути, а в чём-то другом. Будем искать)


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

Alex_ST

Дата: Среда, 07.12.2016, 09:28 |
Сообщение № 9

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

Замечаний:
0% ±


2003

Ребята, может быть я что-то в ТЗ не понял, но почему нельзя использовать синхронизацию ЯД с локальной директорией на своём компе?
А нужную папку на ЯД расшарьте для конкретных пользователей.
И работайте спокойно с файлами на своём компе. Создавайте/удаляйте файлы, папки… Всё, что Вы сделаете у себя, отзеркалится на ЯД.
В чём проблема-то? Зачем брать файл с ЯД, когда можно юзать его локальную копию?



С уважением,
Алексей
MS Excel 2003 — the best!!!

 

Ответить

Pelena

Дата: Среда, 07.12.2016, 09:32 |
Сообщение № 10

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Собственно, Саня во втором посте это и предложил


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

Alex_ST

Дата: Среда, 07.12.2016, 09:48 |
Сообщение № 11

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

Замечаний:
0% ±


2003

И, к стати, юзая одновременно на работе и дома Гугл.Диск (на Я.Д Мэйл.Диск и Дропбокс с работы не пускают собаки-сисадмины), я часто использую очень удобную штуку — Link Shell Extension
Это расширение позволяет создавать в Форточках симлинки, аналогичные Линуксово-Андроидным.
Для тех файлов, с которыми мне удобно работать на компе в одной директории, а реально они разбросаны по многим папкам, включая и сетевые, я просто создаю симлинки и кладу их все в одну папочку.
Комп будет думать, что работает с файлами, лежащими в этой папке, а физически они могут быть разбросаны где угодно.
Я через симлинки даже пытался зеркалить файлы с ГД на МД через домашний комп. Результат, к сожалению, не стабильный — некоторые файлы зеркалятся в Облако, а некоторые нет (М.Д почему-то сильно озадачивается, пытаясь скопировать к себе в Облако файл с моего компа по некоторым симлинкам, а некоторые глотает спокойно)



С уважением,
Алексей
MS Excel 2003 — the best!!!

 

Ответить

Alex_ST

Дата: Среда, 07.12.2016, 09:51 |
Сообщение № 12

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

Замечаний:
0% ±


2003

Собственно, Саня во втором посте это и предложил

Каюсь, не внимательно читал, по Саниной ссылке не пошёл… :(



С уважением,
Алексей
MS Excel 2003 — the best!!!

 

Ответить

krosav4ig

Дата: Среда, 07.12.2016, 13:46 |
Сообщение № 13

Группа: Друзья

Ранг: Старожил

Сообщений: 2346


Репутация:

989

±

Замечаний:
0% ±


Excel 2007,2010,2013

Нарисовал функции для скачивания/выгрузки на ЯДиск
скачивание проходит нормально, а вот с выгрузкой чего-то не так. В корень вообще не загружает, в папки грузит мягко говоря, через раз, может чего лишнего понаписал или не те объекты использовал
[vba]

Код

Private Const Login$ = «Логин», Pwd$ = «Пароль»
Private Const Host$ = «https://webdav.yandex.ru:443/»
Public Function DownloadFile(RemoteFilePath$, SaveTo$)
    Dim FileContents() As Byte, LocalFilePath$
    SaveTo = IIf(Right(SaveTo, 1) = «», SaveTo, SaveTo & «»)
    With CreateObject(«MSXML2.XMLHTTP»)
        .Open «get», urlencode(Host & RemoteFilePath), False, Login, Pwd
        .setrequestheader «Host», «webdav.yandex.ru»
        .setrequestheader «Accept», «*/*»
        .setrequestheader «Authorization», «Basic » & Token
        .send
        FileContents = .responseBody
    End With
    LocalFilePath = SaveTo & StrReverse(Split(StrReverse(RemoteFilePath), «/»)(0))
    If Dir(LocalFilePath) <> «» Then Kill LocalFilePath
    Open LocalFilePath For Binary Access Write As #1
    Put #1, 1, FileContents
    Close #1
    DownloadFile = LocalFilePath
End Function
Public Sub UploadFile(LocalFilePath$, RemotePath$)
    Dim FileContents As Variant, FileName$
    FileName = StrReverse(Split(StrReverse(LocalFilePath), «»)(0))
    RemotePath = IIf(RemotePath <> «», RemotePath & «/», «»)
    With CreateObject(«ADODB.Stream»)
        .Type = 1: .Open: .LoadFromFile LocalFilePath: FileContents = .Read: .Close
    End With
    With CreateObject(«MSXML2.XMLHTTP»)
        .Open «put», urlencode(Host & RemotePath & FileName), False, Login, Pwd
        .setrequestheader «Host», «webdav.yandex.ru»
        .setrequestheader «Accept», «*/*»
        .setrequestheader «Transfer-Encoding», «chunked»
        .setrequestheader «Etag», MD5(FileContents)
        .setrequestheader «Sha256», Sha256(FileContents)
        .setrequestheader «Expect», «100-continue»
        .setrequestheader «Content-Type», «application/binary»
        .setrequestheader «Authorization», «Basic » & Token
        .setrequestheader «Content-Length», UBound(FileContents) + 1
        .send FileContents
    End With
End Sub
Private Function Str2Byte(str$) As Byte()
    Str2Byte = StrConv(str, vbFromUnicode)
End Function
Private Function urlencode$(url$)
    With CreateObject(«scriptcontrol»)
        .Language = «JavaScript»
        urlencode = .eval(«encodeURI(‘» & url & «‘)»)
    End With
End Function
Private Function MD5(ByVal bytes) As String
    Dim sTmp$, i%, byteArr() As Byte
    byteArr = bytes
    With CreateObject(«System.Security.Cryptography.MD5CryptoServiceProvider»)
        byteArr = .ComputeHash_2(byteArr)
    End With
    For i = 0 To UBound(byteArr)
        sTmp = sTmp & LCase(Right(«0» & Hex(byteArr(i)), 2))
    Next
    MD5 = sTmp
End Function
Private Function Sha256(ByVal bytes) As String
    Dim sTmp$, i%, byteArr() As Byte
    byteArr = bytes
    With CreateObject(«System.Security.Cryptography.SHA256Managed»)
        byteArr = .ComputeHash_2(byteArr)
    End With
    For i = 0 To UBound(byteArr)
        sTmp = sTmp & LCase(Right(«0» & Hex(byteArr(i)), 2))
    Next
    Sha256 = sTmp
End Function
Private Function Token()
    With CreateObject(«MSXML2.DOMDocument»).createElement(«b64»)
        .DataType = «bin.base64»
        .nodeTypedValue = Str2Byte(Login): Token = .Text & «:»
        .nodeTypedValue = Str2Byte(Pwd): Token = Token & .Text
    End With
End Function

Sub test()
    ‘открываем файл из папки 111 в ЯДиске
    Workbooks.Open DownloadFile(«123/1.xlsm», «D:»)
    ‘открываем файл из корня ЯДиска
    Workbooks.Open DownloadFile(«123.xlsx», Environ(«tmp»))
    ‘выгружаем файл в папку 123 в ЯДиске
    UploadFile «D:.xlsm», «123»
    ‘выгружаем файл в корень в ЯДиска    не грузит
    UploadFile «D:.xlsm», «»
End Sub

[/vba]


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

Сообщение отредактировал krosav4igСреда, 07.12.2016, 13:47

 

Ответить

Pelena

Дата: Среда, 07.12.2016, 14:00 |
Сообщение № 14

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Андрей, спасибо. Протестирую ближе к вечеру


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

Pelena

Дата: Среда, 07.12.2016, 22:02 |
Сообщение № 15

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Как же всё сложно :'(
Моих способностей хватило только скопировать этот код и запустить.
Скачать и открыть получается, а при сохранении ошибка загрузки указанного контента на строке
[vba][/vba]
:(
Думаю всё-таки остановиться на варианте с синхронизацией папок


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

Alex_ST

Дата: Среда, 07.12.2016, 22:21 |
Сообщение № 16

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

Замечаний:
0% ±


2003

Или попробовать по WEBDAV подключить как советовал krosav4ig

можно подключить ЯДиск как сетевой диск windows

Хотя далеко не факт, что получится.
Я где-то с год-полтора назад в последний раз пробовал — не вышло. Потом погуглил и нашёл кучу ругани юзеров, что в бесплатных Облаках их владельцы объявляют возможность коннекта по WEBDAV , а реально это нигде не работает, т.к. тогда они потеряют на рекламе.
Но попытка не пытка. Удачи!



С уважением,
Алексей
MS Excel 2003 — the best!!!

 

Ответить

krosav4ig

Дата: Четверг, 08.12.2016, 01:10 |
Сообщение № 17

Группа: Друзья

Ранг: Старожил

Сообщений: 2346


Репутация:

989

±

Замечаний:
0% ±


Excel 2007,2010,2013

ошибка загрузки указанного контента

печалько :(
кстати, можно прямо в VBA подключать нужную папку ЯДиска
[vba]

Код

CreateObject(«WScript.Network»).MapNetworkDrive «W:», «https://webdav.yandex.ru:443/Документы/Клиент/Templates», False, «Login», «Password»

[/vba]


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

 

Ответить

krosav4ig

Дата: Пятница, 09.12.2016, 09:55 |
Сообщение № 18

Группа: Друзья

Ранг: Старожил

Сообщений: 2346


Репутация:

989

±

Замечаний:
0% ±


Excel 2007,2010,2013

Исправил свой код, так должно работать
[vba]

Код

Private Const Login$ = «Логин», Pwd$ = «Пароль»
Private Const Host$ = «https://webdav.yandex.ru:443/»
Public Function DownloadFile(RemoteFilePath$, SaveTo)
    Dim FileContents() As Byte, LocalFilePath$
    SaveTo = IIf(Right(SaveTo, 1) = «», SaveTo, SaveTo & «»)
    With CreateObject(«WinHttp.WinHttpRequest.5.1»)
        .Open «GET», urlencode(Host & RemoteFilePath$), True
        .SetRequestHeader «Host», «webdav.yandex.ru»
        .SetRequestHeader «Accept», «*/*»
        .SetRequestHeader «Authorization», «Basic » & Token
        .send
        .WaitForResponse
        FileContents = .responseBody
    End With
    LocalFilePath = SaveTo & StrReverse(Split(StrReverse(RemoteFilePath), «/»)(0))
    If Dir(LocalFilePath) <> «» Then Kill LocalFilePath
    Open LocalFilePath For Binary Access Write As #1
    Put #1, 1, FileContents
    Close #1
    DownloadFile = LocalFilePath
End Function
Public Sub UploadFile(LocalFilePath$, RemotePath$)
    Dim FileContents As Variant, FileName$
    FileName = StrReverse(Split(StrReverse(LocalFilePath), «»)(0))
    RemotePath = IIf(RemotePath <> «», RemotePath & «/», «»)
    With CreateObject(«ADODB.Stream»)
        .Type = 1: .Open: .LoadFromFile LocalFilePath: FileContents = .Read: .Close
    End With
    With CreateObject(«WinHttp.WinHttpRequest.5.1»)
        .Open «PUT», urlencode(Host & RemotePath & FileName), False
        .SetRequestHeader «Host», «webdav.yandex.ru»
        .SetRequestHeader «Accept», «*/*»
        .SetRequestHeader «Etag», MD5(FileContents)
        .SetRequestHeader «Sha256», Sha256(FileContents)
        .SetRequestHeader «Expect», «100-continue»
        .SetRequestHeader «Content-Type», «application/binary»
        .SetRequestHeader «Authorization», «Basic » & Token
        .SetRequestHeader «Content-Length», UBound(FileContents) + 1
        .send FileContents
        .WaitForResponse
        Debug.Print «Файл «; IIf(.StatusText = «Created», «успешно загружен», «не загружен»)
    End With
End Sub
Private Function Str2Byte(str$) As Byte()
    Str2Byte = StrConv(str, vbFromUnicode)
End Function
Private Function urlencode$(url$)
    With CreateObject(«scriptcontrol»)
        .Language = «JavaScript»
        urlencode = .eval(«encodeURI(‘» & url & «‘)»)
    End With
End Function
Private Function MD5(ByVal bytes) As String
    Dim sTmp$, i%, byteArr() As Byte
    byteArr = bytes
    With CreateObject(«System.Security.Cryptography.MD5CryptoServiceProvider»)
        byteArr = .ComputeHash_2(byteArr)
    End With
    For i = 0 To UBound(byteArr)
        sTmp = sTmp & LCase(Right(«0» & Hex(byteArr(i)), 2))
    Next
    MD5 = sTmp
End Function
Private Function Sha256(ByVal bytes) As String
    Dim sTmp$, i%, byteArr() As Byte
    byteArr = bytes
    With CreateObject(«System.Security.Cryptography.SHA256Managed»)
        byteArr = .ComputeHash_2(byteArr)
    End With
    For i = 0 To UBound(byteArr)
        sTmp = sTmp & LCase(Right(«0» & Hex(byteArr(i)), 2))
    Next
    Sha256 = sTmp
End Function
Private Function Token()
    With CreateObject(«MSXML2.DOMDocument»).createElement(«b64»)
        .DataType = «bin.base64»
        .nodeTypedValue = Str2Byte(Login & «:» & Pwd): Token = .Text
    End With
End Function

[/vba]


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

Сообщение отредактировал krosav4igПятница, 09.12.2016, 14:00

 

Ответить

Pelena

Дата: Пятница, 09.12.2016, 11:08 |
Сообщение № 19

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Андрей, браво!!! Ты всё-таки это сделал!
Вот на этой строчке споткнулся
[vba]

Код

Dim dd As WinHttpRequest

[/vba]
убрала, заработало. Вроде, лишняя (?)

Может, оформить Готовым решением?


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

krosav4ig

Дата: Пятница, 09.12.2016, 11:48 |
Сообщение № 20

Группа: Друзья

Ранг: Старожил

Сообщений: 2346


Репутация:

989

±

Замечаний:
0% ±


Excel 2007,2010,2013

Вроде, лишняя
ага, как-то сама затесалась #этнияоносамо :)

Может, оформить Готовым решением?

может быть, но, чтобы решение было прям совсем готовое, нужно (имхо) его дополнить проверками на ошибки и хоть немного откомментировать, а на это у мну сейчас времени немного не хватает :(


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

 

Ответить

Понравилась статья? Поделить с друзьями:
  • Макросы для excel штрих код
  • Макросы для excel в open
  • Макросы в excel сцепить ячейки в excel
  • Макросы для excel pdf
  • Макросы в excel сумма прописью скачать бесплатно