КАК загрузить(сохранить) картинки из документа EXCEL или WORD (MS OFFICE.)

Опубликовал Юрий Тимофеев (Tatitutu) в раздел Обмен - Загрузка и выгрузка в Excel

Все чаще и чаще - вижу на форумах вопрос, а как загрузить(или сохранить) КАРТИНКУ из документа EXCEL или WORD
Стоит задача -вытащить картинки из прайс-листа.
Вроде все просто, а попробуйте сами.
Как это сделать знаете ?

Видел написанные макросы для выгрузки на много много строк.

Видел внешние обработки и на 7.7 и на 8.* который загружают документ и потом долго анализируют, что же они загрузили...

Дело в том , что даже открыв документ (например EXCEL) и кликнув на картинку - Вы ее не сможете сохранить, а НАДО и что делать ?

А вот Вы знаете как это сделать ? Подумайте, все гениально - просто

 на мой взляд самый ПРОСТОЙ и самый БЫСТРЫЙ способ ... (не требующих особых навыков)

//Хотел сразу же сдесь ответ написать, нет не буду - напрягите свои извилины и предложите свой вариант

//Мой Ответ в прикрепленном файле : пароль - инфостарт

 

ОТВЕТ ДЛЯ ТЕХ КТО НЕ ЖЕЛАЕТ ДУМАТЬ:

Чтобы выгрузить картинки из EXCEL книги нужно ее сохранить как WEB страницу.
Файл-Сохранить как - Веб страница (*.htm,*.html)
и тогда по пути где находится наш файл будет создана папка
ИМЯНАШЕГОФАЙЛА.files открываем ее и видим все нужные нам картинки.

Все гениальное - просто.
Понравилось решение данного вопроса ?

Скачать файлы

Наименование Файл Версия Размер
Решение быстрое и простое (пароль -инфостарт)
.rar 0,47Kb
19.02.12
284
.rar 0,47Kb 284 Скачать

См. также

Добавить вознаграждение
Комментарии
1. Юрий Тимофеев (Tatitutu) 3557 22.04.10 09:42 Сейчас в теме
Думаю кому нибудь , когда нибудь пригодится и сохранит пару минут, часов...а может и седых волос.
2. Ёпрст Биомать, а? Верните бесплатный доступ к файлам! (Ёпрст) 1010 22.04.10 09:55 Сейчас в теме
>>>Хотел сразу же здесь ответ написать, нет не буду
>>>Ответ в прикрепленном файле

Какое то противоречие..

ЗЫ: А нафига это всё ?
3. Валерий Агеев (awa) 2347 22.04.10 09:56 Сейчас в теме
Тупая накрутка количества скачиваний. Минус за форму подачи материала.
fierylions; SirYozha; +2 Ответить 1
4. Юрий Тимофеев (Tatitutu) 3557 22.04.10 10:09 Сейчас в теме
(2) ну не успела правильно страница отобразиться
хотел в виде конкурса оформить на лучшее решение вопроса
не успел...
(3) ...
Тупая накрутка количества скачиваний

Сказал бы я тебе... да тут Женщины есть.
файл выложил запореленный не для скачки -( это статья, а не программа )
для того чтобы потом доказать, что мой ответ уже лежал на сайте ,
а не потом я его придумал.
И увидеть интерес к данному вопросу (для статистики)

А так , сейчас такИе типа тебя будут писать - да это баян,яйца выеденного не стоит... (посмотрел твои статьи - без комментариев)
а я могу поспорить что многим этот совет пригодится и не все про этот способ знают.
....
Минус за форму подачи материала

Вот так - хотел новую струю внести - типа конкурса - НЕНУЖНО
пользователь ленивый , он не будет, он не ... а что мы их судим
тут ненужно быть программистом , нужно только знать как пользоваться инструментом.
А главное научить, показать и рассказать - а чтобы лучше запомнилось - заставить подумать.
annak2980; ChiginAV; Styvi; +3 1 Ответить 1
5. Ёпрст Биомать, а? Верните бесплатный доступ к файлам! (Ёпрст) 1010 22.04.10 10:24 Сейчас в теме
Гы.. ну вот тебе еще баян:
Всем известно, что word-документ есть компаунд достаточно посмотреть его любым компаунд-эксплорером..

