Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Microsoft Office и VBA > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 21.01.2011, 02:54   #1
a69
 
Регистрация: 13.12.2010
Сообщений: 5
Репутация: 10
По умолчанию Вытащить картинку из ячейки, как?

Доброго дня.

Таблица, ячейки пронумерованы, в определенных ячейках лежат картинки.
Надо вытащить эти картинки и записать их в файлы.
Чет не соображу как, подскажите плиз.

Спасибо заранее.
a69 вне форума   Ответить с цитированием
Старый 21.01.2011, 07:59   #2
SAS888
Профессионал
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,152
Репутация: 1063
По умолчанию

"Вытащить" картинки с рабочего листа Excel и записать их в отдельные файлы можно через буфер обмена с помощью API-функций. Например, следующий код создаст в корневом каталоге диска "C:\" jpg-файлы, содержащие все имеющиеся на активном листе картинки:
Код:

Private Declare Function OpenClipboard Lib "user32.dll" (ByVal hwnd As Long) As Long
Private Declare Function CloseClipboard Lib "user32.dll" () 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
   
Sub Main()
    Dim sh As Shape, n As Long
    For Each sh In ActiveSheet.Shapes
        If sh.Type = msoPicture Then
            sh.CopyPicture: OpenClipboard (0&): n = GetClipboardData(14)
            CopyEnhMetaFile n, "c:\" & "picture" & n & ".jpg": CloseClipboard
        End If
    Next
End Sub

Пример во вложении. Откройте файл и запустите макрос "Main".
Вложения
Тип файла: rar SavePictures.rar (514.3 Кб, 172 просмотров)
__________________
Чем шире угол зрения, тем он тупее.
SAS888 вне форума   Ответить с цитированием
Старый 21.01.2011, 10:08   #3
a69
 
Регистрация: 13.12.2010
Сообщений: 5
Репутация: 10
По умолчанию

Ого! Быстро!
Ну спасибо!!!

Работает

Наберусь смелости на еще один вопросик, как присвоить имени картинки имя ячейки где она находится?
a69 вне форума   Ответить с цитированием
Старый 21.01.2011, 11:28   #4
SAS888
Профессионал
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,152
Репутация: 1063
По умолчанию

Цитата:
как присвоить имени картинки имя ячейки где она находится?
Для этого, в коде из поста № 2 строку
Код:

CopyEnhMetaFile n, "c:\" & "picture" & n & ".jpg": CloseClipboard

замените на
Код:

CopyEnhMetaFile n, "c:\" & Replace(sh.TopLeftCell.Address, "$", "") & ".jpg": CloseClipboard

__________________
Чем шире угол зрения, тем он тупее.
SAS888 вне форума   Ответить с цитированием
Старый 21.01.2011, 11:42   #5
a69
 
Регистрация: 13.12.2010
Сообщений: 5
Репутация: 10
По умолчанию

Просто супер!
Приятно видеть работу профессионала, спасибо!
a69 вне форума   Ответить с цитированием
Старый 04.10.2011, 16:23   #6
Dimas999
Новичок
 
Регистрация: 04.10.2011
Сообщений: 1
Репутация: 10
По умолчанию уточнение по формату картинки

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Для этого, в коде из поста № 2 строку
Код:

CopyEnhMetaFile n, "c:\" & "picture" & n & ".jpg": CloseClipboard

замените на
Код:

CopyEnhMetaFile n, "c:\" & Replace(sh.TopLeftCell.Address, "$", "") & ".jpg": CloseClipboard

Скажите, а это правильный jpg-формат? Не надо как-то явно указывать формат вывода картинки из clipboard?
Picasa Viewer, например, его не понимает, хотя стандартный виндовый просмотрщик - кушает на уря...
Dimas999 вне форума   Ответить с цитированием
Старый 04.10.2011, 17:07   #7
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Адрес: Россия, Урал
Сообщений: 6,822
Репутация: 1220

skype: ExcelVBA.ru
По умолчанию

Цитата:
Picasa Viewer, например, его не понимает, хотя стандартный виндовый просмотрщик - кушает на уря...
Для Windows и большинства программ не важно расширение графического файла - оно определяется автоматически по содержимому.
Можете проверить - переименовать jpg в bmp или emf или png - файлы как открывались, так и будут открываться.

Скорее всего, код сохраняет рисунки в формат .emf
Для сохранения в настоящий JPG код надо усложнить.
Примеры кода есть в инете.
Вот один из них:
http://excelvba.ru/programmes/ExportCharts
EducatedFool вне форума   Ответить с цитированием
Старый 04.10.2011, 17:12   #8
Казанский
Профессионал
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,054
Репутация: 819
По умолчанию

> Скажите, а это правильный jpg-формат?
Нет. IrfanView сообщает, что это WMF. Вы размер файлов видели? 489 и 902 кб!
Можно встроенными средствами, без API:
Код:

Sub ExportPics()
Dim sh As Shape, n As Long, ash As Worksheet
Set ash = ActiveSheet
With Charts.Add
    For Each sh In ash.Shapes
        If sh.Type = msoPicture Then
            .ChartArea.Width = sh.Width
            .ChartArea.Height = sh.Height
            sh.CopyPicture
            .Paste
            .Export "c:\picture" & n & ".jpg", "JPG"
            n = n + 1
        End If
    Next
    Application.DisplayAlerts = False
    .Delete
    Application.DisplayAlerts = True
End With
End Sub

Казанский вне форума   Ответить с цитированием
Старый 01.10.2012, 23:13   #9
Анастатия
Новичок
 
Регистрация: 01.10.2012
Сообщений: 1
Репутация: 10
По умолчанию

Добрый день! Скажите пожалуйста, сама не могу сообразить : документ Exel - в нем в столике есть номер когда навожу на него курсор появляется картинка, убираю соответственно исчезает...скопировать или еще что то не получается, т.е. эта картинка я так понимаю прикреплена туда....вот ее мне нужно от туда достать, объясните как это сделать, мучаюсь 2 ч. Заранее большое спасибо.
Анастатия вне форума   Ответить с цитированием
Старый 02.10.2012, 01:49   #10
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Адрес: Россия, Урал
Сообщений: 6,822
Репутация: 1220

skype: ExcelVBA.ru
По умолчанию

Анастатия, картинка находится в примечании к ячейке.
Как её оттуда достать (вручную, или программно), - увы, не знаю.
Если картинка одна проще всего сделать PrintScreen
EducatedFool вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вытащить текст из ячейки Tirendus Microsoft Office Excel 18 29.01.2012 19:51
как вытащить картинку из BLOB поля Dania SQL, базы данных 0 25.03.2010 13:44
Вытащить из ячейки только Фамилию buk Microsoft Office Access 3 10.10.2009 10:46
Как вытащить только часть символов из ячейки? Berkley Microsoft Office Excel 5 22.12.2006 01:43


03:15.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru