Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Аналог класса Array в dotNet. Массивный массив возможностей - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, китин  
Мир MS Excel » Вопросы и решения » Готовые решения » Аналог класса Array в dotNet. Массивный массив возможностей (Excel)
Аналог класса Array в dotNet. Массивный массив возможностей
Dark_wave Дата: Пятница, 03.10.2014, 08:13 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 9 ±
Замечаний: 0% ±

Excel 2007
И снова здравствуйте)

Со времен вот этого поста http://www.excelworld.ru/forum/3-12909-1, подход к данному вопросу поменялся кардинальным образом. Решения, как бы поработать с массивом любого типа данных в классе и не создавать отдельные свойства-методы для каждого типа данных, я так и не нашел, но "нормальные герои, всегда идут в обход" (с) Правда, апофеозом там, помнится, было "зачем вы потащили меня в этот чертов обход?!", ну да не суть....
Класс dwArray1D - попытка решения данного вопроса с помощью определения типа данных массива, переданного по ссылке через переменную Variant, и дальнейшая работа с массивом "напрямую" в памяти. В общем, не дают мне покоя лавры класса Array в dotNet, и ему подобных. Хотя, даже не могу сказать, чего я к этим злосчастным массивам прицепился.

Начнем с самого главного. С чужих авторских прав и невольных соучастников этого, с позволения сказать, проекта

1. Очень помогла статья Формуляра http://www.excelworld.ru/forum/3-1880-1
2. Замечательная реализация алгоритма сортировки взята у Слэна http://www.planetaexcel.ru/forum/?PAGE_NAME=read&FID=8&TID=6998
3. Простое и удачное решение, по определению типа данных эл. массива, было подсказано Skif-F http://www.excelworld.ru/forum/3-12909-1

Теперь о грустном

1. Класс работает только с одномерными массивами.
2. Работа с массивами пользовательских типов данных (структур) и строк фиксированной длинны (а'ля String*10) не поддерживается. Не поддерживается работа с массивами, имеющими "отрицательный Lbound".
3. Массив должен "передаваться" в класс "напрямую" (не должен находиться в Variant-переменной)
4. Динамический массив должен содержать хотя бы один элемент (тут я просто недодумал, на начальном этапе)
5. Перебор элементов в цикле For Each не поддерживается
6. Некоторые методы из "удобняшек" жрут память равную, в лучшем случае, занятой самим массивом, т.к. создают промежуточный массив значений.
7. Производительность . Конечно же, за универсальность и удобняшки, пришлось ею расплатиться. Где-то в большей степени, где-то в меньшей, но пришлось. Производительность операций с массивами типа Variant ниже, чем с другими типами данных (т.к. размер эл. больше)

Кроме пункта номер 2 - все решаемо. Конечно, при условии, востребованности этого решения вообще)

Продолжим нейтральным

Разработка имеет статус "альфы". Т.е. еще "сырая" и плохо протестированная. Могут быть падения Excel или еще что-то в этом духе. Буду рад комментариям с описанием ошибок.
Документацию напишу попозже. Сейчас имеются модули с примерами почти для всего функционала + в самом классе есть описание всех методов с их параметрами, возвращаемыми значениями и прочим.

И закончим по-делу

Массив любого допустимого типа заворачивается в этот фантик достаточно просто:

И вот... словно куклой, в час любой, теперь он может управлять тобой.

А дальше, можно использовать весь этот заявленный "массив возможностей", было бы желание и ежли, конечно, нет там багов или хотя бы есть четное их число

Общее для большинства методов: Методы работы с массивами, начинающиеся на "Arr" - как правило имеют необязательные параметры, позволяющие выбрать элементы "с... по..." массива, для применения данного метода. Так же, такие методы, которые возвращают в результате массив (конвертация, фильтры) в случае отсутствия данных, возвращают пустой массив с отрицательным Ubound (= -1)

Основные свойства и методы

Расширенные методы работы с элементами массива, выполненные по заказу Британских ученых, при поддержке НИИ "Благородных девиц", и вряд ли так уж нужные в обычной работе по автоматизации

Конвертация

Полезняшки

Операции над "специфическими" типам данных\содержимым массивов


На Office x64 проверил, вроде работает

Эпилог
Примеры использования и тесты - в отдельных модулях, в файле.
Для интересующихся - код прокомментирован, правда, в меру моего понимания и сомнительного чувства юмора. Ссылки на источники информации, которыми я пользовался, в комментариях есть.

