Страницы: 1
RSS
Как массово извлечь по гиперссылкам фотографии на лист?
 
Доброго времени суток! Подскажите, как массово извлечь из гиперссылки фотографии и добавить их в соседние ячейки? Такое возможно? Может есть другие варианты для упрощения работы.
У меня файл в нем 400 гиперссылок на фото, эти фотографии нужно загрузить рядом в соседнюю ячейку.
Благодарю!
Изменено: Ktrinka - 16.07.2018 23:25:45
 
Исправил. Ktrinka, внимательнее ))
 
Ktrinka, добрый день!
Массово никак, vba не поддерживает многопоточность.
Только циклом, каждую ссылку обрабатывать.
 
Цитата
Jungl написал:
Массово никак, vba не поддерживает многопоточность.
Есть некоторая разница между одновременно и массово. Многопоточность - это тоже сравнительная одновременность. Положим по мобилке люди говорят одновременно, но пакеты передаются попеременно, согласно выделенным для этого тайм слотам в канале связи.
По вопросам из тем форума, личку не читаю.
 
Цитата
Ktrinka написал:
как массово извлечь из гиперссылки фотографии
да кто его знает, не видя как эти гиперссылки выглядят. Что там в ячейках записано? Куда они ведут? На сайт, на локальный диск, еще куда-то?
В общем: пример таблицы с гиперссылками будет?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Ktrinka, и как вставить картинки - как ссылки или внедрить в книгу?
Учтите, что файл с сотнями картинок будет тормозить.
 
Цитата
vba не поддерживает многопоточность
неужели?
https://excelvba.ru/programmes/Parser/actions/LoadHTML_MultiThreading
вроде как чистый VBA использовал
 
Цитата
Игорь написал:
неужели?
Игорь, я все это уже видел давним-давно. Приведите мне пожалуйста кусок вашего кода ИМЕННО в VBA, а не грабли вида IE, VBScript, самописные DLL/COM и прочее. Причем, я не говорю о многопоточности конкретно для скачивания файлов.
Или же вы желаете поделиться с ТС вашей "многопоточностью" для массового извлечения фотографий по ссылкам?
Цитата
БМВ написал:
Есть некоторая разница между одновременно и массово. Многопоточность - это тоже сравнительная одновременность.
Еще раз, речь о VBA и его многопоточности, о чем я писал ранее.

Если у кого-то имеется желание подискутировать, прошу в личку.
 
Off
Цитата
Jungl написал:
прошу в личку.
а чего так?
Цитата
Jungl написал:
Еще раз, речь о VBA и его многопоточности
Еще раз, где у ТС вы встретили это загадочное слово? Вы что-то там себе придумали и написали, и на мой непросвещённый взгляд, совсем не в тему.
По вопросам из тем форума, личку не читаю.
 
Во вложении файл с макросом, который извлекает одну картинку из интернета и вставляет её на лист.
Если вы хотите 400 картинок, то прислушайтесь
Цитата
Казанский написал:
Учтите, что файл с сотнями картинок будет тормозить.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Код
файл с сотнями картинок будет тормозить

в большинстве случаев, не будет
особенно, если использовать сжатие картинок (уменьшая файлы картинок до отображаемого размера, перед вставкой на лист)
но для этого нужно много winApi кода (у меня на сайте есть этот код)
 
Цитата
Игорь написал:
использовать сжатие картинок (уменьшая файлы картинок до отображаемого размера, перед вставкой на лист)но для этого нужно много winApi кода
не обязательно. Делал загрузчик (+выгрузка) описание к номенклатурам в виде фото, срезать размер можно стандартным инструментом: вкладка "формат" - "сжать рисунки".
На VBAэто делал следующим образом - устанавливал размеры, и уменьшал размер картинки через Cut, что-то вроде:

Код
Selection.ShapeRange.LockAspectRatio = msoTrue 'сохранять пропорции
Selection.ShapeRange.Width = Ширина
Selection.ShapeRange.Height = Высота
...
Selection.Cut
ActiveSheet.PasteSpecial Format:="Рисунок (" & НужныйФормат & ")", Link:=False, DisplayAsIcon:=False

Игорь, интересная тема про многопоточность VBA, но в чистом виде нигде не видел решения (даже асинхронных функций на VBA нет), к сожалению. Если готовы поделится кусочком, было бы интересно.
Цитата
Jungl написал:
желание подискутировать, прошу в личку.
я бы с удовольствием послушал бы. Зачем личка? Возможно новая тема (чтобы здесь по существу отвечать)
Изменено: bedvit - 17.07.2018 23:49:18
«Бритва Оккама» или «Принцип Калашникова»?
 
bedvit, по многопоточности - всё просто
Вот есть компонент WinHTTPRequest, их можно наплодить несколько штук (создавая динамически) используя модули класса и события компонента WinHTTPRequest
Ключевая строка модуля класса: Public WithEvents HTTP As WinHttpRequest

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

количество потоков от сайта зависит
на быстрых сайтах и 200 потоков работает (если больше - Excel глючит), обычно использую 20-40 потоков
Изменено: Игорь - 18.07.2018 05:51:36
 
Игорь, немного появилось времени, посмотрел код (времени было мало, поэтому извиняюсь, если где не точен или вообще мимо).
Насколько я понял: потоки запускаются циклом в функции "ExecuteAll".
Запускается процедура ExecuteNext.
В этой процедуре создается объект HTTP_Request (класс)
В этом классе создается COM-объект - WinHttpRequest.
Далее парралельность достигается тем, что этот объект позволяет запускать асинхронные методы (даже свойство у него есть:WaitForResponse - Задает время ожидания в секундах для завершения асинхронного метода отправки с дополнительным значением тайм-аута).
Верно?
«Бритва Оккама» или «Принцип Калашникова»?
 
да, всё верно
по мере завершения загрузок, когда потоки освобождаются (число загрузок становится меньше заданного числа потоков),
автоматом отрабатывает ExecuteNext, запуская следующую загрузку
Изменено: Игорь - 24.07.2018 02:03:25
 
Игорь, все же, если быть буквоедом, это не чистая параллельность VBA. Это просто у вас прокачка настолько высока (знания, опыт), что вы с помощью VBA, используете ассинхронные вызовы методов объекта WinHttpRequest. Сам VBA делает это вполне последовательно и синхронно в цикле :) К примеру таким способом, не разделить по потокам числодробилку (делал как-то программулину на другом языке с вычислением всех натуральных делителей числа в 8 потоках-по числу логический ядер процессора) или параллельное/ассинхронное выполнение функций листа Excel. Могу ошибаться, но пока не соображу как это можно реализовать в VBA (хотя в принципе это возможно, но на другом языке). Материал действительно интересен. Спасибо вам за информацию. Интересная концепция.
Изменено: bedvit - 24.07.2018 21:07:04
«Бритва Оккама» или «Принцип Калашникова»?
 
Друзья не знаю где уже искать. Нужно с фото на листе вытащить гиперссылку (фото очень много))
Страницы: 1
Наверх