Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
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 Окт 2017 17:17:59 (Корректировки в коде)
«Бритва Оккама» или «Принцип Калашникова»?
 
Доброе время суток.
bedvit, отличное решение. Большое спасибо!
 
Можно накрутить всяких плюшек, но я решил - чем проще - тем лучше, главное основной функционал есть (еще подумаю на авто-архивирование при загрузке, как опциональный параметр) - но не знаю, лучше ли zip виндовый пакует, к примеру, чем мой RAR. Здесь если архив - значит с макс плотностью упаковки нужен. Нужно потестировать - как время будет (есно на zip архивах). RAR думал подключить, но есть малая доля вероятности, что не на всех машинах он есть.
«Бритва Оккама» или «Принцип Калашникова»?
 
Спасибо.
Пусть повисит, может, какие-то изменения будут. Потом можно перенести в Копилку
 
Исправил некоторые логические последствия, к примеру библиотеку ставим на распаковку, но указываем функции - безопасный режим (не переписываем файлы, последний параметр) - библиотека будет распакована в таком случае - только если нет такого файла или папки в выбираемом месте (или в папке по умолчанию). А при распаковке создается папка с названием архива. При запуске файлов, распаковке, в безопасном режиме - надо проверять сочетание этих факторов, наличие папок, файлов с одинаковыми названиями. Что оставлять, что заменять. Проверил - пока не нашел видимых отклонений от алгоритма.
Изменено: bedvit - 27 Окт 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 Окт 2017 10:44:35
«Бритва Оккама» или «Принцип Калашникова»?
 
bedvit, спасибо большое!)
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
Jack Famous, удалось реализовать через функцию листа?
«Бритва Оккама» или «Принцип Калашникова»?
 
bedvit, пока нет - я не пробовал( отпишусь сюда, как попробую. Надо сначала разобраться, что это за зверь)))
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
Все просто, просматривается 2 варианта:
1. Оборачиваем SUB листа - функцией  в стандартном модуле или в модуле книги и готово. Пример приложил. При успешной загрузке - возвращается 1.
2. Переносим весь функционал из листа в стандартный модуль или модуль книги, меняем SUB  на Function, возвращаем 1, при успешном выполнении.
Изменено: bedvit - 31 Окт 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 Мар 2018 16:11:49
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
Jack Famous, Здорово, спасибо!
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
Jack Famous написал:
я так и не понял, что эта штука делает и как работает,
все просто: зайдите в модуль листа запустите первую процедуру (стартовое меню), далее выбирайте нужное действие. В модуле обычном написан тест распаковки и запуск файла упакованного в листе. В данном случае расчёт числа Пи. Запустите тест и посмотрите результат.
Т.е. можно использовать в вашей программе  функции на загрузку, просмотр, удаления и выгрузку/запуск загруженных файлов в Excel. Или использовать стартовое меню, что бы делать все вышеназванное через диалог (кроме запуска, запуск сейчас только программно).
Для этого достаточно кода, который написан в листе с хранимыми данными. Лист можно перемещать в другие проекты без потери данных (не копировать!), а можно скопировать сам код, вставить на ваш лист и он станет хранилищем (нужные данные сами зальете).
Изменено: bedvit - 28 Мар 2018 20:31:27
«Бритва Оккама» или «Принцип Калашникова»?
 
bedvit, спасибо!)))
а для чего она, если подробно?)) что может заменить, например? я вот прямо не могу без примеров))))
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
Например можно добавить такой лист в свою надстройку, загрузить библы на С++ или другом языке, распаковывать и пользоваться прямо из VBA, вызывая при необходимости. Все в одном файле xlam. Плюсом - такой код быстрее, тяжелее скопипастить, чем на VBA, легче разворачивать - один файл - открыл и пользуйся. Механизм похож на загрузку бинарных данных в ресурсы dll. К примеру в xll ресурсах упакована com.dll в моём, недавно выложенном, решении. В общем можно положить в ресурсы что угодно и использовать по мере необходимости.
Изменено: bedvit - 28 Мар 2018 23:18:39
«Бритва Оккама» или «Принцип Калашникова»?
 
bedvit, когда-нибудь я до этого дойду)))
или же предложу своё решение))) в любом случае — огромное спасибо вам за проделанную работу! У меня есть особенная закладка на этот случай  ;)
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
bedvit, ну вы и наворотили, снимаю шляпу. Спасибо.
 
22/04/2018 Обновление версии: Loader_04
1.Добавил команду "ОТКРЫТЬ" в стартовом меню с поддержкой командной строки (скриншот прилагаю). Zip-файлы, при этом, сначала распаковываются, потом запускается первый файл в распакованной папке (поэтому рекомендуется хранить по одному файлу в архивах).
2.Изменил переход по листам с символов "<", ">" на "-","+" - удобно использовать цифровой блок клавиатуры.
3.Добавил возврат в меню при неверно введенных данных.
Изменено: bedvit - 23 Апр 2018 23:54:05
«Бритва Оккама» или «Принцип Калашникова»?
 
Скриншоты работы.
START_MENU.png (70.88 КБ)
«Бритва Оккама» или «Принцип Калашникова»?
 
bedvit, спасибо за развитие идеи!)))
Цитата
bedvit написал:
Нужно ли соблюдать размер до 100Кб?
нет - новый лимит в 300кб  ;)
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
Цитата
Андрей VG написал:
ну вы и наворотили, снимаю шляпу. Спасибо.
Благадарю.
Цитата
Jack Famous написал:
спасибо за развитие идеи!)))
Пользуйтесь.
Цитата
Jack Famous написал:
нет - новый лимит в 300кб  
Понял.
Изменено: bedvit - 23 Апр 2018 15:08:27
«Бритва Оккама» или «Принцип Калашникова»?
Страницы: 1
Читают тему (гостей: 1)