Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

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

Доброго дня.

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

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

"Вытащить" картинки с рабочего листа 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 Кб, 200 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 21.01.2011, 09:08   #3
a69
 
Регистрация: 13.12.2010
Сообщений: 5
По умолчанию

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

Работает

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

Цитата:
как присвоить имени картинки имя ячейки где она находится?
Для этого, в коде из поста № 2 строку
Код:
CopyEnhMetaFile n, "c:\" & "picture" & n & ".jpg": CloseClipboard
замените на
Код:
CopyEnhMetaFile n, "c:\" & Replace(sh.TopLeftCell.Address, "$", "") & ".jpg": CloseClipboard
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 21.01.2011, 10:42   #5
a69
 
Регистрация: 13.12.2010
Сообщений: 5
По умолчанию

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

Цитата:
Сообщение от 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,856
По умолчанию

Цитата:
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,133
По умолчанию

> Скажите, а это правильный 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
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 01.10.2012, 23:13   #9
Анастатия
Новичок
Джуниор
 
Регистрация: 01.10.2012
Сообщений: 1
По умолчанию

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

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


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


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