Для 2007 офиса, еще проще - *.docx на *.zip (или просто открыть файло в архиваторе)
и распаковать - всё видно, при желании, изменить и запаковать обратно.
ЗЫ: таким способом, например, можно тупо снять любой пароль/защиту к книге..

Lemoi; zuza; Styvi; Tatitutu; +4 Ответить 1
6. Юрий Тимофеев (Tatitutu) 3557 22.04.10 10:33 Сейчас в теме
(5) )))) Уважаемый Ёпрст, то что Вы это знаете я нисколько не сомневался (и статейка эта не для Вашего уровня)
Это как ложка с дыркой - проверка на вшивость.
Вчера задал такой вопрос на собеседовании - у паренька судя по резюме три года опыта программирования на всем - вот он с задачей не справился.
"А вопрос стоял так вот тебе файл в нем 6 картинок - мне нужно их увидеть в 1С на форме"....Финиш, он мне через 2 часа начал доказывать, что в 1С такой функции нет и значит это НЕДОКУМЕНТИРОВАННАЯ возможность.

"На баяне сможет клавиши нажать каждый , а вот сыграть не нем - дано не каждому"
7. Валерий Агеев (awa) 2347 22.04.10 11:41 Сейчас в теме
(4) Сколько пафоса...
Убрал свой минус в связи со сделанными исправлениями в статье.
8. Алексей Роза (DoctorRoza) 22.04.10 15:42 Сейчас в теме
Плюсану за отстаивание своих интересов! ;) Подчерпнул для себя новую информацию! Благодарю! :)
Tatitutu; +1 Ответить
9. Иван (Spartan) 300 22.04.10 16:03 Сейчас в теме
(6) Это задание скорее на смекалку, а не на знание возможностей системы и встроенного языка. ;) Поэтому над претендентом ты явно прикололся... :D
CaSH_2004; +1 Ответить
10. Виталий (nafa) 624 22.04.10 17:31 Сейчас в теме
Файл, сохранить, веб-страница, пути какие-то... Это же сколько кнопок нажимать надо :( . Не мудрено перепутать.
Я лично в таких случаях делаю чисто по деревенски: в ворде - копировать, там, где картинка нужна - вставить.
А если монитор достатчно большой, чтобы можно было разместить рядом ворд и 1С то просто перетаскиваем мышкой из ворда на 1Совскую табаличку.... ;)
11. Юрий Тимофеев (Tatitutu) 3557 22.04.10 17:44 Сейчас в теме
(10)
Я лично в таких случаях делаю чисто по деревенски: в ворде - копировать, там, где картинка нужна - вставить.


Я уважаю твой выбор, если тебя так устраивает - то почему бы и нет.
можно и так, но долгоооооо очень , если в прайсе больше 100 картинок
будешь каждую копировать ?
А вставлять куда будешь ?
(ну нет там у рисунка в свойствах сохранить как...)
скопировать можно, а как в файл превратить :-)
12. Сергей Павлов (spbpavlov) 33 22.04.10 18:32 Сейчас в теме
(0)
Видел написанные макросы для выгрузки на много много строк.


не через html, макросом можно сохранить картинку ~5 строк кода, это много?
13. Виталий (nafa) 624 22.04.10 19:12 Сейчас в теме
(11) А мы что обсуждаем то? Как из экселя выдернуть картинку выдернуть
ну нет там у рисунка в свойствах сохранить как...

или как в 1С вставить?
Чтобы из экселя выдернуть, метод годится. Вставить можно в любую программу, поддерживающую вставку из клипбоарда, в т.ч. на табличный документ в 1С в 7.7. В 8ку надо подумать.
А если речь идет о вставке картинок с программной привязкой к номенклатуре, то - принципиальной разницы с макросом, читающим картинки прямо со страники нет - все равно программу писать надо по выборке файлов и записи их (или хотя бы их путей) в БД. Встроенной функции ПрочитатьМногоКартинокИСамостоятельноПривязатьИхКНоменклатур­е вроде даже в 8.2 нет.
14. Виталий (nafa) 624 22.04.10 19:25 Сейчас в теме
А вообще универсальный способ выдергивания рисунков - кнопочка PrtScr. Есть также специальные программы которые сами копируют определенную область экрана, выполняют прокрутку и так далее (полезно при работе со всякими замороченными форматами типа PDF)
15. script Мальчинко (script) 184 22.04.10 19:31 Сейчас в теме
А мне понравилось! Поставлю +
Хотя думаю если бы задача такая возникла то я до этого допер бы.
Tatitutu; +1 Ответить
16. Юрий Тимофеев (Tatitutu) 3557 22.04.10 20:44 Сейчас в теме
(12) Мне про макросы не нужно рассказывать :D
Сможете за свои слова ответить
макрос в 5 строк - листинг выложить здесь ?
(не все знаю что такое макрос и как его написать)
(14) нет слов...в шапке написано
"на мой взляд самый ПРОСТОЙ и самый БЫСТРЫЙ способ ... (не требующих особых навыков)" я показал вариант ! а не доказал что это Единственный и неповторимый способ.
Чем больше способов мы знаем, тем мы универсальнее )))
17. Сергей Павлов (spbpavlov) 33 22.04.10 21:17 Сейчас в теме
(16)
пример можно найти в интернете.
я могу и здесь написать, но так не интересно будет. тем более что вам про макросы не нужно рассказывать :D можно на что нибудь поспорить, если не верите. ;)
18. Виталий (nafa) 624 22.04.10 21:37 Сейчас в теме
(16) Так все-таки "загрузить" или "сохранить"? Сие разные вещи. Сохранить таким способом действительно быстро и удобно. А вот если надо "загрузить" (я так понимаю, что в какое-то еще приложение, например в 1С), то уже надо смотреть, в какое приложение, все/выборочно и т.п. Причем если речь идет об автоматической привязке к номенклатуре, то пока картинки лежат на листе (т.е. считываются макросом), их положение относительно ячейки с названием товара опеределяется на мой взгляд попроще, чем положение картинки относительно текста в создаваемом ХТМЛ файле.
19. Алексей (ACE$) 102 22.04.10 22:38 Сейчас в теме
а я, почему-то, считал это само собой разумеющимся...
то же самое касается всего офисного пакета от МС
20. Юрий Тимофеев (Tatitutu) 3557 22.04.10 22:53 Сейчас в теме
(18)
их положение относительно ячейки с названием товаре опеределяется на мой взгляд попроще
- порадовало.
Проще не куда, если учесть то что картинка непривязывается к ячейке и хорошо если у нее есть правильное имя.
(17) найдите если не трудно, я готов поспорить с Вами
за каждый лишний символ проигравший платит - с Вас размер суммы и вперед
21. Виталий (nafa) 624 23.04.10 00:28 Сейчас в теме
(20)
картинка непривязывается к ячейке

В ХТМЛе может и не привязывается, а вот на листе очень даже привязывается. Свойства TopLeftCell - ячейка, в которой нходится верхний левый угол, BottomRightCell - правый нижний.
А вообще наверное кто к чему привык. Кто с VBA дружит - тому макросами удобнее, кто с ХТМЛ - соответственно из файла читать. Всяк кулик свое болото хвалит.
artec4; Tatitutu; +2 Ответить
22. Роман (srv7) 430 23.04.10 01:21 Сейчас в теме
(0) таким же образом автоматом генерятся письма в аутлуке и складываются в исходящие )) идея хороша
Tatitutu; +1 Ответить
23. Александр Рытов (Арчибальд) 2651 23.04.10 09:03 Сейчас в теме
Чем больше способов мы знаем, тем мы универсальнее )))

И этим все сказано 8-)
24. Виталий (nafa) 624 23.04.10 09:25 Сейчас в теме
Да, еще, когда длину необходимого кода обсуждаем, то надо тоже поаккуратнее с терминами. 5 операторов (команд?), т.е. того, что отделяется друг от друга символом ";", может и не хватит, а вот 5 строк (т.е. того, что отделяется друг от друга нажатием клавиши"Ентер") с учетом того, что в каждую строку можно помещать несколько операторов :) хватит вполне.
25. Юрий Тимофеев (Tatitutu) 3557 23.04.10 09:43 Сейчас в теме
(24) Заблудились ? Ветку попутали :)
26. Сергей Павлов (spbpavlov) 33 23.04.10 09:46 Сейчас в теме
(20)
за каждый лишний символ проигравший платит
не понял, что считать лишним символом?
(24) речь идет о 5 операторах, этого достаточно чтобы сохранить картинку. 7 - сохранит более красиво.
27. Юрий Тимофеев (Tatitutu) 3557 23.04.10 10:24 Сейчас в теме
(26) Условие задачи:
написать макрос - который "ведернет" ВСЕ доступные картинки из книги EXCEL и сохранит их на диске.

