|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
24.06.2012, 13:51 | #1 |
Новичок
Джуниор
Регистрация: 24.06.2012
Сообщений: 2
|
Сохранение скриншота в excel
Может кто подскажет, как решить проблему сохранения скриншота диапазона ячеек в формате jpg. Вчера после нескольких часов копания форумов и экспериментирования получилось сделать сохранение в формате emf... а в jpg вообще никак не получается...(((
Использую такой код: Private Sub CommandButton1_Click() Worksheets("Лист1").Range("A1:H20") .CopyPicture xlScreen, Format:=xlBitmap Set oPic = PastePicture(xlScreen) SavePicture oPic, "C:\" & Replace(Time, ":", "_") & ".jpg" End Sub Function PastePicture(Optional lXlPicType As Long = xlBitmap) As IPicture 'Some pointers Dim h As Long, hPicAvail As Long, hPtr As Long, hPal As Long, lPicType As Long, hCopy As Long 'Convert the type of picture requested from the xl constant to the API constant lPicType = IIf(lXlPicType = xlBitmap, CF_BITMAP, CF_ENHMETAFILE) 'Check if the clipboard contains the required format hPicAvail = IsClipboardFormatAvailable(lPicType ) If hPicAvail <> 0 Then 'Get access to the clipboard h = OpenClipboard(0&) If h > 0 Then 'Get a handle to the image data hPtr = GetClipboardData(lPicType) 'Create our own copy of the image on the clipboard, in the appropriate format. If lPicType = CF_BITMAP Then hCopy = CopyImage(hPtr, IMAGE_BITMAP, 0, 0, LR_COPYRETURNORG) Else hCopy = CopyEnhMetaFile(hPtr, vbNullString) End If 'Release the clipboard to other programs h = CloseClipboard 'If we got a handle to the image, convert it into a Picture object and return it If hPtr <> 0 Then Set PastePicture = CreatePicture(hCopy, 0, lPicType) End If End If Если кто в курсе, как сделать - подскажите пожалуйста! Работоспособный файл с сохранением в emf прилагается. Cкриншоты.zip |
24.06.2012, 14:41 | #2 |
Старожил
Регистрация: 02.05.2009
Сообщений: 3,907
|
Код:
Анализ,обработка данных Недорого
Последний раз редактировалось doober; 24.06.2012 в 14:50. |
24.06.2012, 14:54 | #3 |
Новичок
Джуниор
Регистрация: 24.06.2012
Сообщений: 2
|
Ого! Спасибо огромное, отлично работает! Вы просто волшебник!
Один только вопрос - справа и снизу скриншота появляется широкая белая полоса... от нее можно избавиться? Последний раз редактировалось dmiry74; 24.06.2012 в 14:58. |
24.06.2012, 15:08 | #4 |
Старожил
Регистрация: 02.05.2009
Сообщений: 3,907
|
Она идет по периметру.
Вы же получаете картинку диаграммы. От нее не избавитесь
Анализ,обработка данных Недорого
|
24.06.2012, 22:04 | #5 |
Форумчанин
Регистрация: 25.02.2012
Сообщений: 166
|
среди приложений MSOffice сохранять вставленные картинки в формате jpg умеет MS PowerPoint
если макрос doober'а в Excel'e оставить в таком виде: Код:
Код:
что-то вроде Код:
что я делаю неправильно? Последний раз редактировалось ikki_pf; 24.06.2012 в 22:13. |
24.06.2012, 23:00 | #6 |
Форумчанин
Регистрация: 25.02.2012
Сообщений: 166
|
вот так отрабатывает без ругани. но результат совершенно другой
Код:
|
24.06.2012, 23:18 | #7 |
Форумчанин
Регистрация: 25.02.2012
Сообщений: 166
|
вывод: макрорекодер PowerPoint'а нагло врёт
сохранение отдельного рисунка (пункт "Сохранить как рисунок") контекстного меню рисунка НЕ ИМЕЕТ аналога в объектной модели PP. у объекта Shape нет даже отдаленно похожего метода, а метод SaveAs объекта Presentation приводит к созданию папки с указанным именем (без расширения) и набором jpg-файлов, каждый из которых представляет целиком слайд. вот так-то. |
24.06.2012, 23:41 | #8 | |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
Цитата:
Вы создаёте экземпляр объекта ppApp через CreateObject, что неявно, но подразумевает отсутствие ссылки на PowerPoint в Tools-References. В то же время, в коде вы используете константы PowerPoint (например, ppSaveAsJPG), забыв заменить из значениями. Если ссылки на PowerPoint в Tools-References нет, то Excel не знает, чему равно ppSaveAsJPG, и из-за этого код может работать неверно. Может, макрорекодер PowerPoint'а всё-таки не врёт, а кто-то при переносе кода чего-то напутал? )) |
|
24.06.2012, 23:50 | #9 |
Форумчанин
Регистрация: 25.02.2012
Сообщений: 166
|
да всё может быть...
но ссылка в референсах есть. |
24.06.2012, 23:53 | #10 |
Форумчанин
Регистрация: 25.02.2012
Сообщений: 166
|
ну вот, заменил позднее связывание на раннее:
Код:
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Редактирование и сохранение excel из dbgrid | Q012 | БД в Delphi | 5 | 22.08.2012 21:24 |
Сохранение StringGrid в Excel | kta87 | Общие вопросы Delphi | 1 | 20.02.2012 06:10 |
Сохранение массива в excel файл | ikostalker | Общие вопросы Delphi | 2 | 15.06.2010 11:01 |
Delphi Excel (сохранение записи в Excel) | Кас Алина | Общие вопросы Delphi | 4 | 28.05.2010 09:17 |
Корректное сохранение в Excel | artemavd | БД в Delphi | 1 | 19.07.2009 20:57 |