Страницы: 1 2 След.
RSS
Хранение файлов и файловый менеджер в файле(листе) Excel, Бинарное хранение данных в CustomProperty листа (Open FileName As Binary и Get, Put через байт-массив)
 
Всем привет!
Хочу поделится наработками, которые получились в процессе реализации своих задач.
Отдельная благодарность! Андрей VG, за любезно предоставленные исходники!, которые были несколько доработаны и дополнены для этих целей.

Хранение файлов и простенький файловый менеджер в листе Excel.
Сделал все максимально просто, для максимальной переносимости - переносим лист в другой файл, готово!
Нет форм, модулей уровня проекта, классов и т.д., все в модуле листа.
Работает стандартно через менеджер макросов или используя функции напрямую в вашем проекте/надстройке, обычном фале, поддерживающим макросы.

Андрей, сделал возможность подключить к любой книге, отключив в References ->microsoft scripting runtime (по умолчанию она выключена на обычных ПК, не хочу подключать через .GUID)

Функционал:
1.Загрузка любых файлов (в т.ч. архивов, которые можно распаковать автоматом при выгрузке)
2.Просмотр загруженных (имя, размер), при удалении, выгрузке.
3.Удаление
4.Выгрузка с параметрами (папка, файл, распаковка из zip (архиватор не нужен, средствами винды), открыть файл после выгрузки, перезаписать еще раз при распаковке)
Все эти параметры Optional, если их нет выполняется с параметрами по умолчанию.

Все исходники и пример прилагаю (с авто-распаковкой библиотеки из zip-архива и её запуска).
В загруженных файлах секретных данных и вирусов нет.
Изменено: bedvit - 27.10.2017 17:17:59 (Корректировки в коде)
«Бритва Оккама» или «Принцип Калашникова»?
 
Доброе время суток.
bedvit, отличное решение. Большое спасибо!
 
Можно накрутить всяких плюшек, но я решил - чем проще - тем лучше, главное основной функционал есть (еще подумаю на авто-архивирование при загрузке, как опциональный параметр) - но не знаю, лучше ли zip виндовый пакует, к примеру, чем мой RAR. Здесь если архив - значит с макс плотностью упаковки нужен. Нужно потестировать - как время будет (есно на zip архивах). RAR думал подключить, но есть малая доля вероятности, что не на всех машинах он есть.
«Бритва Оккама» или «Принцип Калашникова»?
 
Спасибо.
Пусть повисит, может, какие-то изменения будут. Потом можно перенести в Копилку
 
Исправил некоторые логические последствия, к примеру библиотеку ставим на распаковку, но указываем функции - безопасный режим (не переписываем файлы, последний параметр) - библиотека будет распакована в таком случае - только если нет такого файла или папки в выбираемом месте (или в папке по умолчанию). А при распаковке создается папка с названием архива. При запуске файлов, распаковке, в безопасном режиме - надо проверять сочетание этих факторов, наличие папок, файлов с одинаковыми названиями. Что оставлять, что заменять. Проверил - пока не нашел видимых отклонений от алгоритма.
Изменено: bedvit - 27.10.2017 18:07:46
«Бритва Оккама» или «Принцип Калашникова»?
 
bedvit, интересно! А пробовали найти пределы - какая может быть максимальная длина массива в CustomProperty и сколько их может быть в листе?
Я когда-то касался подобной темы - упаковки файлов в коллекцию Variables Ворда: http://www.cyberforum.ru/vba/thread713657.html
Там обнаружились пределы: 32767 переменных и ~130000 байт в одной переменной. Правда, это для Word 2000.
 
bedvit, Андрей VG — спасибо вам большое, Сэнсеи, за проделанную работу!!!  :idea:
А можно ли (если да, то как грамотно это сделать) добавить данную функцию в свою надстройку (файл .xlam), чтобы можно было вызывать на листе, как стандартную функцию/UDF?
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Казанский, Пробовал до 30 файлов и до 100 МБ в один массив. Суммарно до 250МБ выходило на лист - работает. Нужен тест или загуглить. Jack Famous, Очень просто, переносите лист в свою настройку и все, можете пользоваться. Можно ещё проще, копируете весь код на нужный лист и он становится байтовым хранилищем, в т.ч. и в надстройке. Если через функцию листа, нужно оформить Sub как Функцию, и возвращать к примеру 1 если все прошло штатно (нужно посмотреть на ограничения для функций листа), если все ОК - переименовать , вернуть 1.
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
Казанский написал:
упаковки файлов в коллекцию Variables
интересный вариант! Почитал. Выходит пока Excel впереди как Хранилище файлов.
Поделился и на киберфоруме.
Изменено: bedvit - 31.10.2017 10:44:35
«Бритва Оккама» или «Принцип Калашникова»?
 
