Форум программистов, компьютерный форум, киберфорум
bedvit
Войти
Регистрация
Восстановить пароль
Рейтинг: 3.88. Голосов: 8.

BedvitCOM (библиотека COM/ActiveX) + BedvitXLL (библиотека XLL c C API Functions для Excel) С/С++

Запись от bedvit размещена 06.08.2019 в 18:48
Обновил(-а) bedvit 15.10.2022 в 22:12 (BedvitXLL(v3.1.0.0)+BedvitCOM(v2.0.0.0))

Решил объединить все проекты по данной тематике в одно решение.
Скачать новые версии библиотек XLL и COM на сайте.

Более подробно по компонентам - в отдельных темах (будут линки).

1.BedvitCOM (библиотека COM/ActiveX)

Область применения - COM/ActiveX поддерживающие приложения/языки на Windows (х32, х64).
Реализованы dual-интерфейсы с Automation-совместимыми типами данных (поддержка раннего и позднего связывания).
При раннем связывании есть описание функционала и параметров.
Регистрация COM реализовано как под админом, так и под пользователем (актуально в офисной части клиентов)
Регистрация стандартная:
Админ: Regsvr32 "FullName.DLL" !ПОМНИМ! В Win10 регистрация под правами админа: "правая кнопка" - "Пуск" -"Командная строка (администратор)"
Пользователь: Regsvr32 /i /n "FullName.DLL"
Удалить из реестра: Regsvr32 /u "FullName.DLL"

Примеры использования:
Кликните здесь для просмотра всего текста
Раннее связывание
Visual Basic
1
2
3
4
Sub Help()
Dim bCOM As New BedvitCOM.BignumArithmeticFloat
bCOM.Help
End Sub
Позднее связывание
Visual Basic
1
2
3
4
5
6
7
Sub Help()
Dim bCOM
Set bCOM = CreateObject("BedvitCOM.BignumArithmeticFloat")
bCOM.Help
'или в одну строку
CreateObject("BedvitCOM.BignumArithmeticFloat").Help
End Sub
1C
1
2
bCOM = Новый COMОбъект("BedvitCOM.BignumArithmeticFloat");
bCOM.Help;



Содержит:
1. Класс BignumArithmeticInteger - длинная арифметика с целыми числами.
Кликните здесь для просмотра всего текста
Свойства и Методы BignumArithmeticInteger

1.Help(); HTML Справка (без параметров).

2.BSTR* StringBSTR = Bignum(BYTE Bignum, LONG BignumBase=10) = BSTR* StringBSTR ; Свойство. Принимает и возвращает BSTR* строку StringBSTR (задает число или возвращает значение). Bignum-индекс длинного числа в массиве (0-255). BignumBase-база длинного числа (от 2 до 36), по умолчанию = 10.

3.LONG Val = Sign(BYTE Bignum); Свойство. Возвращает знак длинного числа LONG Val.Возвращает 1 если Bignum > 0, 0 если Bignum = 0, и -1 если Bignum < 0.

4.LONG Val = Even(BYTE Bignum); Свойство. Определяет, является ли Bignum четное или нечетное. Возвращает 1 - Bignum четное, 0 - Bignum нечетное.

5.LONG Val = Compare(BYTE Bignum1, BYTE Bignum2); Метод. Сравнивает два длинных числа. Возвращает 1 если Bignum1 > Bignum2, 0 если Bignum1 = Bignum2, и -1 если Bignum1 < Bignum2.

6.BignumSet(BYTE Bignum, BSTR StringBSTR, LONG BignumBase=10); Метод. Задает число с параметрами аналогичными свойству Bignum()

7.Sum(BYTE BignumSet, BYTE Bignum1, BYTE Bignum2); Метод. Суммирует два длинных числа. BignumSet = Bignum1 + Bignum2

8.SumL(BYTE BignumSet, BYTE Bignum1, LONG_PTR LONG_PTR); Метод. Суммирует длинное число с обычным. BignumSet = Bignum1 + LONG_PTR(х64:LONG_PTR= LONGLONG, х32:LONG_PTR= LONG)

9.Abs(BYTE BignumSet, BYTE Bignum1); Метод. Возвращает модуль значения из Bignum1 в BignumSet.

10.Negate(BYTE BignumSet, BYTE Bignum1); Метод. Возвращает значение с противоположным знаком из Bignum1 в BignumSet. BignumSet = - Bignum1.

11.Subtract(BYTE BignumSet, BYTE Bignum1, BYTE Bignum2); Метод. Вычитает из одного длинного числа второе. BignumSet = Bignum1 - Bignum2

12.SubtractL(BYTE BignumSet, BYTE Bignum1, LONG_PTR LONG_PTR); Метод. Вычитает из длинного числа обычное. BignumSet = Bignum1 - LONG_PTR.

13.Multiply(BYTE BignumSet, BYTE Bignum1, BYTE Bignum2); Метод. Умножает одно длинное число на второе. BignumSet = Bignum1 * Bignum2.

14.MultiplyL(BYTE BignumSet, BYTE Bignum1, LONG_PTR LONG_PTR); Метод. Умножает длинное число на обычное. BignumSet = Bignum1 * LONG_PTR.

15.Divide(BYTE BignumQuotient, BYTE BignumRemainder, BYTE Bignum1, BYTE Bignum2); Метод. Делит одно длинное число на второе. При делении получаем частное в BignumQuotient, остаток от деления в BignumRemainder = Bignum1 / Bignum2.

16.DivideL(BYTE BignumQuotient, BYTE BignumRemainder, BYTE Bignum1, LONG_PTR LONG_PTR); Метод. Делит длинное число на обычное. При делении получаем частное в BignumQuotient, остаток от деления в BignumRemainder = Bignum1 / LONG_PTR.

17.Power(BYTE BignumSet, BYTE Bignum1, LONG_PTR LONG_PTR); Метод. Возводит в степень LONG_PTR длинное число Bignum1, результат возвращает в BignumSet. BignumSet = Bignum1 ^ LONG_PTR.

18.Clone(BYTE BignumSet, BYTE Bignum1); Метод. Копирует Bignum1 в BignumSet. BignumSet = Bignum1

19.RootRem(BYTE BignumRoot, BYTE BignumRemainder, BYTE Bignum1, LONG_PTR n_root); Метод. Извлекает корень n_root-степени из Bignum1. Целочисленный результат возвращает в BignumRoot, остаток в BignumRemainder = (n-th root)√ Bignum1.

20.Factorial(BYTE BignumSet, LONG n); Метод. Возвращает в BignumSet факториал n!

21.Fibonacci(BYTE BignumSet, LONG_PTR n); Метод. Возвращает в BignumSet число Фибоначи n. Fn+1 = Fn + Fn-1

22.LucNum(BYTE BignumSet, LONG_PTR n); Метод. Возвращает в BignumSet число Лукоса n. Ln+1 =Ln + Ln-1

23.FileSet(BYTE Bignum, BSTR StringBSTRFileName, LONG BignumBase=10); Метод. Загружает длинное число из файла (*.txt). Принимает BSTR* строку StringBSTRFileName в качестве полного пути и имени файла. Bignum-индекс длинного числа в массиве (0-255). BignumBase-база числа (от 2 до 36), по умолчанию = 10.

24.FileGet(BYTE Bignum, BSTR StringBSTRFileName, LONG BignumBase=10); Метод. Сохраняет длинное число в файл (*.txt). Принимает BSTR* строку StringBSTRFileName в качестве полного пути и имени файла. Bignum-индекс длинного числа в массиве (0-255). BignumBase-база числа (от 2 до 36), по умолчанию = 10.

25.Clear(LONG Bignum=-1); Метод. Освобождает память занятую длинным числом Bignum, или освобождает память занятую всеми числами при заданном параметре по умолчанию = -1. Начиная с v2.0.0.0 деструктор класса сам очищает память (при удалении класса или завершении процедуры в VBA).

26.LONG Val = BignumArraySize(); Метод. Возвращает количество чисел Bignum в созданном классе/массиве. Начиная с v2.0.0.0 (теперь массив чисел может быть произвольного размера, а не как ранее 256 чисел. Размер увеличиваться автоматически.)



2. Класс BignumArithmeticFloat - длинная арифметика с дробными числами.
Кликните здесь для просмотра всего текста
Свойства и Методы BignumArithmeticFloat

1.Help(); HTML Справка (без параметров).

2.LONG Val = SizeBits(BYTE Bignum, LONG_PTR* pVal) = .LONG Val; Свойство. Задает и возвращает размер длинного числа в БИТАХ LONG Val. Bignum-индекс длинного числа в массиве (0-255).

3.BSTR* String = Bignum(BYTE Bignum, LONG BignumBase=10, LONG_PTR Precision=0, BSTR Separator=”.”, VARIANT_BOOL Exponential=-1) = BSTR* String; Свойство. Принимает и возвращает BSTR* строку String (задает число или возвращает значение). Bignum-индекс длинного числа в массиве (0-255). BignumBase-база длинного числа (от 2 до 36), по умолчанию = 10. Precision – точность (кол-во цифр в числе), по умолчанию = 0 - максимальная (равна заданному размеру в битах). Separator – символ разделителя целой и дробной частей числа, по умолчанию точка(“.”). Exponential – по умолчанию =-1 экспоненциальная запись, 0 – десятичная (в разработке).

(При парсинге строки в число, ожидаемая десятичная точка берется из текущей локали, на системах, предоставляющих localeconv).

4.LONG Val = Sign(BYTE Bignum); Свойство. Возвращает знак длинного числа LONG Val.Возвращает 1 если Bignum > 0, 0 если Bignum = 0, и -1 если Bignum < 0.

5.LONG Val = Compare(BYTE Bignum1, BYTE Bignum2); Метод. Сравнивает два длинных числа. Возвращает 1 если Bignum1 > Bignum2, 0 если Bignum1 = Bignum2, и -1 если Bignum1 < Bignum2.

6.SizeBitsSet(BYTE Bignum, LONG_PTR SizeBits); Метод. Задает размер длинного числа в БИТАХ LONG Val.

7.BignumSet(BYTE Bignum, BSTR StringBSTR, LONG BignumBase=10, BSTR Separator=”.”); Метод. Задает число с параметрами аналогичными свойству Bignum().

8.Sum(BYTE BignumSet, BYTE Bignum1, BYTE Bignum2); Метод. Суммирует два длинных числа. BignumSet = Bignum1 + Bignum2

9.SumL(BYTE BignumSet, BYTE Bignum1, LONG_PTR LONG_PTR); Метод. Суммирует длинное число с обычным. BignumSet = Bignum1 + LONG_PTR(х64:LONG_PTR= LONGLONG, х32:LONG_PTR= LONG)

10.Abs(BYTE BignumSet, BYTE Bignum1); Метод. Возвращает модуль значения из Bignum1 в BignumSet.

11.Subtract(BYTE BignumSet, BYTE Bignum1, BYTE Bignum2); Метод. Вычитает из одного длинного числа второе. BignumSet = Bignum1 - Bignum2.

12.SubtractL(BYTE BignumSet, BYTE Bignum1, LONG_PTR LONG_PTR); Метод. Вычитает из длинного числа обычное. BignumSet = Bignum1 - LONG_PTR.

13.Multiply(BYTE BignumSet, BYTE Bignum1, BYTE Bignum2); Метод. Умножает одно длинное число на второе. BignumSet = Bignum1 * Bignum2.

14.MultiplyL(BYTE BignumSet, BYTE Bignum1, LONG_PTR LONG_PTR); Метод. Умножает длинное число на обычное. BignumSet = Bignum1 * LONG_PTR.

15.Divide(BYTE BignumSet, BYTE Bignum1, BYTE Bignum2); Метод. Делит одно длинное число на второе. BignumSet = Bignum1 / Bignum2

16.DivideL(BYTE BignumSet, BYTE Bignum1, LONG_PTR LONG_PTR); Метод. Делит длинное число на обычное. BignumSet = Bignum1 / LONG_PTR.

17.Root(BYTE BignumSet, BYTE Bignum1); Метод. Извлекает квадратный корень из Bignum1. Результат возвращает в BignumSet. BignumSet = √ Bignum1.

18.Negate(BYTE BignumSet, BYTE Bignum1); Метод. Возвращает значение с противоположным знаком из Bignum1 в BignumSet. BignumSet = - Bignum1.

19.Power(BYTE BignumSet, BYTE Bignum1, LONG_PTR LONG_PTR); Метод. Возводит в степень LONG_PTR длинное число Bignum1, результат возвращает в BignumSet. BignumSet = Bignum1 ^ LONG_PTR.

20.Clone(BYTE BignumSet, BYTE Bignum1); Метод. Копирует Bignum1 в BignumSet. BignumSet = Bignum1

21.FileSet(BYTE Bignum, BSTR StringBSTRFileName, LONG BignumBase=10); Метод. Загружает длинное число из файла (*.txt). Принимает BSTR* строку StringBSTRFileName в качестве полного пути и имени файла. Bignum-индекс длинного числа в массиве (0-255). BignumBase-база числа (от 2 до 36), по умолчанию = 10.

(При парсинге строки в число, ожидаемая десятичная точка берется из текущей локали, на системах, предоставляющих localeconv).

22.FileGet(BYTE Bignum, BSTR StringBSTRFileName, LONG BignumBase=10, LONG_PTR Precision=0); Метод. Сохраняет длинное число в файл (*.txt). Принимает BSTR* строку StringBSTRFileName в качестве полного пути и имени файла. Bignum-индекс длинного числа в массиве (0-255). BignumBase-база числа (от 2 до 36), по умолчанию = 10. Precision – точность (кол-во цифр в числе), по умолчанию = 0 - максимальная (равна заданному размеру в битах).

23.Clear(LONG Bignum=-1); Метод. Освобождает память занятую длинным числом Bignum, или освобождает память занятую всеми числами при заданном параметре по умолчанию = -1. Начиная с v2.0.0.0 деструктор класса сам очищает память (при удалении класса или завершении процедуры в VBA).

24.LONG Val = BignumArraySize(); Метод. Возвращает количество чисел Bignum в созданном классе/массиве. Начиная с v2.0.0.0 (теперь массив чисел может быть произвольного размера, а не как ранее 256 чисел. Размер увеличиваться автоматически.)

25.BSTR* String = GetToBignumInt(LONG Bignum, LONG BignumBase=10); Метод. Преобразовать Bignum из Float в Integer и вывести. ВАЖНО! преобразование происходит с заданной ранее точностью в битах для Float (SizeBitsSet). Без округлений, отбрасывается дробная часть. Будьте внимательнее в таких преобразованиях. Начиная с v2.0.0.0.



3. Класс VBA - набор функций/методов для работы в VBA, и в других COM/ActiveX поддерживающих языках
Методы:
3.1 ArraySortS() - быстрая сортировка данных (String) в одномерном/двухмерном массиве
Кликните здесь для просмотра всего текста
Параметры метода:
1.array_in_out - указатель на массив (ввод/вывод)
2.sort_order - порядок сортировки : 0-по возрастанию, 1-по убыванию
3.key_1 - ключи сортировки (индекс столбца или строки) по умолчанию - первый столбец/строка
4.key_2
5.key_3
6.sort_orientation - ориентация сортировки (0 - по строкам, 1 - по столбцам, 2- целый массив вывод строка-столбец, 3- целый массив вывод столбец-строка)
7.delete_duplicates - удаляем дубликаты (в одномерных массивах)
8.out_array_index - выводим индексы, "булево" 1/0 (тогда основной массив array_in_out - не меняется, выводятся данные в index_array_out )
9.index_array_out - одномерный массив с индексами (с учетом всех ключей), если задан out_array_index=1

Все параметры метода, кроме входящего массива - опциональные (с значениями по умолчанию - 0 (ключи-1))
Метод "ArraySort" работает через Variant, т.к. на некоторых скриптовых языках SAFEARRAY ходит через границы COM, только в обертке VARIANT (без изобретения костылей).

3.2 FilterUnicodeChar() - получить/удалить любые символы Unicode из строки. Регистрозависимая.
Кликните здесь для просмотра всего текста
Параметры метода:
1. StringIn - входящая строка
2. Второй параметр (EnableChar) - символы включаемые в итоговую строку (через "-" указывается диапазон, сам "-" выводится если его поставить первым символом в шаблоне)
3. Третий параметр (DisableChar) - символы исключаемые из итоговой строки ( через "-" указывается диапазон, сам "-"тудаляется если его поставить первым символом в шаблоне) .
Последние два параметра - не обязательные. Можно задавать любой из них, можно все два, можно никакой - тогда выводится первоначальная строка

3.3 LikeUnicodeChar() - Сравнивает строку с маской/шаблоном (или наоборот исключая символы шаблона). Регистрозависимая. (v1.0.5.0 и выше)
Кликните здесь для просмотра всего текста
Параметры метода:
1.stringIn - входящая строка
2.maskChar - маска/шаблон (через "-" указывается диапазон, сам "-" выводится/удаляется если его поставить первым символом в шаблоне)
3.invertMask - инвертировать маску (сравнение, исключая символы маски)
Возвращает булево.

3.4 Trim() - удаляет из текста все пробелы, за исключением одиночных пробелов между словами.
Кликните здесь для просмотра всего текста
Параметры метода:
1.StringIn - входящая строка
2.StringOut - результирующая строка

3.5 InStr() - ищем первое вхождение подстроки в строку. Регистрозависимая.
Кликните здесь для просмотра всего текста
Параметры метода:
1.StringIn - строка в которой производим поиск
2.StringFind - подстрока для поиска в StringIn
3.Start - позиция с которой начинаем поиск в строке

3.6 Replace() - заменить одну подстроку на другую. Параметр Start - не усекает строку, в отличии от стандартной Replace. Регистрозависимая
Кликните здесь для просмотра всего текста
Параметры метода:
1.StringIn - строка в которой производим поиск
2.StringFind - подстрока для поиска и замены в StringIn
3.StringReplace - подстрока на которую заменяем StringFind
3.Start - позиция с которой начинаем поиск и замены подстрок в строке
4.Count - количество замен

3.7 ArraySortV() - быстрая сортировка данных (Variant) в одномерном/двухмерном массиве
Кликните здесь для просмотра всего текста
Параметры метода:
1.array_in_out - указатель на массив (ввод/вывод)
2.key_1 - ключи сортировки (порядковый номер столбца, начиная с 1), по умолчанию - первый столбец.
3.sort_order1 - порядок сортировки для key_1 : 0-по возрастанию (по умолчанию для всех), 1-по убыванию
4.key_2 - по умолчанию - не участвует
5.sort_order2 - порядок сортировки для key_2
6.key_3 - по умолчанию - не участвует
7.sort_order3 - порядок сортировки для key_3
Ключи задаются по порядку, т.е. сразу указать 3й - нельзя.

3.8 Transpose() - быстрое транспонирование (на месте) двухмерного массива (поддерживаются все типы данных)
Кликните здесь для просмотра всего текста
Параметры метода:
1.array_in_out - указатель на массив (ввод/вывод)

3.9 QRcodePrint() - Печать QR-кода

3.10 ConvertFormatImage() - конвертации графических форматов из одного в другой

3.11 GetRowsCountCSVansi() - возвращает кол-во строк в файле

3.12 GetRowCSVansi() - возвращает найденную строку по индексу

3.13 FindRowsInCSVansi() - возвращает найденную строку/строки по искомой подстроке

3.14 SortDeleteDuplicateRowsCSVansi() - сортировка и удаление дубликатов строк в csv/txt(ANSI) файлах

3.15 HashStringSHA() - хеширование строки разными алгоритмами SHA (+ новейшие SHA3) :

3.16 Array2Dto1D() - быстрое преобразования двухмерного массива в одномерный (данные не обрезаются, 2е измерение преобразуются в очередь) (v1.0.5.0 и выше)
Кликните здесь для просмотра всего текста
Параметры метода:
1.array_in_out - массив, который нужно преобразовать
2.lLbound1 - нижняя граница нового массива (по умолчанию=0)

3.17 Array1Dto2D() - быстрое преобразование одномерного массива в двухмерный (данные не удаляются) (v1.0.5.0 и выше)
Кликните здесь для просмотра всего текста
Параметры метода:
1.array_in_out - массив, который нужно преобразовать
2.lLbound1 - нижняя граница нового массива, 1е измерение (по умолчанию=0)
3.lLbound2 - нижняя граница нового массива, 2е измерение (по умолчанию=0)

3.18 ArrayFilterV() - фильтр для одномерного и двухмерного массива (тип данных VARIANT) с любым количества столбцов, с любом количеством условий (начиная с v2.0.1.0, в XLL c v3.2.1.0).
Кликните здесь для просмотра всего текста
Параметры метода:
1. array_in - массив входящий (одномерный, двухмерный), тип данных VARIANT.
2. array_parameters - массив задаваемых параметров, тип данных VARIANT (6 параметров для одного условия, можно для одного и того же столбца, можно для разных). Количество условий не ограничено. Условия можно создать из списка, можно создать двухмерный массив и заполнить, можно забрать сразу с листа Excel.
3. array_out_index - режим вывода: 0- отфильтрованный массив, 1-массив индексов
4. array_out - массив результатов


Новые инструменты для массива (начиная с BedvitCOM.dll_v2.0.2.0, BedvitXLL.dll_v3.2.2.0)
Для массивов любого количества размерностей, тип данных VARIANT.
Преобразование происходит "на месте" (штатным инструментом от Microsoft VariantChangeType, CharUpperW, CharLowerW)
Для всех элементов массива, для которых возможны преобразования:
3.19 ArrayCharLowerV() - преобразовать все символы строки в нижний регистр
Кликните здесь для просмотра всего текста
Параметры метода:
1.array_in_out - массив, который нужно преобразовать (на месте)

3.20 ArrayCharUpperV() - преобразовать все символы строки в ВЕРХНИЙ регистр
Кликните здесь для просмотра всего текста
Параметры метода:
1.array_in_out - массив, который нужно преобразовать (на месте)

3.21 ArrayNumToCharV() - преобразовать все данные в тип: String
Кликните здесь для просмотра всего текста
Параметры метода:
1.array_in_out - массив, который нужно преобразовать (на месте)

3.22 ArrayCharToNumV() - преобразовать все данные в тип: Double (числа сохраненные как текст)
Кликните здесь для просмотра всего текста
Параметры метода:
1.array_in_out - массив, который нужно преобразовать (на месте)




4. Класс UnorderedMap - ассоциативный контейнер, содержащий пары ключ-значение с уникальными ключами. Поиск, вставка и удаление элементов имеют среднюю постоянную сложность.



2.BedvitXLL (библиотека XLL c C API Functions для Excel)

версия библиотеки XLL - 1.0.0.0
Добавлены функции
02/02/2021 - новая версия библиотеки XLL - 2.0.0.0
Добавлена вкладка команд.
16/04/2022 - новая версия библиотеки XLL - 3.0.0.0
Добавлен функционал работы с VBA-кодом (хранение, выполнение, шифрование). + Новый формат файла пользовательских сохранений (не совместим со старым).

Область применения - Excel 2010 (х32, х64) и выше, VBA
Устанавливается так же, как и "обычная" надстройка Excel (xla, xlam) в папку надстроек или просто открывается как файл.
Содержит библиотеку BedvitCOM, распаковывает (в пользовательский "TEMP") и регистрирует автоматом COM при открытии XLL, и автоматически удаляет COM из реестра при закрытии XLL.
т.е. пользователю НЕ нужно ничего самостоятельно регистрировать, нужно только открыть XLL - всё, можно работать в Excel с новыми функциями и COM-объектами из библиотеки COM в VBA (как с ранним, так и с поздним связыванием).

Примеры использования:
Кликните здесь для просмотра всего текста

Начиная с версии xll v1.0.3.0 рекомендуется использовать раннее связывание, т.к. теперь библиотека сама подключает COM в References и пользователю не нужно писать доп код или подключать вручную COM.

Раннее связывание, версия xll v1.0.3.0 и выше.
Visual Basic
1
2
3
Sub Help()
Dim bCOM As New BedvitCOM.BignumArithmeticFloat: bCOM.Help
End Sub
Позднее связывание (одной строкой)
Visual Basic
1
2
3
Sub Help()
CreateObject("BedvitCOM.BignumArithmeticFloat").Help
End Sub
Раннее связывание (версии xll до v1.0.3.0) вариант 1 (подключаем СОМ в коде)
Visual Basic
1
2
3
4
5
6
7
8
9
Sub RUN_Help() 'подключаем СОМ в References, для раннего связывания
On Error Resume Next: ThisWorkbook.VBProject.References.AddFromGuid "{77D79CA3-15A0-4310-B8D8-0BCBE3F72D96}", 1, 0
Help
ThisWorkbook.VBProject.References.Remove ThisWorkbook.VBProject.References("BedvitCOM") 'отключаем библу в References
End Sub
 
Sub Help()
Dim bCOM As New BedvitCOM.BignumArithmeticFloat: bCOM.Help
End Sub
Раннее связывание (версии xll до v1.0.3.0) вариант 2 (подключаем СОМ при открытии книги)
Visual Basic
1
2
3
Sub Help()
Dim bCOM As New BedvitCOM.BignumArithmeticFloat: bCOM.Help
End Sub
а в модуль книги
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
    On Error Resume Next: ThisWorkbook.VBProject.References.AddFromGuid "{77D79CA3-15A0-4310-B8D8-0BCBE3F72D96}", 1, 0 ' подключаем библу "BedvitCOM" в References - version(1.0) для раннего связывания (если библа уже подключена - On Error Resume Next)
End Sub
 
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    On Error Resume Next: ThisWorkbook.VBProject.References.Remove ThisWorkbook.VBProject.References("BedvitCOM") 'отключаем библу в References
End Sub
 
Private Sub Workbook_Open()
    On Error Resume Next: ThisWorkbook.VBProject.References.AddFromGuid "{77D79CA3-15A0-4310-B8D8-0BCBE3F72D96}", 1, 0 ' подключаем библу "BedvitCOM" в References - version(1.0) для раннего связывания (если библа уже подключена - On Error Resume Next)
End Sub



+Новые категории Функций в Excel:
1.XLLBignumArithmeticInteger - функции для работы с длинными целыми числами.
Функции:
1.1 SumInteger() - сложение двух длинных/обычных целых чисел
1.2 SubtractInteger() - вычитание двух длинных/обычных целых чисел
1.3 MultiplyInteger() - умножение двух длинных/обычных целых чисел
1.4 DivideInteger() - деление двух длинных/обычных целых чисел - Неполное частное
1.5 ModInteger() - деление двух длинных/обычных целых чисел - Остаток от деления
1.6 PowerInteger() - возведение в степень длинного/обычного целого числа
1.7 ConvertBaseInteger() - конвертирование целого числа (строки) из одной базы в другую (от 2 до 36).
1.8 FactorialInteger() - факториал задаваемого числа.

2.XLLBignumArithmeticFloat - функции для работы с длинными дробными числами.
Функции:
2.1 SumFloat() - сложение двух длинных/обычных чисел с плавающей точкой
2.2 SubtractFloat() - вычитание двух длинных/обычных чисел с плавающей точкой
2.3 MultiplyFloat() - умножение двух длинных/обычных чисел с плавающей точкой
2.4 DivideFloat() - деление двух длинных/обычных чисел с плавающей точкой
2.5 PowerFloat() - возведение в степень длинного/обычного числа
2.6 RootFloat() - извлечение квадратного корня из длинного/обычного числа

3.XLL - функции не попавшие в другие категории данной библиотеки, с разнообразным функционалом.
Функции:
3.1 FilterUnicodeChar() - получить/удалить любые символы Unicode из строки.
Кликните здесь для просмотра всего текста
Параметры функции:
1. StringIn - входящая строка
2. Второй параметр (EnableChar) - символы включаемые в итоговую строку (через "-" указывается диапазон, сам "-" выводится/удаляется если его поставить первым символом в шаблоне)
3. Третий параметр (DisableChar) - символы исключаемые из итоговой строки (через "-" указывается диапазон).

Последние два параметра - не обязательные. Можно задавать любой из них, можно все два, можно никакой - тогда выводится первоначальная строка

3.2 TrimXLL() - удаляет из текста все пробелы, за исключением одиночных пробелов между словами.
Кликните здесь для просмотра всего текста
Параметры функции:
1.StringIn - входящая строка
2.StringOut - результирующая строка

3.2 VlookupXLL() - это смесь ВПР() и ПРОСМОТР(). Подробное описание
Кликните здесь для просмотра всего текста
Параметры функции:
1.ArrayFind - массив для поиска
2.Find- значение, которое ищем
3.ArrayResult - значение во втором массиве, соответствующее найденному значению в первом массиве.

3.3 GetRowsCountCSVansi() - возвращает кол-во строк в файле

3.4 GetRowCSVansi() - возвращает найденную строку по индексу

3.5 FindRowsInCSVansi() - возвращает найденную строку/строки по искомой подстроке

3.6 QRcodePrint() - Печать QR-кода

3.7 TextJoinXLL() - объединяет текст из нескольких строк, вставляя между текстовыми значениями указанные разделитель(и) - можно задать массив разделителей. Введенные числа будут считаться текстом. Аналог ОБЪЕДИНИТЬ (TEXTJOIN) - начиная с v2.0.1.7
Если объединенная строка содержит свыше 32767 символов (ограничение для ячейки), функция вернет ошибку #ЧИСЛО!.
Кликните здесь для просмотра всего текста
Параметры функции:
1.Range - массив/диапазон строк
2.Delimiter - строка-разделитель (опционально = "")
3.IgnoreEmpty - игнорировать пустые ячейки в Range (опционально = 0 - не игнорировать)


+Команды меню (начиная с v2.0.0.0)

+ Help: Содержание + Лог текущей версии библиотеки.
+ Открыть (сохраненные настройки)
+ Сохранить в файл (текущие настройки)
+ Влияющие ячейки (на выделенный диапазон)
+ Зависимые ячейки (от выделенного диапазона)
+ Работа с Форматами ячеек (задать, сохранить, выбрать сохраненный и т.д.)
+ Конвертировать число сохраненное как текст в число (с удалением пробелов, мягких переносов, непечатаемых символов между цифрами) - реализовано v2.0.1.7
+ Разорвать связи на текущем листе с другими ЛИСТАМИ этой книги и внешними файлами
+ Транспонирование на месте
+ Работа с именами (показать скрытые, удалить ошибочные, удалить все),в т.ч. скрытые, не отображаемые в диспетчере имён
+ Перевести условное форматирование в обычный формат ячейки в выделенном диапазоне или на всем листе - реализовано v3.0.0.0
+ Подбор слагаемых под нужную сумму
+ Выделить разным цветом группы дубликатов в выделенном диапазоне или на всем листе с выводом статистики - реализовано v2.0.2.4
+ Быстрый поиск значений на листе
+ Вывести на новый лист список всех листов текущей книги (с гиперссылкой)
+ Вывести на новый лист список всех ячеек текущей книги, содержащих ошибку (с гиперссылкой) - реализовано v2.0.2.4
+ Вывести на новый лист список всех внешних связей или ячеек текущей книги, содержащих ссылку на другую книгу(с гиперссылкой) - реализовано v3.0.0.0
+ Удалить пустые строки и столбцы в данных на листе
+ А,R - Стиль ссылок: А1, R1C1
+ Блок работы с VBA-кодом (хранение, выполнение, просмотр по паролю и т.д.)
+ BedvitCOM: ON/OFF - Автоматическое подключение библиотеки BedvitCOM в References (VBA)
+ XLL Язык меню: RU, EN (сейчас поддерживается только RU)
+ XLL Диалог: пользовательский диалог пои выполнении команд: ON-включен, OFF- выключен.
+ XLL API: возможность использования команд XLL в VBA, с задавливаемыми параметрами(
первый параметр для каждой команды - API диалога: "0"-Запрос пользователю, "1"-Да, "2"-Нет, "3"-Отмена.
Задаётся отдельно для каждого диалога, т.е. строка "0123" задаёт 4 параметра: "Запрос пользователю", "Да", "Нет", "Отмена" на 4 последовательных диалога)




Версии библиотек можно посмотреть в имени архива или свойствах файла.
В XLL эти свойства скрыты, нужно временно сменить расширение файла на DLL, см. рис. ниже.

Миниатюры
Нажмите на изображение для увеличения
Название: BedvitCOM_FilterUnicodeChar.PNG
Просмотров: 533
Размер:	50.1 Кб
ID:	5495   Нажмите на изображение для увеличения
Название: BedvitXLL_FilterUnicodeChar.PNG
Просмотров: 520
Размер:	28.3 Кб
ID:	5496   Нажмите на изображение для увеличения
Название: BedvitXLL_КатегорииNew.PNG
Просмотров: 461
Размер:	23.6 Кб
ID:	5499  

Нажмите на изображение для увеличения
Название: BedvitXLL-factorial.PNG
Просмотров: 347
Размер:	18.1 Кб
ID:	5649   Нажмите на изображение для увеличения
Название: BedvitCOM_References.PNG
Просмотров: 251
Размер:	90.0 Кб
ID:	6445   Нажмите на изображение для увеличения
Название: RibbonXLL2.PNG
Просмотров: 175
Размер:	69.2 Кб
ID:	6780  

Нажмите на изображение для увеличения
Название: XLLMenu.PNG
Просмотров: 1959
Размер:	55.3 Кб
ID:	7477   Нажмите на изображение для увеличения
Название: bedvit_ver.PNG
Просмотров: 999
Размер:	31.0 Кб
ID:	7478  
Изображения
  
Размещено в Без категории
Показов 35686 Комментарии 18
Всего комментариев 18
Комментарии
  1. Старый комментарий
    Аватар для SoftIce
    Слишком много Bedvit-ов. Они ничем не полезны для пользователя, только имена функций удлиняют.
    Скромнее надо быть.
    Запись от SoftIce размещена 07.08.2019 в 07:56 SoftIce вне форума
  2. Старый комментарий
    Аватар для Usaga
    Это неизбежная Bedvit-плата за использование Bedvit-библиотеки и написание Bedvit-кода для решения Bedvit-задач, Bedvit их побери.
    Запись от Usaga размещена 07.08.2019 в 09:18 Usaga на форуме
  3. Старый комментарий
    Аватар для bedvit
    SoftIce назовите хотя бы одну функцию с Bedvit. Библиотеки да, категории, что бы не перепутать со стандартными в Excel то же да (т.к. они относятся к данной библиотеки, поэтому и начинаются с названия библиотеки), функции и методы не одного.
    Возможно название категорий можно сменить, и сделать без названия библиотеки. Чисто теоретически, они могут совпасть с другими подгружаемыми библиотеками. Зато не будет везде Bedvit-ов!
    Ну а вообще, я рад что вы зашли в мой блог!
    Что еще плохо?
    Запись от bedvit размещена 07.08.2019 в 09:44 bedvit вне форума
  4. Старый комментарий
    Аватар для bedvit
    Поправил текст, теперь еще меньше bedvit-ов. Готов послушать замечания по существу.
    Запись от bedvit размещена 07.08.2019 в 09:48 bedvit вне форума
  5. Старый комментарий
    Аватар для bedvit
    Добавил два последних изображения с названиями категорий, с упоминанием названия библиотеки и без упоминания. Мнения?
    Запись от bedvit размещена 07.08.2019 в 11:09 bedvit вне форума
  6. Старый комментарий
    Аватар для bedvit
    Версия 1.0.0.6 - исправлена ошибка в функции FilterUnicodeChar в СОМ.DLL, скорректированы наименования категорий.
    Оставил "bedvit" только в наименовании библиотеки (удалил из категорий функций Excel). А так как, мало кто пишет XLL, думаю других похожих категорий не будет (конкурентов по наименованию).
    Запись от bedvit размещена 07.08.2019 в 12:55 bedvit вне форума
    Обновил(-а) bedvit 07.08.2019 в 13:01
  7. Старый комментарий
    Аватар для bedvit
    Д21/08/2019 - v 1.0.0.9
    1. InStr - на 2% быстрее предыдущей
    2. Replace - найдена ошибка, исправлена.
    Теперь быстрее на 1,5% замена символов и быстрее на 100% - если нет совпадений (в два раза).
    Добавлена проверка на переполнение BSTR-строки: E_OUTOFMEMORY
    Производительность функции - 1 млр. замен - 12,5 сек.
    Visual Basic
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    
    Option Explicit
    Sub RUN() 'для раннего связывания
    'Подключаем библу "BedvitCOM" в References - version(1.0) для раннего связывания (если библа уже подключена - On Error Resume Next)
    'Для раннего связывания сначала включаем в References библу, потом в конце кода отключаем. Для позднего связывания этого не нужно (см.ниже).
    'Если BedvitCOM не оключать, могут быть ошибки в этом файле при отсутствии зарегестрированной BedvitCOM - выслали кому-то файл, или открыли из другого ПК и т.д., где не установлеена или не открыта надстройка BedvitXLL (которая автоматом распаковывает и регистрирует библиотеку BedvitCOM в реестре) или не зарегистрированна BedvitCOM вручную
    'References хранятся в файле
    On Error Resume Next
    ThisWorkbook.VBProject.References.AddFromGuid "{77D79CA3-15A0-4310-B8D8-0BCBE3F72D96}", 1, 0 ' подключаем библу "BedvitCOM" в References - version(1.0) для раннего связывания (если библа уже подключена - On Error Resume Next)
    Test
    ThisWorkbook.VBProject.References.Remove ThisWorkbook.VBProject.References("BedvitCOM") 'оключаем библу в References
    End Sub
      
    Sub Test()
    Dim s As String, x, t, s1, s2, s3
    Dim bVBA As BedvitCOM.VBA: Set bVBA = New BedvitCOM.VBA 'раннее связывание
    'Dim bVBA As Object: Set bVBA = CreateObject("BedvitCOM.VBA") 'позднее связывание
      
    s = String$(1000000000, "1")
    s1 = "1"
    s2 = "2"
      
    t = Timer
    For x = 1 To 1
    s3 = bVBA.Replace(s, s1, s2)
    Next
    Debug.Print "bVBA.Replace "; Timer - t, "size"; Len(s3)
      
    End Sub
    Запись от bedvit размещена 21.08.2019 в 18:58 bedvit вне форума
    Обновил(-а) bedvit 21.08.2019 в 19:45
  8. Старый комментарий
    Аватар для bedvit
    26/08/2019 - v 1.0.1.0
    Добавлен метод "ArraySortV" - быстрая сортировка данных (Variant) в одномерном/двухмерном массиве.
    Существующий метод "ArraySort" переименован в "ArraySortS" - сортировка данных (String) в одномерном/двухмерном массиве.
    Запись от bedvit размещена 26.08.2019 в 23:34 bedvit вне форума
    Обновил(-а) bedvit 26.08.2019 в 23:54
  9. Старый комментарий
    Аватар для bedvit
    02/09/2019 - v 1.0.1.5
    Добавлен метод Transpose - быстрое транспонирование (на месте) двухмерного массива (поддерживаются все типы данных).
    Запись от bedvit размещена 04.09.2019 в 10:35 bedvit вне форума
  10. Старый комментарий
    Аватар для bedvit
    12/12/2019 - v 1.0.2.0
    Добавлены функции в блок: XLLBignumArithmeticInteger и в блок XLL
    Запись от bedvit размещена 12.12.2019 в 18:50 bedvit вне форума
  11. Старый комментарий
    По сведениям полученным из осведомлённых источников ядро новой bedvitOS будет использовать новый тип логики от Баженова.
    Запись от untyped размещена 12.12.2019 в 20:06 untyped вне форума
  12. Старый комментарий
    Аватар для bedvit
    Спасибо тебе, добрый человек, за инфо.
    Баженов на запросы не отвечает, что ему несвойственно, посему не будет bedvitOS с нескучными обоями, bedvit-плеера и bedvit-антивируса. Извините, кто ж знал, что так получится.
    Запись от bedvit размещена 13.12.2019 в 09:42 bedvit вне форума
  13. Старый комментарий
    Аватар для SoftIce
    bedvit-ствую всех! К меня bedvit-вопрос. А кому-то это bedvit-ство вообще нужно ?

    bedvit за внимание.
    Запись от SoftIce размещена 13.12.2019 в 11:26 SoftIce вне форума
  14. Старый комментарий
    Аватар для bedvit
    SoftIce, нужно что?
    1.Если последние комментарии - да, ни о чем, так вода. Не знаю зачем они здесь. Кому они полезны в таком виде.
    2.Если по названию библиотек, тренировался, назвал по нику - вот и все, без претензий на оригинальность и избранность. Было удобно идентифицировать на форуме (не только этом), откуда/чья библиотека.
    3.Если по функционалу - опять же попилил (может и поговокодил, не мне судить) в целях профилактики застойных явлений в ГМ.
    Сама длинная арифметика узкоспециализированное решение, нужное узкому кругу спецов - это понятно и данное решение революцию не предполагает.
    А суть в том, что можно же в данный механизм реализовать любой нужный функционал (кроме GUI), который можно использовать в Excel или в продуктах поддерживающих СОМ.
    Нужно ли это - вопрос.
    Готов послушать вашу точку зрения.
    Запись от bedvit размещена 13.12.2019 в 12:21 bedvit вне форума
  15. Старый комментарий
    Аватар для bedvit
    21/08/2020 XLL версия v1.0.3.0
    Начиная с версии xll v1.0.3.0 рекомендуется использовать раннее связывание, т.к. теперь библиотека сама подключает COM в References и пользователю не нужно писать доп. код или подключать вручную COM.
    Преимуществом раннего связывания в VBA является то, что видны все методы и свойства объектов, возможность их выбора из выпадающего списка, полное описание всех свойств и методов библиотеки в обозревателе объектов (F2), а также скорость кода.
    Подключение осуществляется в открытой книге, в файле не сохраняется (не возникает ошибки подключения на другом ПК, где нет XLL).
    Запись от bedvit размещена 21.08.2020 в 13:04 bedvit вне форума
    Обновил(-а) bedvit 21.08.2020 в 13:06
  16. Старый комментарий
    Аватар для bedvit
    Обнаружена интересная особенность: событиями Excel делится сначала с VBA, потом с С++ (с DLL).
    Из этого вытекает следующее:
    1. Код VBA всегда будет опережать по событиям код из XLL.
    2. Это нужно учитывать в своих проектах при использовании DLL.

    В частности, в моем случае, при обработки 3х событий в VBA - открытия книги, создания новой или после сохранения книги, автоматическое подключения библиотеки СОМ в References (в для раннего связывания) будет происходить после кода VBA.

    Решением в данном случае (для VBA, который будет использовать одновременно и эти 3-и события и функционал XLL и раннее связывание) может быть следующее:
    1.(предпочтительный) Дать секунду времени для загрузки xll (для авто-подключения COM), к примеру так
    Visual Basic
    1
    
    Application.OnTime TimeValue(Now + TimeValue("0:00:01")), "Ваш_Макрос"
    2. Ручное подключение COM в References (при выключенной XLL). Такие подключения XLL не трогает и они сохраняются вместе с файлом под вашу ответственность (условия: СОМ должна быть уже зарегистрирована)
    3. Использовать при таких событиях позднее связывание вместо раннего (условия: СОМ должна быть уже зарегистрирована)
    4. Опередить XLL и самостоятельно подключить COM для раннего связывания - кодом
    Visual Basic
    1
    
    ThisWorkbook.VBProject.References.AddFromGuid "{77D79CA3-15A0-4310-B8D8-0BCBE3F72D96}", 1, 0 ' подключаем COM в References"
    (это подключение останется с файлом, как в 1-м варианте)
    Если не хотим сохранять подключение, можно кодом отключить
    Visual Basic
    1
    
    ThisWorkbook.VBProject.References.Remove ThisWorkbook.VBProject.References("BedvitCOM") 'отключаем СОМ в References
    (см. примеры использования в основной теме под спойлером)
    (условия: СОМ должна быть уже зарегистрирована)

    Лично, пользуюсь 1-м вариантом - самым простым и универсальным (для остальных решений есть определенные условия их применения, см.условия).
    Запись от bedvit размещена 26.08.2020 в 19:04 bedvit вне форума
    Обновил(-а) bedvit 21.10.2020 в 11:35
  17. Старый комментарий
    Аватар для bedvit
    02/02/2021 - новая версия библиотеки XLL - 2.0.0.0
    Большое обновление.
    Добавлена вкладка команд и контекстное меню.
    Добавлен набор команд (описание на сайте)

    Куплен хостинг (потренируюсь в HTML и JavaScript), если будет время оформлю там видео-описание по функционалу библиотек.
    Запись от bedvit размещена 05.02.2021 в 17:36 bedvit вне форума
    Обновил(-а) bedvit 05.02.2021 в 17:39
  18. Старый комментарий
    Аватар для bedvit
    13/06/2022 - BedvitXLL v.3.0.0.0-v.3.2.0.0
    + Новые команды меню (см. описание в теме)
    + Настраиваемое меню - теперь меню пользователь может настраивать под себя. Настройки хранятся. Можно ими делится, см. ниже.
    + Новый формат файла пользовательских настроек + всех сохранений пользователя.
    + Блок работы с VBA-кодом (хранение, выполнение, просмотр по паролю и т.д.)
    + Новый установщик (для ленивых). Надстройку можно самому поместить в папку надстроек или просто открыть как файл Excel.
    Запись от bedvit размещена 23.06.2022 в 20:43 bedvit вне форума
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru