![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 15.01.2010
Сообщений: 6
|
![]()
Подскажите пожалуйста: есть Excel файл с вложенными в него файлами, различных форматов. Нужно вытащить их оттуда и сохранить на диск. Узнать сколько и их и как открыть я знаю, а вот как сохранить?
Заранее спасибо. |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 17.07.2009
Сообщений: 519
|
![]()
Сохраните ваш файл в HTML формате. Если файлы внедрены по OLE в
рабочую книгу они найдутся в созданной при сохранении папке. А вот если ваши файлы помещены в файл EXCEL просто как в контейнер Ole Storage, то проще всего вытащить их используя плагин для FAR "DocFile Brouser" Игоря Павлова, применяемый с FAR или Total Commander (http://plugring.farmanager.com/downld/files/fdb102.zip) Нужен Far c версией не младше 1.65. |
![]() |
![]() |
![]() |
#3 |
Регистрация: 15.01.2010
Сообщений: 6
|
![]()
Файлы помещются в excel через обычную вставку объекта. Мне нужно программно (через VBA) разделить их, т.е. иметь отдельно вставленные в него документы и файл (можно с вложениями). Просто существует импорт в базу, но загружать он может лишь табличные данные и отдельно файлы. При сохранении html файлы меняют изначальный формат.( К сожалению ничего стороннего я использовать не могу.
|
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 17.07.2009
Сообщений: 519
|
![]()
Выложите пример файла c такими вложениями.
Непонятно на счёт изменения формата при сохранении в HTML. Кстати через вставку объекта может просто создаваться связь ... В любом случае без файла примера непонятно что вам нужно. |
![]() |
![]() |
![]() |
#5 | |
Регистрация: 15.01.2010
Сообщений: 6
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 17.07.2009
Сообщений: 519
|
![]()
Дело в том что Excel.OLEObject это НЕ IOLEObject. Это врапер над IOLEObject.
Стандартными средствами обойтись боюсь в вашем случае не получится. Можно конечно временно через реестр менять стандартный обработчик для типов внедрённых файлов на notepad или word. Затем используя метод verb объекта OleObject, открывать ваши вложения в этом обработчике как текстовые файлы и используя sendkey или объектную модель Word cохранять их сразу или через Clipboard. Можно из Excel динамически создавать WSH скрипт который будет сохранять внедрённый файл. Кстати, эксперимент показал, что по крайней мере в 2007 (в других версиях не проверял) метод OleObject.Verb понимает вопреки HELP и значения больше 2 ![]() У меня, например, при .Verb 8 упакованное rar вложение передаётся почтовому клиенту. Видимо стоит покопать в эту сторону. Второй путь - разбирать самому на VBA структуру компаунд документа для XLS - ещё более проблематичен. А вы не можете сохранять ваши тексты в XLS по другому ? Например, в скрытых шейпах листа ? Чуть усложниться импорт - зато с чтением и сохранением не будет проблем. Последний раз редактировалось Aent; 19.01.2010 в 21:29. |
![]() |
![]() |
![]() |
#7 | |
Регистрация: 15.01.2010
Сообщений: 6
|
![]() Цитата:
Ключевые моменты: единый файл шаблона, из которого можно вытащить файлы. Просто фактически на VBA я не пишу, использую только для решения конкретных задач, когда нет других вариантов. Так что буду благодарен если поподробнее изложите.Спасибо. |
|
![]() |
![]() |
![]() |
#8 | |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
![]() Цитата:
Aent, если не сложно, приведите пример, как сохранить (и потом извлечь) некий файл в книге Excel. (тип файла неизвестен, будем считать, что это просто некий набор байтов) Я, конечно, и сам могу состряпать нечто подобное, тупо записывая отдельные байты в ячейки листа, но, полагаю, есть более элегантные решения задачи (чтобы на листах не хранились лишние данные, или по крайней мере, были не видны) |
|
![]() |
![]() |
![]() |
#9 |
Форумчанин
Регистрация: 17.07.2009
Сообщений: 519
|
![]()
Мне кажется сама мысль сохранять различные вложения в едином файле шаблона неудачна. При таком разнообразии форматов я бы если файл лежит на сервере с NTFS помещал бы "вложения" в альтернативные потоки.
Если уж всё таки именно в один файл, попробуйте использовать MIME кодирование или скажем алгоритм BASE64 кодирования для перевода ваших данных в унифицированное текстовое представление. Код кодировщика-декодировщика в BASE64 можно найти например здесь http://www.source-code.biz/snippets/vbasic/12.htm Полученный текст можно спрятать в разных легкодоступных частях файла Excel: 1) С учётом максимальной длины строки в EXCEL cохранять в скрытом листе 2) Дописывать слева ' и сохранять как комментарий в специальном модуле проекта (потребуется разрешение на доступ к объектной модели VBA проекта). 3) Помещать текст в скрытую (минимизированную) надпись или шейп на рабочем листе. (Только если вложений мало - иначе будеточень тормозить) Мне представляется что самый простой способ - первый. Последний раз редактировалось Aent; 20.01.2010 в 15:38. |
![]() |
![]() |
![]() |
#10 | |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
![]() Цитата:
А есть ещё варианты? К примеру, файл, который требуется "прикрепить", весит 2 мегабайта. Сохранять в строки - долго (да ещё и учитывать всякие ограничения на количество символов в ячейке) Дописывать слева ' и сохранять как комментарий - а excel нормально отнесется к модулю в 2-мегабайтным комментарием? Помещать текст в скрытую (минимизированную) надпись или шейп на рабочем листе. - не проверял, но сомневаюсь, что влезет. Да и тормозить будет, согласен. Может, есть какие-то хитрые "контейнеры" в файле Excel, с которыми можно работать средствами VBA? |
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
OLE | Maks1978 | Общие вопросы C/C++ | 1 | 29.10.2008 10:10 |
OLE | Maks1978 | БД в Delphi | 1 | 29.10.2008 10:06 |
OLE ??? | Selena | Общие вопросы Delphi | 3 | 05.01.2008 18:00 |