Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
20.04.2024, 18:09:13

Войти
На форуме добавлена возможность подписки на RSS-ленты любого раздела форума. Подписаться можно, нажав на иконку RSS , расположенную левее наименования раздела.
33 242 Сообщений в 5 457 Тем от 6 758 Пользователей
Последний пользователь: Сергей2662
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Полезные решения
| | |-+  Создание иерархического списка всех каталогов и файлов, как в проводнике Windows
Страниц: [1]   Вниз
Печать
Автор Тема: Создание иерархического списка всех каталогов и файлов, как в проводнике Windows  (Прочитано 10748 раз)
0 Пользователей и 1 Гость смотрят эту тему.
George87
Новичок
*

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

Сообщений: 5


Просмотр профиля WWW E-mail
« : 05.07.2017, 15:06:35 »

Здравствуйте! Улыбка
Работаю в маленькой некоммерческой организации, помогающей больным детям.
У нас всего 1 настольный ПК и интернет через USB-модем.
Ясно, что серверное/облачное резервное копирование – не наш вариант. Поэтому делаю копии за день на флэшки, а за месяц – на DVD (как раз умещаются документы и фото-отчёты).
Понятно, что нужен список файлов, хранящихся на резервных DVD.
На форумах нашёл множество соответствующих алгоритмов и несколько готовых вариантов. На их основе зимой (пока мало работы с детьми) написал свою программу.
Макрос для создания древовидного списка с выбором папок и файлов см. на диске Yandex:
http://yadi.sk/d/M6-sV68v3K7ie3
(файл с макросом – около 3 Мб – больше разрешённого для загрузки на форум, даже если максимально сжать архиватором)

Установка и запуск макроса
1. Установка: скопировать в любой каталог 3 файла:
Создать список.xls
ExtList.txt – список масок расширений файлов
PatternList.txt – список образцов выбора файлов
2. Запуск:
щёлкнуть правой кнопки мыши на ячейке листа, с которой создавать список, и выбрать в открывшемся меню ``Создать список каталогов/файлов``
или в редакторе Visual Basic: CreateLst -> Modules -> CreateList -> CreateListStart

Макрос использует следующие библиотеки:
Для работы с реестром:
%systemroot%\system32\advapi32.dll
Для работы с файловой системой (Scripting.FileSystemObject):
%systemroot%\system32\scrrun.dll
Для работы с регулярными выражениями (VBScript.RegExp):
%systemroot%\system32\vbscript.dll
Для работы с системными цветами (GetSysColor):
%systemroot%\system32\user32.dll
Для работы с ini-файлами (GetPrivateProfileString и WritePrivateProfileString):
%systemroot%\system32\kernel32.dll


Я – любитель-самоучка. Программированием занимаюсь в свободное время, чтобы облегчить выполнение типовых задач на работе.
Представленный проект разрабатывался в Excel 2003 на Windows 7x32 и немного тестировался под более новыми версиями Excel и Windows.
В течение весеннего семестра я обращался с этим проектом в профильные ВУЗы города – хотел при помощи преподавателей соответствующих дисциплин и студентов оптимизировать алгоритмы и убрать недостатки, на что у меня самого не хватает опыта, а главное – времени.
Но выбранные мною методика и среда программирования оказались не актуальны. ВУЗы работают с нейронными сетями и другими проявлениями искусственного интеллекта.
Мне будут интересны любые адекватные замечания по этому проекту.
В меру своих возможностей готов помочь в дальнейшей работе.