можно оценить по скорости, оригинальности, по правильности кода, универсальности...и.т.д.
я предложил - главное условие чтобы работало согласно условия. И у кого будет меньше
символов кода
Sub ВыдергиваемКартинки()
с...

по.
End Sub
тот и победил !
28. Виталий (nafa) 624 23.04.10 10:42 Сейчас в теме
(24) Нет, не перепутал
(26) (27) Просто сохранить, как правильно и написано в статье - это 1 оператор Save c указанием формата "HTML с картинками".
А сравнивать надо не сохранить, а полную обработку загрузки из Экселя в 1С - т.е. найти первый товар в прайсе, найти его в номенклатуре в 1С, если нет - создать, эту номенклатуру, найти соответствующую ей картинку и привязать к номенклатуре, перейти к следующему товару.
29. Сергей Павлов (spbpavlov) 33 23.04.10 10:58 Сейчас в теме
(27) если не через сохранение в html то ок, иначе это одна строка:
ActiveWorkbook.ActiveSheet.SaveAs "C:\Test.htm", xlHtml
и сохранить нужно например в jpeg
30. Виталий (nafa) 624 23.04.10 11:30 Сейчас в теме
А вообще метод классный. Очень удобен когда файлы, из которых надо импортировать данные, несистематизированы. Только не надо ничего никуда не сохранять. Делаем в 1С на форме поле ХТМЛ документа, включаем режим редактирования. В экселе - выделить все, копировать, в 1С - вставить. Все. Текст - доступен, все картиночки аккуратно сложены в LocalSettings\Temp, пути к картинкам в файле есть, левый верхний угол картинок к ячейкам подвязан.
Копировать, разумеется, можно не только из офиса, но и вообще из любого источника, поддерживающего ХТМЛ в буфере обмена (из почты, с веб-страницы и т.п.)
31. Александр Горлов (gavlexx) 36 23.04.10 16:08 Сейчас в теме
Идея заключается в том, что картинку из книги можно ее родными методами скопировать в буфер и вставить в диаграмму Excel. А уже диаграмма имеет метод для сохранения ее в виде графического файла на диске.

Приведенная функция получает в качестве аргумента полный путь к книге Excel со встроенной картинкой (имя листа с картинкой должно быть "Лист1") и возвращает объект 1С - Картинка.
Функция ИзвлечьКартинкуИзXLS(ФайлXLS)
	
	ИмяВременногоФайлаКартинки = КаталогВременныхФайлов() + "tempPict.gif";
	
	// для открытия документа
	Док = Новый COMОбъект("Excel.Application");
	Док.DisplayAlerts = False;
	
	// для промежуточного хранения картинки
	Excel = Новый COMОбъект("Excel.Application");
	Excel.DisplayAlerts = False; //Закрытие не должно вызывать диалога сохранения

	
	Состояние("Попытка установки COM-соединения...");
		
	Попытка
		Док.Workbooks.Open(ФайлXLS);
	Исключение
		Сообщить("Не удалось открыть файл!");
		Возврат Неопределено;
	КонецПопытки;
			
	//Извлечение картинки
	Если Док.Sheets("Лист1").Pictures.Count() > 0 Тогда
		
		//Ссылка на картинку
		Картинка = Док.Sheets("Лист1").Pictures(1);
		
		// промежуточная книга для хранения диаграммы - контейнера картинки
		Excel.Application.Workbooks.Add(1);
		ИмяЛистаXLS = Excel.ActiveSheet.Name;
		
		//Создание диаграммы, которая будет являться контейнером для картинки
		//Расположение новой диаграммы - как объект на созданном ранее новом листе, являющемся в данный момент активным
		//Размеры диаграммы слегка превышают размер картинки
		ДиаграммаXLS = Excel.ActiveSheet.ChartObjects().Add(0, 0, Картинка.Width * 1.01, Картинка.Height * 1.01);
		
		//Копирование картинки в буфер
		Картинка.Copy();
		
		//Заполняем диаграмму картинкой из буфера
		ДиаграммаXLS.Chart.Paste();
		
		//Сохраняем диаграмму во временном файле
		ДиаграммаXLS.Chart.Export(ИмяВременногоФайлаКартинки);
		
		ДиаграммаXLS = Неопределено;
		
		//Загружаем картинку из временного файла в объект Картинка
		КартинкаОбъект = Новый Картинка(ИмяВременногоФайлаКартинки);
		
		//Удаляем временный файл
		Попытка
			УдалитьФайлы(ИмяВременногоФайлаКартинки); 
		Исключение
		КонецПопытки;
			
	КонецЕсли;	
	
	//Док.Application.Quit();
	Док.Workbooks.Close();
		
	//Книгу, использовавшуюся для импорта картинок закрываем
	Попытка
		Excel.Application.Quit();
		Док.Application.Quit();
	Исключение
	КонецПопытки;
	
	Возврат КартинкаОбъект;
		