В приложении:
1. архив с классом файлом dwArray1D.cls (к сожалению, превышает 100КБ в xlsm)
2. архив "Example" с файлом xlsm (модули с примерами) и папка для тестирования работы с файловой системой. Для работы, dwArray1D.cls необходимо импортировать в данный файл

Версия 2
- частично добавлена документация в файл "Example". Файлы обновлены
К сообщению приложен файл: dwArray1D.zip (45.8 Kb) · Example.zip (75.9 Kb)


На самом деле самого дела-то и нет. А наоборот, получим оборот на, и таким образом перевернем образ

Сообщение отредактировал Dark_wave - Суббота, 04.10.2014, 08:05
 
Ответить
СообщениеИ снова здравствуйте)

Со времен вот этого поста http://www.excelworld.ru/forum/3-12909-1, подход к данному вопросу поменялся кардинальным образом. Решения, как бы поработать с массивом любого типа данных в классе и не создавать отдельные свойства-методы для каждого типа данных, я так и не нашел, но "нормальные герои, всегда идут в обход" (с) Правда, апофеозом там, помнится, было "зачем вы потащили меня в этот чертов обход?!", ну да не суть....
Класс dwArray1D - попытка решения данного вопроса с помощью определения типа данных массива, переданного по ссылке через переменную Variant, и дальнейшая работа с массивом "напрямую" в памяти. В общем, не дают мне покоя лавры класса Array в dotNet, и ему подобных. Хотя, даже не могу сказать, чего я к этим злосчастным массивам прицепился.

Начнем с самого главного. С чужих авторских прав и невольных соучастников этого, с позволения сказать, проекта

1. Очень помогла статья Формуляра http://www.excelworld.ru/forum/3-1880-1
2. Замечательная реализация алгоритма сортировки взята у Слэна http://www.planetaexcel.ru/forum/?PAGE_NAME=read&FID=8&TID=6998
3. Простое и удачное решение, по определению типа данных эл. массива, было подсказано Skif-F http://www.excelworld.ru/forum/3-12909-1

Теперь о грустном

1. Класс работает только с одномерными массивами.
2. Работа с массивами пользовательских типов данных (структур) и строк фиксированной длинны (а'ля String*10) не поддерживается. Не поддерживается работа с массивами, имеющими "отрицательный Lbound".
3. Массив должен "передаваться" в класс "напрямую" (не должен находиться в Variant-переменной)
4. Динамический массив должен содержать хотя бы один элемент (тут я просто недодумал, на начальном этапе)
5. Перебор элементов в цикле For Each не поддерживается
6. Некоторые методы из "удобняшек" жрут память равную, в лучшем случае, занятой самим массивом, т.к. создают промежуточный массив значений.
7. Производительность . Конечно же, за универсальность и удобняшки, пришлось ею расплатиться. Где-то в большей степени, где-то в меньшей, но пришлось. Производительность операций с массивами типа Variant ниже, чем с другими типами данных (т.к. размер эл. больше)

Кроме пункта номер 2 - все решаемо. Конечно, при условии, востребованности этого решения вообще)

Продолжим нейтральным

Разработка имеет статус "альфы". Т.е. еще "сырая" и плохо протестированная. Могут быть падения Excel или еще что-то в этом духе. Буду рад комментариям с описанием ошибок.
Документацию напишу попозже. Сейчас имеются модули с примерами почти для всего функционала + в самом классе есть описание всех методов с их параметрами, возвращаемыми значениями и прочим.

И закончим по-делу

Массив любого допустимого типа заворачивается в этот фантик достаточно просто:

И вот... словно куклой, в час любой, теперь он может управлять тобой.

А дальше, можно использовать весь этот заявленный "массив возможностей", было бы желание и ежли, конечно, нет там багов или хотя бы есть четное их число

Общее для большинства методов: Методы работы с массивами, начинающиеся на "Arr" - как правило имеют необязательные параметры, позволяющие выбрать элементы "с... по..." массива, для применения данного метода. Так же, такие методы, которые возвращают в результате массив (конвертация, фильтры) в случае отсутствия данных, возвращают пустой массив с отрицательным Ubound (= -1)

Основные свойства и методы

Расширенные методы работы с элементами массива, выполненные по заказу Британских ученых, при поддержке НИИ "Благородных девиц", и вряд ли так уж нужные в обычной работе по автоматизации

Конвертация

Полезняшки

Операции над "специфическими" типам данных\содержимым массивов


На Office x64 проверил, вроде работает

Эпилог
Примеры использования и тесты - в отдельных модулях, в файле.
Для интересующихся - код прокомментирован, правда, в меру моего понимания и сомнительного чувства юмора. Ссылки на источники информации, которыми я пользовался, в комментариях есть.

В приложении:
1. архив с классом файлом dwArray1D.cls (к сожалению, превышает 100КБ в xlsm)
2. архив "Example" с файлом xlsm (модули с примерами) и папка для тестирования работы с файловой системой. Для работы, dwArray1D.cls необходимо импортировать в данный файл

Версия 2
- частично добавлена документация в файл "Example". Файлы обновлены

Автор - Dark_wave
Дата добавления - 03.10.2014 в 08:13
Skif-F Дата: Пятница, 03.10.2014, 11:46 | Сообщение № 2
Группа: Проверенные
Ранг: Участник
Сообщений: 73
Репутация: 14 ±
Замечаний: 0% ±

Excel 2007, 2010, 2013, 2016
MSOffice 2007, 32 bit - тестовые программы отработали без ругательств.
Для себя (на данный момент) необходимости в столь эпохальном (7 тысяч строк) произведении не вижу, но некоторые идеи по мере необходимости извлекать буду.
И ещё я не могу понять смысла оформления кода в класс. Поскольку нет необходимости во множестве объектов, не лучше ли применять просто как стандартный модуль?
 
Ответить
СообщениеMSOffice 2007, 32 bit - тестовые программы отработали без ругательств.
Для себя (на данный момент) необходимости в столь эпохальном (7 тысяч строк) произведении не вижу, но некоторые идеи по мере необходимости извлекать буду.
И ещё я не могу понять смысла оформления кода в класс. Поскольку нет необходимости во множестве объектов, не лучше ли применять просто как стандартный модуль?

Автор - Skif-F
Дата добавления - 03.10.2014 в 11:46
Dark_wave Дата: Пятница, 03.10.2014, 16:53 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 9 ±
Замечаний: 0% ±

Excel 2007
Skif-F, Спасибо)

Насчет эпохальности - есть такая беда) С одной стороны измучен С++ , с другой - изнежен Net FrameWork-ом... К хорошему привыкаешь быстро, вот и привык, что в большинстве случаев, есть какое-то готовое решение в библиотеке. Один метод вызываешь и результат уже в кармане.
А в VBA, как с серьезной задачей столкнулся, так многое самому писать. Вот и решил, на будущее.. Хотя, конечно, это уже "Остапа понесло", минимум половина функционала если и понадобится, то один раз в жизни и то можно было бы обойтись стандартными средствами)

По классу - не знаю, видать привык, после того как на ООП перебрался, что класс - это "некое законченное решение", которое инкапсулирует... и все такое прочее) И что в таком виде удобнее всего передавать "решения" между разработчиками. А так, наверное, можно было бы, действительно, модуль использовать.


На самом деле самого дела-то и нет. А наоборот, получим оборот на, и таким образом перевернем образ
 
Ответить
СообщениеSkif-F, Спасибо)

Насчет эпохальности - есть такая беда) С одной стороны измучен С++ , с другой - изнежен Net FrameWork-ом... К хорошему привыкаешь быстро, вот и привык, что в большинстве случаев, есть какое-то готовое решение в библиотеке. Один метод вызываешь и результат уже в кармане.
А в VBA, как с серьезной задачей столкнулся, так многое самому писать. Вот и решил, на будущее.. Хотя, конечно, это уже "Остапа понесло", минимум половина функционала если и понадобится, то один раз в жизни и то можно было бы обойтись стандартными средствами)

По классу - не знаю, видать привык, после того как на ООП перебрался, что класс - это "некое законченное решение", которое инкапсулирует... и все такое прочее) И что в таком виде удобнее всего передавать "решения" между разработчиками. А так, наверное, можно было бы, действительно, модуль использовать.

Автор - Dark_wave
Дата добавления - 03.10.2014 в 16:53
Мир MS Excel » Вопросы и решения » Готовые решения » Аналог класса Array в dotNet. Массивный массив возможностей (Excel)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!