Страницы: 1
RSS
Инструменты для работы с массивами (XLL, COM): ListViev
 
Мое почтение, джентльмены.
К вашему вниманию ListViev для массивов COM SafeArray (VT_ARRAY | VT_VARIANT)

Умеет:
+Показывать данные из массива с возможностью редактирования в форме с помощью ListViev
+Сортировать
+Фильтровать
+Транспонировать
+Сериализовать данные в файл
+Десериализовать данные из файл
+Шифровать данные
+Выгружать на лист Excel в формате для выгрузки на лист Excel (числа как текст и т.д)
+Загружать данные с листа Excel
+Дозагружать данные с листа Excel
+Добавлять новые строки
+Удалять строки
+Перемещать строки

Немного статистики:
+Максимальное количество строк 100 000 000
+Максимальное количество столбцов ?

Тайминги:
Загрузка 100 000 000 строк -15 секунд

Если данный инструмент интересен залью в COM вам для тестирования.

Видео работы инструмента см. ниже.


«Бритва Оккама» или «Принцип Калашникова»?
 
Кому интересно можно протестировать демо-версию, работают еще не все кнопки, но основные уже работают, см. рис. (и последние две работают, не отметил)


Скачать можно здесь.
Изменено: bedvit - 15.08.2025 18:00:27
«Бритва Оккама» или «Принцип Калашникова»?
 
Виталий,  добрейшего, сделайте пожалуйста Эксель внутри Экселя, чтобы он был быстрее Экселя!
 
А будет ли работать на 32-битном Excel?
Я забыл, но там вроде-бы какое-то ограничение есть.

И будет ли возможность вставлять и удалять столбцы?
 
AltцGamer, вот и попробуйте, и нам расскажите) По ссылке выше есть и 32 разрядная версия.
Сейчас столбцы вставляются в соответствии с загруженным диапазоном из Excel (если это XLL)  или массива (если это СОМ).
Существует и возможность доработки функционала, что бы вставлять столбцы прямо в форме. Пока это никому не нужно было, поэтому сейчас этого функционала нет.
Изменено: bedvit - 20.08.2025 08:50:20
«Бритва Оккама» или «Принцип Калашникова»?
 
Добавил возможность выгружать данные в новую или уже существующую сводную таблицу.
Давайте попробуем выгрузить  в сводную таблицу 100 000 000 строк...

Изменено: bedvit - 22.08.2025 15:46:32
«Бритва Оккама» или «Принцип Калашникова»?
 
Добавился новый функционал.

Столбцы можно переименовывать, перемещать (можно попробовать ретягивать мышкой на нужное место), удалять, добавлять, копировать, изменять размер.
Данные можно загружать из Excel и выгружать обратно. Есть возможность копировать в буфер обмена.
Можно фильтровать, можно сортировать.
См. видео


Можно загружать массивы из VBA (через C API Excel), обрабатывать в DataGridView и выгружать обратно в VBA, см. код
Код
Option Explicit

Sub Test_XLLcmdDataGridView()
    Dim row, col, arrOut

    Dim sizeRow As Long: sizeRow = 10
    Dim sizeCol As Long: sizeCol = 1
    Dim arrIn: ReDim arrIn(1 To sizeRow, 1 To sizeCol) 'первоначальный массив данных, далее хаполняем рендомно
   
    'заполняем первоначальный массив с данными
    For row = 1 To sizeRow
        For col = 1 To sizeCol
        arrIn(row, col) = row + col
        Next
    Next

    'получаем обработанный в XLLcmdDataGridView массив arrOut
    arrOut = Application.RUN("XLLcmdDataGridView", 0, , arrIn)

End Sub

См. видео



Для больших массивов (миллионы строк) можно настроить загрузку через COM.

Библиотеку залил в бета-версию. Кому интересно можно бесплатно скачать и пользоваться.
Изменено: bedvit - 20.11.2025 00:36:19
«Бритва Оккама» или «Принцип Калашникова»?
 
Добавлен инструмент в COM (максимальное количество строк - 100 000 000, столбцов - точно не знаю, 1 000 000 загружается нормально, больше не тестировал)
Сделана возможность отката к сохраненному состоянию.


Код
Option Explicit

Sub Test_XLLcmdDataGridView()

    Dim row, col, arrOut, x
    Dim sizeRow As Long: sizeRow = 65536
    Dim sizeCol As Long: sizeCol = 20
    Dim arrIn: ReDim arrIn(0 To sizeRow, 1 To sizeCol) 'первоначальный массив данных, далее заполняем рандомно (sizeRow=0-заголовок)
   
    'заполняем первоначальный массив с данными
    For row = 0 To sizeRow '0-заголовок
        For col = 1 To sizeCol
            arrIn(row, col) = row + col
        Next
    Next

    'XLL
    'передача массива СОМ через указатель
    'arrOut = Application.RUN("XLLcmdDataGridView", 0, , Array("VarPtr", VarPtr(arrIn)))
    
    'передача массива СОМ через  стандартный механизм Excel C API (xltypeMulti, максимум 65536 столбцов)
    arrOut = Application.RUN("XLLcmdDataGridView", 0, , arrIn)

    'COM - изменение на месте
    Dim bVBA As Object: Set bVBA = CreateObject("BedvitCOM.VBA") 'позднее связывание
    bVBA.DataGridView arrIn

End Sub


Надстройку (с COM.dll) можно бесплатно скачать здесь.
Изменено: bedvit - 04.12.2025 21:56:54
«Бритва Оккама» или «Принцип Калашникова»?
Страницы: 1
Читают тему
Наверх