bedvit, спасибо большое!)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, удалось реализовать через функцию листа?
«Бритва Оккама» или «Принцип Калашникова»?
 
bedvit, пока нет - я не пробовал( отпишусь сюда, как попробую. Надо сначала разобраться, что это за зверь)))
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Все просто, просматривается 2 варианта:
1. Оборачиваем SUB листа - функцией  в стандартном модуле или в модуле книги и готово. Пример приложил. При успешной загрузке - возвращается 1.
2. Переносим весь функционал из листа в стандартный модуль или модуль книги, меняем SUB  на Function, возвращаем 1, при успешном выполнении.
Изменено: bedvit - 31.10.2017 11:17:05
«Бритва Оккама» или «Принцип Калашникова»?
 
21/11/2017 Обновление версии: Loader_02
1.Процедуры переписаны в функции, которые возвращают при успешном выполнении, количество загруженных, удаленных, выгруженных файлов.
2.Добавлена пакетная загрузка файлов (выгрузка и удаление всех файлов уже было в первой версии) с корректным счетчиком.
3.Добавлено описание к коду и аргументам функций.
4.Добавлен запуск файлов как "приложением по умолчанию" так и через Excel.
5.Добавлен обработчик ошибок, с выводом сообщений об ошибке.
6.Добавлен запрос/вопрос пользователю на перезапись выгружаемых и загружаемых файлов, если они уже есть.

22/03/2018 Обновление версии: Loader_03
1.Добавил стартовое меню.
2.Добавил поддержку командной строки (на примере расчета числа Пи - программа упакована моя, вирусов нет.).
3.Изменил порядок параметров для функций на более логичный.

Файл сейчас выложить не могу (нужно размер подогнать) дам ссылку на поддерживаемый ресурс.
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit написал:
нужно размер подогнать
с недавних пор - не нужно  ;)  спасибо вам!  :)
я так и не понял, что эта штука делает и как работает, но когда-нибудь…когда-нибудь  :D
Изменено: Jack Famous - 28.03.2018 16:11:49
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, Здорово, спасибо!
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
Jack Famous написал:
я так и не понял, что эта штука делает и как работает,
все просто: зайдите в модуль листа запустите первую процедуру (стартовое меню), далее выбирайте нужное действие. В модуле обычном написан тест распаковки и запуск файла упакованного в листе. В данном случае расчёт числа Пи. Запустите тест и посмотрите результат.
Т.е. можно использовать в вашей программе  функции на загрузку, просмотр, удаления и выгрузку/запуск загруженных файлов в Excel. Или использовать стартовое меню, что бы делать все вышеназванное через диалог (кроме запуска, запуск сейчас только программно).
Для этого достаточно кода, который написан в листе с хранимыми данными. Лист можно перемещать в другие проекты без потери данных (не копировать!), а можно скопировать сам код, вставить на ваш лист и он станет хранилищем (нужные данные сами зальете).
Изменено: bedvit - 28.03.2018 20:31:27
«Бритва Оккама» или «Принцип Калашникова»?
 
bedvit, спасибо!)))
а для чего она, если подробно?)) что может заменить, например? я вот прямо не могу без примеров))))
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Например можно добавить такой лист в свою надстройку, загрузить библы на С++ или другом языке, распаковывать и пользоваться прямо из VBA, вызывая при необходимости. Все в одном файле xlam. Плюсом - такой код быстрее, тяжелее скопипастить, чем на VBA, легче разворачивать - один файл - открыл и пользуйся. Механизм похож на загрузку бинарных данных в ресурсы dll. К примеру в xll ресурсах упакована com.dll в моём, недавно выложенном, решении. В общем можно положить в ресурсы что угодно и использовать по мере необходимости.
Изменено: bedvit - 28.03.2018 23:18:39
«Бритва Оккама» или «Принцип Калашникова»?
 
bedvit, когда-нибудь я до этого дойду)))
или же предложу своё решение))) в любом случае — огромное спасибо вам за проделанную работу! У меня есть особенная закладка на этот случай  ;)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
bedvit, ну вы и наворотили, снимаю шляпу. Спасибо.
 
