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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.01.2010, 17:00   #11
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

4) Cтеганографический подход
Берём классический пустой .gif размером в 1 точку. Дописываем ему в хвост в бинарном виде:
a) строку фиксированной длины, предварительно заполненную кодом &H0 с именем сохраняемого файла
b) cам сохраняемый файл
Вставляем этот gif на рабочий лист обычным образом ( Что бы жизнь не казалась мёдом, можно поместить этот gif не на лист а
в пользовательскую форму. У меня EXCEL 2010 сейчас без проблем поместил gif c прицепленным 12 МB архивом. В этом случае
доступ к данным для сохранения придётся делать через Clipboard и gif или bmp файлы формировать более хитрым способом )
Для распаковки:
a) сохраняем книгу как WEB страницу и обрабатываем файлы в папке
xxx...x.files
b) читаем прямым доступом оригинальное имя файла
c) отрезаем лишний префикс
Если хочется распаковывать файлы по одиночке придётся повозиться с CLIPBOARD

Последний раз редактировалось Aent; 20.01.2010 в 17:38.
Aent вне форума Ответить с цитированием
Старый 20.01.2010, 18:02   #12
wendigo
 
Регистрация: 15.01.2010
Сообщений: 6
По умолчанию

Дико, но симпатишно
Спасибо.
wendigo вне форума Ответить с цитированием
Старый 21.01.2010, 12:47   #13
sasha_prof
Форумчанин
 
Регистрация: 06.01.2010
Сообщений: 292
По умолчанию

Возможно это не возможно, но мне говорили, что как-то возможно делать запрос в Аксес через OLEObjects.

У когото было что-то подобное на практике?
sasha_prof вне форума Ответить с цитированием
Старый 21.01.2010, 15:26   #14
wendigo
 
Регистрация: 15.01.2010
Сообщений: 6
По умолчанию

ИМХО это тормозить будет очень.


Кстати 4 вариан не работает, при пересылке xls файла, вложенный gif портится.

Последний раз редактировалось wendigo; 21.01.2010 в 17:00.
wendigo вне форума Ответить с цитированием
Старый 22.01.2010, 01:00   #15
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Да. Как выяснилось Excel умный и при пересохранении иногда поправляет gif.
Пересылка файла тут не причём. Важно пересохранение. Бороться с этим можно встраивая файл в PNG c правильным разрешением.
Но это хлопотно. И имеет свои проблемы.
В связи с этим выкладывается оттестированный 5 вариант.
Ко всем влагаемым файлам дописывается двоичный префикс по которому они обнаруживаются в файле EXCEL
При вложении в файл EXCEL автоматически к любому файлу добавляется префикс и меняется его тип.
Когда нужно извлечь вложения, автоматически делается временная копия файла (что бы снять lock) и в ней по магической
цепочке в префиксе ищутся вложения. Так как файл читается один раз - естественное ограничение длина переменной типа
String. Но, полагаю, для практических целей этого больше чем достаточно.
Второе ограничение - отсутствие в сохраняемом файле "магической" строки идентификатора. C этим можно побороться, но
честно говоря лень. Хотя если попросите ...
Смотрите вложение. Там полнофункциональный упаковщик распаковщик. Файлы добавляются как OLE объекты на скрытый лист
Attachments. Управление через кнопки в заголовке листа "Список вложений". При экспорте все OLE объекты с листа Attachments
удаляются.
Важное замечание: Всё тестировалось и отлаживалось с файлами формата .xls Excel 2003 на 2007 Excel.
Если файл будут изначально сохранять в xlsm формате, то всё несколько сложнее. Придётся сначала распаковать из этого zip
XL\embending\, а потом по очереди обрабатывать по тому же алгоритму файлы oleObject1.bin ...oleObjectN.bin
Или устанавливать принудительно для сохранения тип файла .xls.
Вложения
Тип файла: zip Collector.zip (20.8 Кб, 29 просмотров)

Последний раз редактировалось Aent; 22.01.2010 в 03:45.
Aent вне форума Ответить с цитированием
Старый 19.08.2012, 08:27   #16
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Понадобилось тут прикреплять разные файлы к книге Excel.

Aent, попробовал ваше решение, - увы, Excel 2010 завис намертво.
Поэтому пришлось изобретать аналогичное решение самому.

Главными критериями были:
- надежность (стабильность работы во всех версиях Excel)
- гибкость и удобство использования
- скорость работы
- простота кода

Вот что в результате получилось:
http://excelvba.ru/tools/Attachments

Теперь можно легко прикреплять к книге Excel любые файлы, а потом их извлекать, или даже сразу запускать.


Описание возможностей я ещё не закончил - но к статье прикреплён файл,
в котором можно «пощупать» все функции моего решения (состоящего из 2 модулей класса)

PS: Если у кого будут пожелания или замечания по коду - с удовольствием выслушаю.

PPS: За счёт использования файла формата XLSB в качестве хранилища данных,
можно наблюдать интересное явление - суммарный объем вложенных файлов больше, чем размер получаемого файла Excel
На скриншоте видно:
Цитата:
Суммарный объём вложений 304 Кб
Размер книги Excel 272 Кб
Объясняется это просто - файл XLSB сжимается при сохранении, а прикрепляемые файлы XLS при подобном сжатии уменьшают размер в несколько раз.

Последний раз редактировалось EducatedFool; 19.08.2012 в 08:32.
EducatedFool вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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