Положительные качества макроса и пояснения некоторых решений
1. Возможность создавать одновременно список каталогов и файлов.
2. Для выбора каталогов используется метод, позволяющий открывать окно обзора с ``каталога`` ``Мой компьютер``. Это очень удобно, т.к. вполне вероятно, что каталог, список из которого надо будет создавать, может не находиться в ``Моих документах`` или на системном диске.
3. Широкие возможности выбора файлов, включаемых в список.
1) Для выбора файлов по типам (по расширениям) создано 2 списка:
а) слева – типы файлов с их описанием. Этот список хранится в текстовом файле. Файл может быть открыт для редактирования пользователем из формы.
б) справа – типы файлов из реестра (HKEY_LOCAL_MACHINE\SOFTWARE\Classes).
Списки могут синхронизироваться при загрузке формы. В каждом списке остаются только уникальные записи.
В списках доступно выделение нескольких строк. Создана возможность автоматизированной очистки выделенных строк.
2) Для выбора файлов по именам используются регулярные выражения.
Создана подробная инструкция по их использованию.
Большинство пользователей редко применяют регулярные выражения. Поэтому для помощи в работе с этим способом анализа имён файлов была создана специальная форма. Она позволяет оперативно, без вывода списка файлов на лист, проверить, будут ли выполняться условия отбора файлов.
Список применяемых пользователем регулярных выражений хранится в текстовом файле. Новые строки добавляются в файл в диалоговом режиме. Файл может быть открыт для редактирования пользователем из формы.
Можно сказать, что пользовательский список расширений файлов является излишним. Конечно, теоретически, он не нужен, ведь все типы файлов можно прочитать из реестра. Поэтому список пользователя – это ``избранное`` из списка по реестру. К тому же пользователь может выстраивать свой список в удобном ему порядке, дополнять расширения файлов их описаниями (отображаются в форме) и комментариями (доступны только в файле списка).
После синхронизации списков при первом запуске макроса пользователь может сохранить синхронизированный (уменьшенный) список в новый файл для ускорения последующих синхронизаций.
В списке пользователя одно расширение может быть указано несколько раз, например, с разными описаниями. Это особенно удобно перед синхронизаций списков при первом запуске макроса, т.к. разные программы могут использовать одинаковые расширения файлов.
4. Возможность использовать несколько групп параметров для выбора различных файлов (группы параметров связаны логическим ``или``).
5. Для ввода дат при выборе файлов применяется календарь, не зависящий от библиотек сторонних производителей. Это сделано в связи с тем, что ``Элемент управления Календарь`` (``Calendar Control``) является частью Microsoft Office Access, поэтому устанавливается только с ним. Кроме того, описано множество проблем при работе с таким календарём в версиях Office 2007+.
6. Возможность выделения в списке файлов по заданным параметрам особым оформлением (варианты начертания шрифта, цвет шрифта и фона).
7. При описании выбранных параметров оформления используются названия цветов, выбираемые по созданному алгоритму из более чем 1000 вариантов (названия взяты с двух сайтов).
Имеется возможность вывести в новый документ этот список названий цветов (с примерами и RGB-кодами).
8. Возможность выводить в список не только имя файла, но и его размер в различных форматах, даты создания и изменения, атрибуты.
9. Возможность выводить в список указанные выше данные о файлах в нескольких столбцах или в одном столбце с именем файла.
Второй вариант удобнее при распечатке списка, содержащего каталоги и файлы. В Excel ширина столбца задаётся сразу для всего листа (в отличие от таблиц в Word, где можно изменить ширину столбца в конкретной строке). Поэтому, если красиво настроить ширину столбцов списка файлов одного каталога, эти настройки могут сделать нечитаемым список файлов другого каталога. Поэтому и создана возможность выводить данные в длинную строку, которая ``пойдёт поверх`` свободных столбцов справа, поэтому не надо будет настраивать их ширину.
10. Для создания списка вставляются новые строки. Поэтому исключаются почти все возможные проблемы с данными, которые могли уже быть на листе. Выводится предупреждение, если список не умещается на лист Excel.
11. Проверяется корректность вводимых пользователем данных.
12. Возможность сохранять параметры создания списка (состояние элементов управления формы) и расположение формы в ini-файле или в реестре. Сохранение в реестре – не видно пользователю. Сохранение в ini-файле – позволяет перенести настройки на другой компьютер.


Недостатки
К сожалению, у меня не было времени на полноценное исправление следующих замеченных недостатков:
1. Возможны не корректные результаты при обработке особых каталогов: первый и нижний каталоги в списке, пустые каталоги на разных уровнях, каталоги с закрытым доступом и т.д.
2. Не создаёт список в виде
C:\Каталог\Файл1.txt
C:\Каталог\Файл2.txt
Не было времени делать эту функцию, тем более, что в таком виде список создают многие другие макросы.
3. Метод, который используется, чтобы открывать окно обзора каталогов, не позволяет начинать обзор с каталога, указанного пользователем. (Точнее говоря, технически можно открывать это окно на каталоге пользователя, но вот для выбора будут доступны только внутренние каталоги этого каталога пользователя).
4. Требуется активация зависимых элементов управления соответствующим переключателем. Это не совсем удобно, если сравнить с аналогами.
Например, в окне печати Word для печати некоторых страниц, нужно установить переключатель на ``номера:`` и ввести номера страниц в поле. Однако можно сразу ввести номера страниц, и переключатель ``номера:`` включится автоматически.
Однако я не использую такой принцип, чтобы уменьшить количество возможных некорректных действий пользователя.
5. Использование регулярных выражений для выбора файлов по именам, не позволяет исключить файлы, содержащие в имени определённые слова. Например, не получится не включать в список файлы со словом ``копия`` в имени.
6. При большом количестве файлов в каталоге (более 1000) сильно возрастает время анализа этого каталога при создании списка каталогов (!). (У меня процессор Intel Celeron CPU G1820 @ 2.70GHz, ядер: 2, логических процессоров: 2. Оперативная память: 2 Гб).
7. Отсутствует возможность обновить уже существующий список в файле Excel в соответствии с изменениями в каталоге компьютера.
8. Список выводится в файл по мере получения информации из соответствующего каталога.
Возможно, было бы более ``красиво`` сначала сформировать список в массив в оперативной памяти, а затем распечатать этот массив в файл. Однако такой вариант оказался для меня слишком сложным.
9. Содержание рабочего массива с параметрами выбора файлов ParamArr не оптимально: в него включены врЕменные параметры из врЕменного массива TmpParamArr.
Но при такой оптимизации возрастёт объём кода для переноса записей из одного массива в другой, ведь сейчас для этого достаточно всего лишь одной строки цикла.
Кроме того, такая оптимизация сделает более сложным процесс отладки: человеку нужно будет помнить смысл индексов для каждого массива.
10. ``Школьный`` стиль кода.
Я занимаюсь программированием только как любитель. И код в ``суровом профессиональном`` стиле я всё ещё не могу прочитать.
Мне нужны комментарии, строки-пробелы и канонический вид операторов, например ``If … Then … End If``.
Кроме того, у меня экран с небольшим разрешением. Чтобы при отладке удобно видеть всю выполняемую команду и результаты работы в окне Excel, нужно переносить длинные команды на несколько строк.
К тому же я надеялся, что всё это поможет сделать на основе моего макроса учебный пример для студентов.
11. Всего 5 параметров оформления каталогов и файлов (шрифт: полужирный, курсив, подчёркнутый, цвет: шрифта и фона).
12. Не обрабатываются специфические метаданные файлов (например, EXIF).
13. Автоматически может сохраняться и загружаться при запуске формы только один набор параметров создания списка (состояния элементов управления формы).
14. Нет прокрутки мышью списка параметров. Однако это, скорее, проблема самого VBA, что нет стандартных средств для прокрутки мышью. Но здесь на неё особенно обращаешь внимание.
15. Скорее всего, невозможна обработка сетевых ресурсов.