КонецФункции
...Показать Скрыть
merabn; smershussr; kn; harver; +4 Ответить
32. Александр Горлов (gavlexx) 36 23.04.10 16:11 Сейчас в теме
(27)
Интересно, как макросом можно сохранить картинку на диске? :o
У объекта Картинка Excel нет метода, позволяющего сохранить картинку на диск, только скопировать в буфер обмена...
33. Руслан Бабичев (Batchir) 126 24.04.10 08:53 Сейчас в теме
(30) :D nafa выиграл. Самый универсальный способ - простой КопиПаст, 0 строчек кода.
34. Аркадий Кучер (Abadonna) 3648 24.04.10 19:34 Сейчас в теме
35. Аркадий Кучер (Abadonna) 3648 25.04.10 15:51 Сейчас в теме
(32)
Интересно, как макросом можно сохранить картинку на диске?

Вот так, например:
Option Explicit
Private Declare Function OpenClipboard Lib "user32.dll" (ByVal hwnd As Long) As Long
Private Declare Function CloseClipboard Lib "user32.dll" () As Long
Public Declare Function EmptyClipboard Lib "user32" () As Long
Private Declare Function GetClipboardData Lib "user32.dll" (ByVal wFormat As Long) As Long
Private Declare Function CopyEnhMetaFile Lib "gdi32" Alias "CopyEnhMetaFileA" (ByVal hemfSrc As Long, ByVal lpszFile As String) As Long
Const CF_ENHMETAFILE As Long = 14


Sub GetPictures()
Dim PShape As Shape, hStrPtr As Long
    For Each PShape In ActiveSheet.Shapes
        If PShape.Type = msoPicture Then
            PShape.CopyPicture
            If Not CBool(OpenClipboard(0&)) Then
                MsgBox "Не удалось открыть буфер"
                GoTo NextSh
            End If
            hStrPtr = GetClipboardData(CF_ENHMETAFILE)
            If Not CBool(hStrPtr) Then
                MsgBox "Не удалось получить дескриптор"
                GoTo CloseClip
            End If
            If Not CBool(CopyEnhMetaFile(hStrPtr, "C:\TestPictures\" & "Picture " & hStrPtr & ".jpg")) Then
                MsgBox "Не удалось создать файл"
                GoTo CloseClip
        End If
CloseClip:
        CloseClipboard
NextSh:
        End If
    Next
    'очистка буфера обмена
    OpenClipboard (0&)
    EmptyClipboard
    CloseClipboard
    MsgBox "Картинки сохранены", 64, "Конец"
End Sub

...Показать Скрыть

P.S. Не мой пример, нагуглил
P.S.S Каталог C:\TestPictures\ сначала создайте на диске
36. Parazyte (Parazyte) 38 29.04.10 00:16 Сейчас в теме
Согласен, что если картинка одна в документе, то проще всего Копи -> MS Paint (или) любой др. графический редактор, а оттуда сохраняй в любой желаемый формат, попутно отредактировав изображение при необходимости.
37. Светлана Иванова (Cvetic) 304 04.05.10 13:19 Сейчас в теме
Tatitutu, спасибо, мне пригодилось :)
38. Eugeneer (Eugeneer) 17.05.11 21:42 Сейчас в теме
О раз такая пьянка, то позволю опубликовать здесь ссылочку как загрузить все полученные картинки в папке скопом в 1С
Загрузка файлов и картинок номенклатуры УТ10-УТ11
http://infostart.ru/public/80644/
Для УТ 10 и УТ11
40. Наталья Наталья (nataliagns) 19.06.16 18:37 Сейчас в теме
Добрый день! Спасибо за статью, отличный способ. Только вот.. Можно как-то сделать, чтобы изображениям присваивалось скажем имя из той же ячейки, где они стоят?