22/04/2018 Обновление версии: Loader_04
1.Добавил команду "ОТКРЫТЬ" в стартовом меню с поддержкой командной строки (скриншот прилагаю). Zip-файлы, при этом, сначала распаковываются, потом запускается первый файл в распакованной папке (поэтому рекомендуется хранить по одному файлу в архивах).
2.Изменил переход по листам с символов "<", ">" на "-","+" - удобно использовать цифровой блок клавиатуры.
3.Добавил возврат в меню при неверно введенных данных.
Изменено: bedvit - 23.04.2018 23:54:05
«Бритва Оккама» или «Принцип Калашникова»?
 
Скриншоты работы.
Изменено: bedvit - 25.04.2018 11:19:40 (Схематично, стрелками, обозначил алгоритм работы)
«Бритва Оккама» или «Принцип Калашникова»?
 
bedvit, спасибо за развитие идеи!)))
Цитата
bedvit написал:
Нужно ли соблюдать размер до 100Кб?
нет - новый лимит в 300кб  ;)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Андрей VG написал:
ну вы и наворотили, снимаю шляпу. Спасибо.
Благадарю.
Цитата
Jack Famous написал:
спасибо за развитие идеи!)))
Пользуйтесь.
Цитата
Jack Famous написал:
нет - новый лимит в 300кб  
Понял.
Изменено: bedvit - 23.04.2018 15:08:27
«Бритва Оккама» или «Принцип Калашникова»?
 
07/06/2018 Обновление версии: Loader_05
1. Добавил проверку при запуске файла, открыт ли он в другом процессе с возможностью открыть повторно или не открывать (по умолчанию)
2. Исправил ошибку, возникающих в случаях когда имя выгружаемого файла совпадало с папкой и папку нужно было удалять.
3. Исправил ошибку, возникающих в случаях когда распаковывается один и тот же архив с обновлением данных (удалением старых) в целевой папке.
4. Исправлена ошибка возникающая при загрузке файлов размером в нечетное количество байтов.
5. Добавлена возможность указать при загрузке папку (добавил новый параметр в функцию загрузки), без указания фалов, тогда загружаются все файлы из папки.

Пример использования: модуль "Test", макрос "Test"

Функционал распаковки и запуска файлов (Функция UnloadF):
'PathName - папка для выгрузки, по умолчанию: Environ$("TEMP")
'FileName - нужный файл для выгрузки, по умолчанию: выгружаются все
'UpdateFile - обновляем ли файл в папке при распаковки, если он там уже есть (выгружен ранее или есть с совпадающим именем), по умолчанию: нет
'UnZip - распаковка из архива (True - да, False - нет), по умолчанию: нет
'ExcelOpenFile - открыть файл в Excel после распаковки, по умолчанию: нет
'RunFile - запустить файл после распаковки приложением "по умолчанию" (для архива - один файл в один архив, в обратном случае, загрузится первый попавшийся из распакованного архива), по умолчанию: нет
'RunFileParametrs - параметры выполнения файла используется вместе с RunFile (аналогично командной строке с параметрами, без указания самого файла - полный путь к файлу автоматом подставляется)
'RunFileAgain - запускать файл, даже если он открыт в каком либо процессе (запускать еще раз), по умолчанию: нет

Все эти параметры Optional, если их нет - функция выполняется с параметрами по умолчанию (распаковка в пользовательский "TEMP")
Изменено: bedvit - 07.06.2018 19:40:24 ((Корректное решение, с исправленными нижеописанными ошибками))
«Бритва Оккама» или «Принцип Калашникова»?
 
Привет, Виталий.
Цитата
bedvit написал:
Обновление версии
Нет предела совершенству :) . Большое спасибо.
 
Андрей, Привет! Да, ошибки поисправлял в основном, в разных сочетаниях параметров, при тестировании. Думаю оставлю пока так, т.к. вполне работоспособен (на тех задачах, которые были в тесте) и функционал, оценочно, достаточен для широкого спектра задач. Опять же максимальная простота и переносимость моя главная цель.
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit написал:
Опять же максимальная простота и переносимость моя главная цель
Отлично получилось - в копилку положил.
 
А если создать дубль темы (такое "нарушение" только на пользу), описать и приложить файл, то можно положить и в Копику форума.
Страницы: 1 2 След.
Наверх