С уважением,
Георгий Данилов


'Служебная информация. Удалить после прочтения
Уважаемый Администратор!
1. Я знаю, что есть несколько подобных тем на форуме. Однако решил создать новую тему, т.к. мой макрос значительно отличается от других.
К тому же объём кода, написанного мною ``с нуля`` (без модуля анализа цвета ColorsName, но считая комментарии, справочные сообщения, строки-пробелы и типовые команды, не объединяемые в цикл) – около 11,5 тыс. строк. Скорее всего, будут обсуждения, которые тоже удобнее вести в отдельной теме.
2. Макрос будет выложен ещё на нескольких форумах – с которых я тоже получил много полезной информации. Ссылки напишу, когда мои сообщения пройдут там модерацию.
Записан
vikttur
Глобальный модератор
Ветеран
*****

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

Сообщений: 1 816



Просмотр профиля
« Ответ #1 : 05.07.2017, 15:23:56 »

Не нужно множить по форумам. Сначала цель объясните. На большинстве известных форумов одни и те же специалисты.
Записан
George87
Новичок
*

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

Сообщений: 5


Просмотр профиля WWW E-mail
« Ответ #2 : 05.07.2017, 16:26:57 »

Согласен, что серьёзные специалисты зарегистрированы сразу на нескольких форумах.
А вот новичкам, возможно, будет проще увидеть мою тему именно здесь.
По себе знаю.

Однако если уважаемый Администратор удалит тему с Форума, как лишнюю, я не смогу с ним спорить. Обеспокоенный
Записан
vikttur
Глобальный модератор
Ветеран
*****

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

Сообщений: 1 816



Просмотр профиля
« Ответ #3 : 05.07.2017, 17:14:49 »

Сначала цель объясните.
Записан
George87
Новичок
*

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

Сообщений: 5


Просмотр профиля WWW E-mail
« Ответ #4 : 05.07.2017, 17:20:26 »

Хочу показать-поделиться. Может быть, кому-то пригодится готовое решение. Подмигивающий
Зарабатывать здесь – не моё. Я в этом не профессионал. Плачущий
Недостатки указал – чтобы люди знали, с какими проблемами они могут столкнуться.
Как их исправлять я знаю, но у меня нет времени.
Записан
George87
Новичок
*

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

Сообщений: 5


Просмотр профиля WWW E-mail
« Ответ #5 : 06.07.2017, 09:15:19 »

Данная тема создана также на следующих форумах:
excelworld.ru/forum/3-34371-1
programmersforum.ru/showthread.php?t=310592
planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=93309
« Последнее редактирование: 06.07.2017, 09:16:59 от George87 » Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

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

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



Просмотр профиля WWW
« Ответ #6 : 07.07.2017, 19:35:49 »

Тема скорее просится в готовые решения. Кто захочет - тот тогда что-то подправит и поделится мыслями. Поэтому переношу туда.
Записан

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

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

Сообщений: 5


Просмотр профиля WWW E-mail
« Ответ #7 : 07.07.2017, 22:52:36 »

Согласен.
Спасибо! Улыбка
Записан
Страниц: [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