gifts2017

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

См. также

Подписаться Добавить вознаграждение

Комментарии

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

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

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

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

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

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

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

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

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


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


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

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

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

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

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

по.
End Sub
тот и победил !
28. Виталий (nafa) 23.04.10 10:42
(24) Нет, не перепутал
(26) (27) Просто сохранить, как правильно и написано в статье - это 1 оператор Save c указанием формата "HTML с картинками".
А сравнивать надо не сохранить, а полную обработку загрузки из Экселя в 1С - т.е. найти первый товар в прайсе, найти его в номенклатуре в 1С, если нет - создать, эту номенклатуру, найти соответствующую ей картинку и привязать к номенклатуре, перейти к следующему товару.
29. Сергей Павлов (spbpavlov) 23.04.10 10:58
(27) если не через сохранение в html то ок, иначе это одна строка:
ActiveWorkbook.ActiveSheet.SaveAs "C:\Test.htm", xlHtml
и сохранить нужно например в jpeg
30. Виталий (nafa) 23.04.10 11:30
А вообще метод классный. Очень удобен когда файлы, из которых надо импортировать данные, несистематизированы. Только не надо ничего никуда не сохранять. Делаем в 1С на форме поле ХТМЛ документа, включаем режим редактирования. В экселе - выделить все, копировать, в 1С - вставить. Все. Текст - доступен, все картиночки аккуратно сложены в LocalSettings\Temp, пути к картинкам в файле есть, левый верхний угол картинок к ячейкам подвязан.
Копировать, разумеется, можно не только из офиса, но и вообще из любого источника, поддерживающего ХТМЛ в буфере обмена (из почты, с веб-страницы и т.п.)
31. Александр Горлов (gavlexx) 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) 23.04.10 16:11
(27)
Интересно, как макросом можно сохранить картинку на диске? :o
У объекта Картинка Excel нет метода, позволяющего сохранить картинку на диск, только скопировать в буфер обмена...
33. Руслан Бабичев (Batchir) 24.04.10 08:53
(30) :D nafa выиграл. Самый универсальный способ - простой КопиПаст, 0 строчек кода.
34. Аркадий Кучер (Abadonna) 24.04.10 19:34
35. Аркадий Кучер (Abadonna) 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) 29.04.10 00:16
Согласен, что если картинка одна в документе, то проще всего Копи -> MS Paint (или) любой др. графический редактор, а оттуда сохраняй в любой желаемый формат, попутно отредактировав изображение при необходимости.
37. Светлана Иванова (Cvetic) 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
Добрый день! Спасибо за статью, отличный способ. Только вот.. Можно как-то сделать, чтобы изображениям присваивалось скажем имя из той же ячейки, где они стоят?
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа