Форум программистов, компьютерный форум, киберфорум
bedvit
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

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

Запись от bedvit размещена 06.08.2019 в 18:48
Показов 52316 Комментарии 20
Метки c, c++, com, excel, си

Решил объединить все проекты по данной тематике в одно решение.
Скачать новые версии библиотек 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 - входящая строка

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 - ассоциативный контейнер, содержащий пары ключ-значение с уникальными ключами. Поиск, вставка и удаление элементов имеют среднюю постоянную сложность.



...НОВЫЕ ФУНКЦИИ СМОТРИ В РАЗДЕЛЕ "Новости" И В "WIKI"




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 (как с ранним, так и с поздним связыванием).
Upd: 18.12.2022. Начиная с версии 4.4 библиотека СОМ выгружается в ту же папку, из которой запускается надстройка XLL. Для автоматического подключения пользователю нужно разово нажать кнопку подключения СОМ


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

Начиная с версии 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 - не игнорировать)




...НОВЫЕ ФУНКЦИИ СМОТРИ В РАЗДЕЛЕ "Новости" И В "WIKI"



+Команды меню (начиная с 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-кодом (хранение, выполнение, просмотр по паролю и т.д.)
+ Блок работы с хранением и шифрованием диапазонов (формул, значений) листа Excel
+ BedvitCOM: ON/OFF/R - Режимы автоматического подключение библиотеки BedvitCOM в References (VBA) и реестре Windows
+ XLL Язык меню: RU, EN (сейчас поддерживается только RU)
+ XLL Диалог: - режим диалога, см. Диалог
+ XLL API: возможность использования команд XLL в VBA, с задавливаемыми параметрами(
первый параметр для каждой команды - API диалога: "0"-Запрос пользователю, "1"-Да, "2"-Нет, "3"-Отмена.
Задаётся отдельно для каждого диалога, т.е. строка "0123" задаёт 4 параметра: "Запрос пользователю", "Да", "Нет", "Отмена" на 4 последовательных диалога)



...НОВЫЕ КОМАНДЫ МЕНЮ СМОТРИ В РАЗДЕЛЕ "Новости" И В "WIKI"



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

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

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

Нажмите на изображение для увеличения
Название: XLLMenu.PNG
Просмотров: 10705
Размер:	55.3 Кб
ID:	7477   Нажмите на изображение для увеличения
Название: bedvit_ver.PNG
Просмотров: 5501
Размер:	31.0 Кб
ID:	7478  
Изображения
  
Метки c, c++, com, excel, си
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 20
Комментарии
  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 вне форума
  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 вне форума
  8. Старый комментарий
    Аватар для bedvit
    26/08/2019 - v 1.0.1.0
    Добавлен метод "ArraySortV" - быстрая сортировка данных (Variant) в одномерном/двухмерном массиве.
    Существующий метод "ArraySort" переименован в "ArraySortS" - сортировка данных (String) в одномерном/двухмерном массиве.
    Запись от bedvit размещена 26.08.2019 в 23:34 bedvit вне форума
  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 вне форума
  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 вне форума
  17. Старый комментарий
    Аватар для bedvit
    02/02/2021 - новая версия библиотеки XLL - 2.0.0.0
    Большое обновление.
    Добавлена вкладка команд и контекстное меню.
    Добавлен набор команд (описание на сайте)

    Куплен хостинг (потренируюсь в HTML и JavaScript), если будет время оформлю там видео-описание по функционалу библиотек.
    Запись от bedvit размещена 05.02.2021 в 17:36 bedvit вне форума
  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 вне форума
  19. Старый комментарий
    Спасибо большое! Топовая библа и близко не имеющая аналогов!
    Тестирую новый функционал…
    Запись от Jack Famous размещена 20.12.2022 в 17:38 Jack Famous вне форума
  20. Старый комментарий
    del
    Запись от Jack Famous размещена 20.12.2022 в 17:38 Jack Famous вне форума
 
Новые блоги и статьи
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru