Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
25.04.2024, 01:49:24

Войти
На форуме добавлена возможность подписки на RSS-ленты любого раздела форума. Подписаться можно, нажав на иконку RSS , расположенную левее наименования раздела.
33 243 Сообщений в 5 458 Тем от 6 761 Пользователей
Последний пользователь: Halfdoor
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Вопросы по Excel и VBA
| | |-+  Экспорт картинок из колонтитулов
Страниц: [1]   Вниз
Печать
Автор Тема: Экспорт картинок из колонтитулов  (Прочитано 3636 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Muskin2029
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 28


Просмотр профиля
« : 24.09.2020, 14:50:18 »

Всем привет.
А как записать картинки из колонтитулов в файл?
Как при этом узнать соответствие записанных файлов положению их содержимого в колонтитуле (верхний-нижний, левая или средняя или правая часть)?
Заранее спасибо.
Записан

Win10x64, MSO 2016
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 831



Просмотр профиля WWW
« Ответ #1 : 25.09.2020, 10:13:06 »

Ну вообще по сути встроенными механизмами никак. Эта инфо записана глубоко в недрах файла и обращение к колонтитулу точно не даст этой информации. Из колонтитула можно узнать только имя картинки(притом без расширения). Например, так:
Код: (vb)
ActiveSheet.PageSetup.LeftHeaderPicture.Filename

Но вот где она лежит/лежала на диске - вообще никак. Хотя вытащить картинку и сохранить на диск все же можно(правда, придется потрудиться чтобы сопоставить имена в колонтитулах именам в ресурсах файла). Если открыть файл архиватором(вроде WinRAR или любым, который работает с ZIP), то по пути \xl\media можно найти эти картинки. Только названия у них не те, что были у картинок изначально, а уже новые - в соответствии с файлами ресурсов(к тому же им будут назначены ссылки на ресурсы в виде id, на который есть ссылки уже в самой схеме XML).
Чтобы сопоставить реальные имена индексированным понадобятся файлы:
vmlDrawing1.vml (\xl\drawings) - там есть соответствие id исходному имени файла(из .PageSetup.LeftHeaderPicture.Filename)
vmlDrawing1.vml.rels (\xl\drawings\_rels) - здесь есть соответствие id имени файла в ресурсах
Т.е. как бы надо сначала по имени из колонтитула получить его id, потом по id надо получить имя файла внутри ресурсов и уже после этого извлекать из ресурса нужный файл картинки.
« Последнее редактирование: 25.09.2020, 10:14:40 от Дмитрий Щербаков(The_Prist) » Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Muskin2029
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 28


Просмотр профиля
« Ответ #2 : 27.09.2020, 13:29:01 »

Т.е. как бы надо сначала по имени из колонтитула получить его id, потом по id надо получить имя файла внутри ресурсов и уже после этого извлекать из ресурса нужный файл картинки.
Да, это, наверное, можно сделать после сохранения книги на диск. Но что делать, если в уже открытой книге изменяется рисунок в колонтитуле, запускается макрос - и где он должен брать содержимое вновь вставленной картинки? Тупик.
С помощью Process Hacker увидел, что картинки в колонтитулах, да и в других местах, активного листа полностью сидят в оперативной памяти в формате PNG-32. А оттуда нельзя как-нибудь извлечь?
Записан

Win10x64, MSO 2016
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 831



Просмотр профиля WWW
« Ответ #3 : 28.09.2020, 08:39:19 »

А оттуда нельзя как-нибудь извлечь?
Все можно. Только знания нужны соответствующие - через API можно и из буфера забрать, но для этого надой найти точный адрес объекта в памяти, а это вряд ли будет просто.
Но вряд ли это самый простой путь. Кто мешает после изменения картинки в колонтитуле сохранить копию книги и распотршить её для получения данных из ресурсов?
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Страниц: [1]   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru