Wiki

Обновлено:

07.05.2024

 

 

 

 

Раздел:

Версия COM/XLL

id

Свойста/Методы класса, Функции, Команды меню

COM: BignumArithmeticInteger

4.0

1

Help

HTML Справка (без параметров). Открывает html-страницу с описанием свойств и методов класса.

void Help()

COM: BignumArithmeticInteger

4.0

2

Bignum

Принимает и возвращает BSTR строку StringBSTR (задает число или возвращает значение).

BSTR Bignum(LONG Bignum, LONG BignumBase=10) = BSTR 
Bignum-индекс длинного числа в массиве. 
BignumBase-база длинного числа (от 2 до 62), по умолчанию = 10.

COM: BignumArithmeticInteger

4.0

3

Sign

Возвращает знак длинного числа

LONG Sign(LONG Bignum)

Возвращает 1 если Bignum > 0, 0 если Bignum = 0, и -1 если Bignum < 0.

COM: BignumArithmeticInteger

4.0

4

Even

Определяет, является ли Bignum четное или нечетное.

LONG Even(BYTE Bignum)

Возвращает 1 если Bignum четное, 0 если Bignum нечетное.

COM: BignumArithmeticInteger

4.0

5

Compare

Сравнивает два длинных числа.

LONG Compare(LONG Bignum1, LONG Bignum2)

Возвращает 1 если Bignum1 Bignum2, 0 если Bignum1 Bignum2, и -1 если Bignum1 Bignum2.

COM: BignumArithmeticInteger

4.0

6

BignumSet

Задает число с параметрами аналогичными методу Bignum().

BignumSet
(LONG Bignum, BSTR StringBSTR, LONG BignumBase=10)

COM: BignumArithmeticInteger

4.0

7

Sum

Суммирует два длинных числа.

Sum(BYTE BignumSet, BYTE Bignum1, BYTE Bignum2); 
BignumSet = Bignum1 + Bignum2

COM: BignumArithmeticInteger

4.0

8

SumL

Суммирует длинное число с обычным.

SumL(BYTE BignumSet, BYTE Bignum1, LONG_PTR LONG_PTR); 
BignumSet = Bignum1 + LONG_PTR(
х64:LONG_PTR= LONGLONG, х32:LONG_PTR= LONG)

COM: BignumArithmeticInteger

4.0

9

Abs

Возвращает модуль числа

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

COM: BignumArithmeticInteger

4.0

10

Negate

Задает значение с противоположным знаком

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

COM: BignumArithmeticInteger

4.0

11

Subtract

Вычитает из одного длинного числа другое

Subtract
(BYTE BignumSet, BYTE Bignum1, BYTE Bignum2); 
BignumSet = Bignum1 - Bignum2

COM: BignumArithmeticInteger

4.0

12

SubtractL

Вычитает из длинного числа обычное.

SubtractL(BYTE BignumSet, BYTE Bignum1, LONG_PTR LONG_PTR); 
BignumSet = Bignum1 - LONG_PTR.

COM: BignumArithmeticInteger

4.0

13

Multiply

Умножает одно длинное число на другое. 

Multiply(BYTE BignumSet, BYTE Bignum1, BYTE Bignum2); 
BignumSet = Bignum1 * Bignum2.

COM: BignumArithmeticInteger

4.0

14

MultiplyL

Умножает длинное число на обычное. 

MultiplyL(BYTE BignumSet, BYTE Bignum1, LONG_PTR LONG_PTR); 
BignumSet = Bignum1 * LONG_PTR.

COM: BignumArithmeticInteger

4.0

15

Divide

Делит одно длинное число на другое

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

COM: BignumArithmeticInteger

4.0

16

DivideL

Делит длинное число на обычное.

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

COM: BignumArithmeticInteger

4.0

17

Power

Возводит в степень длинное число.

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

COM: BignumArithmeticInteger

4.0

18

Clone

Копирует одно длинное число в другое.

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

COM: BignumArithmeticInteger

4.0

19

RootRem

Извлекает корень длинного числа

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

COM: BignumArithmeticInteger

4.0

20

Factorial

Возвращает факториал для длинного числа

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

COM: BignumArithmeticInteger

4.0

21

Fibonacci

Возвращает в число Фибоначи для длинного числа

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

COM: BignumArithmeticInteger

4.0

22

LucNum

Возвращает число Лукоса для длинного числа

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

COM: BignumArithmeticInteger

4.0

23

FileSet
 
Загружает длинное число из файла (*.txt)

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

COM: BignumArithmeticInteger

4.0

24

FileGet

Сохраняет длинное число в файл (*.txt)

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

COM: BignumArithmeticInteger

4.0

25

Clear

Освобождает память занятую длинным числом

Clear
(LONG Bignum=-1);
Освобождает память занятую длинным числом Bignum, или освобождает память занятую всеми числами при заданном параметре по умолчанию = -1.

COM: BignumArithmeticInteger

4.0

26

BignumArraySize

Возвращает количество чисел Bignum в созданном классе/массиве

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

COM: BignumArithmeticFloat

4.0

1

Help

HTML Справка (без параметров). Открывает html-страницу с описанием свойств и методов класса.

void Help()

COM: BignumArithmeticFloat

4.0

2

SizeBits

Задает и возвращает размер длинного числа.

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

COM: BignumArithmeticFloat

4.0

3

Bignum

Принимает и возвращает BSTR строку StringBSTR (задает число или возвращает значение).

BSTR* String = Bignum(BYTE Bignum, LONG BignumBase=10, LONG_PTR Precision=0, BSTR Separator=”.”, VARIANT_BOOL eNotationOFF=0) = BSTR* String; 
Принимает и возвращает BSTR* строку String (задает число или возвращает значение). 
Bignum-индекс длинного числа в массиве. 
BignumBase-база длинного числа (от 2 до 62), по умолчанию = 10. 
Precision – точность (кол-во значимых цифр в числе), по умолчанию = 0 - максимальная (равна заданному размеру в битах). 
Separator – символ разделителя целой и дробной частей числа, по умолчанию точка(“.”). 
eNotationOFF – по умолчанию =0 - экспоненциальная запись (Е-нотация), 1 – дробная по выбранному основанию.
Для Е-нотации с основанием от 2 до 62: в десятичном основании - символ 'e', в других 2 - 9,11 - 62 - символ '@'.
Мантисса выводится в указанном основании, экспонента всегда в десятичном формате.

COM: BignumArithmeticFloat

4.0

4

Sign

Возвращает знак длинного числа

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

COM: BignumArithmeticFloat

4.0

5

Compare

Сравнивает два длинных числа.

LONG Val = Compare(BYTE Bignum1, BYTE Bignum2); 
Возвращает 1 если Bignum1 > Bignum2, 0 если Bignum1 = Bignum2, и -1 если Bignum1 < Bignum2.

COM: BignumArithmeticFloat

4.0

6

SizeBitsSet

Метод. Задает размер длинного числа.

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

COM: BignumArithmeticFloat

4.0

7

BignumSet

Задает длинное число.

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

COM: BignumArithmeticFloat

4.0

8

Sum

Суммирует два длинных числа.

Sum(BYTE BignumSet, BYTE Bignum1, BYTE Bignum2);
BignumSet = Bignum1 + Bignum2

COM: BignumArithmeticFloat

4.0

9

SumL

Суммирует длинное число с обычным.

SumL(BYTE BignumSet, BYTE Bignum1, LONG_PTR LONG_PTR); 
BignumSet = Bignum1 + LONG_PTR(
х64:LONG_PTR= LONGLONG, х32:LONG_PTR= LONG)

COM: BignumArithmeticFloat

4.0

10

Abs

Возвращает модуль числа

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

COM: BignumArithmeticFloat

4.0

11

Subtract

Вычитает из одного длинного числа другое

Subtract
(BYTE BignumSet, BYTE Bignum1, BYTE Bignum2); 
BignumSet = Bignum1 - Bignum2

COM: BignumArithmeticFloat

4.0

12

SubtractL

Вычитает из длинного числа обычное.

SubtractL(BYTE BignumSet, BYTE Bignum1, LONG_PTR LONG_PTR); 
BignumSet = Bignum1 - LONG_PTR.

COM: BignumArithmeticFloat

4.0

13

Multiply

Умножает одно длинное число на другое. 

Multiply(BYTE BignumSet, BYTE Bignum1, BYTE Bignum2); 
BignumSet = Bignum1 * Bignum2.

COM: BignumArithmeticFloat

4.0

14

MultiplyL

Умножает длинное число на обычное. 

MultiplyL(BYTE BignumSet, BYTE Bignum1, LONG_PTR LONG_PTR); 
BignumSet = Bignum1 * LONG_PTR.

COM: BignumArithmeticFloat

4.0

15

Divide

Делит одно длинное число на другое

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

COM: BignumArithmeticFloat

4.0

16

DivideL

Делит длинное число на обычное.

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

COM: BignumArithmeticFloat

4.0

17

Root

Извлекает квадратный корень длинного числа

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

COM: BignumArithmeticFloat

4.0

18

Negate

Задает значение с противоположным знаком

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

COM: BignumArithmeticFloat

4.0

19

Power

Возводит в степень длинное число.

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

COM: BignumArithmeticFloat

4.0

20

Clone

Копирует одно длинное число в другое.

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

COM: BignumArithmeticFloat

4.0

21

FileSet

Загружает длинное число из файла (*.txt)

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

COM: BignumArithmeticFloat

4.0

22

FileGet

Сохраняет длинное число в файл (*.txt)

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

COM: BignumArithmeticFloat

4.0

23

Clear

Освобождает память занятую длинным числом

Clear
(LONG Bignum=-1);
Освобождает память занятую длинным числом Bignum, или освобождает память занятую всеми числами при заданном параметре по умолчанию = -1.

COM: BignumArithmeticFloat

4.0

24

BignumArraySize

Возвращает количество чисел Bignum в созданном классе/массиве

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

COM: BignumArithmeticFloat

4.0

25

GetToBignumInt

Преобразовать Bignum из Float в Integer.

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

COM: VBA

4.0

1

ArraySortS

Быстрая сортировка данных (String) в одномерном/двухмерном массиве

HRESULT ArraySortS([in, out] VARIANT* array_in_out, [in,defaultvalue(0)] VARIANT_BOOL sort_order, [in, defaultvalue(0)] LONG key_1, [in, defaultvalue(0)] LONG key_2, [in, defaultvalue(0)] LONG key_3, [in, defaultvalue(0)]  LONG sort_orientation,  [in, defaultvalue(0)]  VARIANT_BOOL delete_duplicates,[in, defaultvalue(0)]  VARIANT_BOOL out_array_index, [in, out, defaultvalue(0)] VARIANT* index_array_out);

Параметры метода:

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 (без изобретения костылей).

 

Пример тестирования и использования в VBA (элементарно через CreateObject("BedvitCOM.VBA")):

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

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

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

Sub Test_arr_sort()

'Dim bVBA As BedvitCOM.VBA: Set a = New BedvitCOM.VBA 'ранее связывание

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

Dim testSize As Long: testSize = 2000000

Dim arr_index, arrTmp, i As Long, J As Long, t

 

''''''''''''1х массив'''''''''''''''''''''''

Dim Arr1: ReDim Arr1(-5 To testSize) As String

Dim Arr2: ReDim Arr2(-5 To testSize, -2 To 3) As String

 

'arr(5) - NULL - проверка для сортировки пустых

Arr1(6) = 0

Arr1(7) = "Test_arr_sort"

For i = 8 To testSize

  Arr1(i) = Format$(Int(Rnd * testSize), "0000000") '30% дубликатов

Next

 

arrTmp = Arr1 '!

t = Timer

bVBA.ArraySortS arrTmp

Debug.Print "Простая сорт. 1х массива, по возрастанию (по умолч.): " & Timer - t & " сек."

 

arrTmp = Arr1 '!!

t = Timer

bVBA.ArraySortS arrTmp, 1, , , , , 1, 0, 0

Debug.Print "Простая сорт.по убыванию 1x массива с удалением" & ((UBound(arrTmp) - LBound(arrTmp)) / (testSize - LBound(arrTmp)) - 1) * 100 & "%: " & Timer - t & " сек."

 

'arrTmp = arr - начальный массив не меняется, поэтому темповый - не нужен '!

t = Timer

bVBA.ArraySortS Arr1, 1, , , , , , 1, arr_index

Debug.Print "Вывод индексов для 1х массива, сортировка по убыванию:" & Timer - t & " сек."

 

''''''''''''2х массив'''''''''''''''''''''''

'arr(5) - NULL - проверка для сортировки пустых

Arr2(6, 2) = 0

Arr2(7, 2) = "Test_arr_sort"

For i = 8 To testSize

    For J = -2 To 3

        Arr2(i, J) = Format$(Int(Rnd * testSize), "0000000") '30% дубликатов

    Next

Next

 

arrTmp = Arr2 '!

t = Timer

bVBA.ArraySortS arrTmp, 0, , , , 2, 0, 0, 0

Debug.Print "Сортировка всего 2х массива - вывод строка-столбец: " & Timer - t & " сек."

 

arrTmp = Arr2 '!

t = Timer

bVBA.ArraySortS arrTmp, 0, 5, , , 3, 0, 0, 0

Debug.Print "Сортировка всего 2х массива - вывод столбец-строка " & Timer - t & " сек."

 

arrTmp = Arr2 '!

t = Timer

bVBA.ArraySortS arrTmp

Debug.Print "Простая сортировка 2х массива: " & Timer - t & " сек."

 

arrTmp = Arr2 '!

t = Timer '!

bVBA.ArraySortS arrTmp, 0, 3, , , , , 1, arr_index

Debug.Print "Вывод индексов для 2х массива, по указанному столбцу: " & Timer - t & " сек."

 

arrTmp = Arr2 '!

t = Timer

bVBA.ArraySortS arrTmp, 0, 5, , , 1, 0, 0, 0

Debug.Print "Сортировка 2х массива по 5му столбцу: " & Timer - t & " сек."

 

arrTmp = Arr2 '!

t = Timer '!

bVBA.ArraySortS arrTmp, 0, 8, , , 1, , 1, arr_index

Debug.Print "Вывод индексов для 2х массива, по 8й строке: " & Timer - t & " сек."

 

arrTmp = Arr2 '!

t = Timer

bVBA.ArraySortS arrTmp, 0, 8, , , 1, 0, 0, 0

Debug.Print "Сортировка 2х массива по 8й строке: " & Timer - t & " сек."

 

arrTmp = Arr2 '!

t = Timer

bVBA.ArraySortS arrTmp, 0, 1, 2, 3, 0, , 1, arr_index

Debug.Print "Вывод индексов для 2х массива, по 1,2,3му столбцу: " & Timer - t & " сек."

 

arrTmp = Arr2 '!

t = Timer

bVBA.ArraySortS arrTmp, 0, 1, 2, 3, 0, 0, 0, 0

Debug.Print "Сортировка 2х массива по 1,2,3му столбцу: " & Timer - t & " сек."

 

arrTmp = Arr2 '!

t = Timer

bVBA.ArraySortS arrTmp, 0, 8, 9, 10, 1, 0, 1, arr_index

Debug.Print "Вывод индексов для 8,9,10й строке: " & Timer - t & " сек."

 

arrTmp = Arr2 '!

t = Timer

bVBA.ArraySortS arrTmp, 0, 8, 9, 10, 1, 0, 0, 0

Debug.Print "Сортировка 2х массива по 8,9,10й строке: " & Timer - t & " сек."

 

Set bVBA = Nothing

End Sub



Подробнее на форуме.

COM: VBA

4.0

2

FilterUnicodeChar

Получить/удалить любые символы
Unicode из строки. Регистрозависимая.

HRESULT FilterUnicodeChar([in] BSTR StringIn, [in,defaultvalue(L"")] BSTR EnableChar, [in, defaultvalue(L"")] BSTR DisableChar, [out, retval]BSTR* ResultOutRetval);

Параметры метода:

1. StringIn - входящая строка

2. Второй параметр (EnableChar) - символы включаемые в итоговую строку (через "-" указывается диапазон, сам "-" выводится если его поставить первым символом в шаблоне)

3. Третий параметр (DisableChar) - символы исключаемые из итоговой строки ( через "-" указывается диапазон, сам "-"тудаляется если его поставить первым символом в шаблоне) .

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

COM: VBA

4.0

3

LikeUnicodeChar

Сравнивает строку с маской/шаблоном (или наоборот исключая символы шаблона). Регистрозависимая
. (v1.0.5.0 и выше)

HRESULT LikeUnicodeChar([in] BSTR stringIn, [in] BSTR maskChar, [in, defaultvalue(0)] VARIANT_BOOL invertMask, [out, retval] VARIANT_BOOL* resultRetval);

Параметры метода:

1.stringIn - входящая строка

2.maskChar - маска/шаблон (через "-" указывается диапазон, сам "-" выводится/удаляется если его поставить первым символом в шаблоне)

3.invertMask - инвертировать маску (сравнение, исключая символы маски)

Возвращает булево.

COM: VBA

4.0

4

Trim

Удаляет из текста все пробелы, за исключением одиночных пробелов между словами.

HRESULT Trim([in] BSTR StringIn, [out, retval] BSTR* StringOutRetval);

Параметры метода:

1.StringIn - входящая строка

COM: VBA

4.0

5

InStr

Ищет первое вхождение подстроки в строку. Регистрозависимая
.

HRESULT InStr([in] BSTR StringIn, [in] BSTR StringFindin, [defaultvalue(1)] LONG Start, [out, retval] LONG* pValRetval);

Параметры метода:

1.StringIn - строка в которой производим поиск

2.StringFind - подстрока для поиска в StringIn

3.Start - позиция с которой начинаем поиск в строке

COM: VBA

4.0

6

Replace

Заменяет одну подстроку на другую. Параметр Start - не усекает строку, в отличии от стандартной Replace() в
VBA. Регистрозависимая.


HRESULT Replace([in] BSTR StringIn, [in] BSTR StringFind, [in] BSTR StringReplace, [in, defaultvalue(1)] LONG Start, [in, defaultvalue(0x7fffffff)] LONG Count, [out, retval] BSTR* StringOutRetval);

Параметры метода:

1.StringIn - строка в которой производим поиск

2.StringFind - подстрока для поиска и замены в StringIn

3.StringReplace - подстрока на которую заменяем StringFind

3.Start - позиция с которой начинаем поиск и замены подстрок в строке

4.Count - количество замен

COM: VBA

4.0

7

ArraySortV

Быстрая сортировка данных (
Variant) в одномерном/двухмерном массиве.

Использованы параллельные алгоритмы сортировки. (библиотеки PPL от Мicrosoft)

HRESULT ArraySortV([in, out] VARIANT* array_in_out, [in, defaultvalue(1)] LONG key_1, [in, defaultvalue(0)] VARIANT_BOOL sort_order1, [in, defaultvalue(0)] LONG key_2, [in, defaultvalue(0)] VARIANT_BOOL sort_order2, [in, defaultvalue(0)] LONG key_3, [in, defaultvalue(0)] VARIANT_BOOL sort_order3, [in, defaultvalue(L"")] BSTR key_and_sort_order_next, [in, defaultvalue(0)] LONG optionCompare);

Параметры метода:

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й - нельзя.

Начиная с версии 1.0.5.3

8.key_and_sort_order_next - дает возможность отсортировать любое количество полей с индивидуальным порядком сортировки для каждого. Задается текстовой строкой, в том же формате, как и первые 3 параметра ("номер столбца, порядок сортировки" - пример: "4, 0, 5, 0, ..."). Тестовый пример см. ниже.

 

Начиная с версии 1.0.5.3 сортировка по любому количеству полей с индивидуальным порядком сортировки для каждого.

Visual BasicВыделить код

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

Sub Test_arr_sort_10_key()

'Dim a As BedvitCOM.VBA: Set a = New BedvitCOM.VBA 'ранее связывание

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

Dim i, j, t, testSize As Long: testSize = 1000000

 

Dim ArrV: ReDim ArrV(0 To testSize, 0 To 9)

 

For i = 0 To testSize

    For j = 0 To 9

    ArrV(i, j) = CLng(Rnd * 2)

    Next

Next

 

t = Timer

bVBA.ArraySortV ArrV, 1, 0, 2, 0, 3, 0, "4, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0"

Debug.Print "Cортировка VARIANT 2х массива, по возрастанию по 10 ключам: " & Timer - t & " сек."

[a1:j1000000] = ArrV

 

End Sub

COM: VBA

4.0

8

Transpose

быстрое транспонирование (на месте) двухмерного массива (поддерживаются все типы данных).

HRESULT Transpose([in, out] VARIANT* array_in_out);

Параметры метода:

1.array_in_out - указатель на массив (ввод/вывод)

COM: VBA

4.0

9

QRcodePrint

Печать QR-кода в Excel, Word, 1С и проч. приложениях с поддержкой COM/ActiveX.

 

HRESULT QRcodePrint([in] BSTR QRcodeText, [in, defaultvalue(L"")] BSTR FileOut, [in, defaultvalue(4)] LONGLONG FormatImageOut, [in, defaultvalue(4)] LONGLONG SizePixel, [in, defaultvalue(0)] LONGLONG PixelColorR, [in, defaultvalue(0)] LONGLONG PixelColorG, [in, defaultvalue(0)] LONGLONG PixelColorB, [in, defaultvalue(0)] LONGLONG VersionSymbol, [in, defaultvalue(1)] LONGLONG LevelErrCorrect, [in, defaultvalue(4)] LONGLONG QuietZone, [out, retval] BSTR* StringOutRetval);

 

Параметры/Аргументы функции QRcodePrint :

1. QRcodeText - что печатаем, строка(обязательное).

2. FileOut - куда печатаем, полное имя файла - не обязательное, по умолчанию используется пользовательский "TEMP" + уникальное имя файла (GUID). Расширение теперь добавляется автоматически, если оно не указано. Если указан файл без папок - файл помещается в ту же папку, где располагается зарегистрированная библиотека.

3. FormatImageOut -  формат изображения (код в функции/формат):0 (bmp), 1 (jpeg), 2 (gif), 3 (tiff), 4 (png)-по умолчанию. (этот и остальные аргументы не обязательны)

4. SizePixel - размер пикселя (модуля), по умолчанию 4 (минимально рекомендуемый)

5. PixelColorR =0 цвет RGB если хотим цветную картинку (по умолчанию черный)

6. PixelColorG = 0

7. PixelColorB =0

8. VersionSymbol - версия QR кода (1-40) (по умолчанию = 0-выбор автоматом)

9. LevelErrCorrect - уровень коррекции ошибок (0-3, по умолчанию = 1  ~15%)

10. QuietZone - Размер в модулях зоны тишины (>=0, по умолчанию = 4).  Quiet zone — это область, отделяющая границу штрих-кода от фона и других изображений. Начиная с v1.0.4.8

11.При удаче, возвращается полное имя файла созданного изображения, при неудаче выводится ошибка и возвращается "Empty"

 

Функционал:

1. Сохранение изображения в форматы: bmp, jpeg, gif, tiff, png.

2. QR-кода сохраняется в монохромное изображение, где формат позволяет, т.е. до 1 бита на пиксель. В любом цвете RGB. К примеру размер .PNG 1140*1140 пикселей (1 бит на пиксель) - 2КБ.

3. Возможность задавать размер модуля (пикселя QR).

4. Возможность задавать цвет в RGB

5. Возможность задавать версию QR кода.

6. Возможность задавать уровень коррекции ошибок.

7. Возможность изменить толщину рамки - quiet zone (начиная с v1.0.4.8)

8. Емкость QR-кода составляет до 7000 цифр или 4000 символов

9. (Отдельно) Конвертации вышеперечисленных форматов из одного в другой

 

Добавил отдельный метод (ConvertFormatImage(), см.ниже в WIKI) для конвертации вышеперечисленных форматов из одного в другой, для случаев конвертации сторонних изображений.

 

Пример использования:
1. Excel
 - открываем или устанавливаем xll как надстройку нужной разрядности (Excel), пишем код:

Visual BasicВыделить код

1

2

3

4

5

6

7

8

9

10

11

12

13

Sub QR_Generate()

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

Dim File As String: File = "D:\QR.png"

Dim ConvertToFile As String: ConvertToFile = "D:\QR.tif"

Dim QRcodeText As String: QRcodeText = "https://www.cyberforum.ru/blogs/829006/blog6514.html"

 

'печать QR и вывести на лист Excel

If bVBA.QRcodePrint(QRcodeText, File) = 0 Then [a1].Select: ActiveSheet.Pictures.Insert (File) 'с аргументами по умолчанию

'If bVBA.QRcodePrint(QRcodeText, File, 4, 4, 255, 0, 0, 0, 1) = 0 Then [a1].Select: ActiveSheet.Pictures.Insert (File) 'с нужными аргументами

 

'Конвертировать формат изображения

bVBA.ConvertFormatImage File, ConvertToFile, 3 'формат (tiff), см. в описании

End Sub

В одну строку:

Visual BasicВыделить код

1

2

3

Sub QR_Generate()

If CreateObject("BedvitCOM.VBA").QRcodePrint("Здесь инфо для печати", "D:\QR.png") = 0 Then [a1].Select: ActiveSheet.Pictures.Insert ("D:\QR.png")

End Sub

2. 1C - регистрируем COM нужной разрядности (можно под пользователем), далее код (по аналогии с Excel)

COM: VBA

4.0

10

ConvertFormatImage

Конвертации форматов bmp, jpeg, gif, tiff, png из одного в другой.

HRESULT ConvertFormatImage([in] BSTR FileIn, [in] BSTR FileOut, [in] BYTE FormatImageOut);

Параметры/Аргументы метода ConvertFormatImage :

1. FileIn -  полное имя файла (обязательное).

2. FileOut -  полное имя файла (обязательное).

3. FormatImageOut - нужный формат (обязательное). Код в функции/формат:0 (bmp), 1 (jpeg), 2 (gif), 3 (tiff), 4 (png)

COM: VBA

4.0

11

GetRowsCountCSVansi

Возвращает кол-во строк в файле CSV.


HRESULT GetRowsCountCSVansi([in] BSTR FileIn, [in, defaultvalue(0)] LONG FileFlagNoBuffering, [out, retval] LONG* RowsCountOutRetval);

 

Beta-версия функции, тестирование и описание Подробнее на форуме.

COM: VBA

4.0

12

GetRowCSVansi

возвращает найденную строку в файле CSV по индексу.

HRESULT GetRowCSVansi([in] BSTR FileIn, [in]  LONG IndexString, [in, defaultvalue(0)] LONG FileFlagNoBuffering, [out, retval] BSTR* StringOutRetval);

 

Beta-версия функции, тестирование и описание Подробнее на форуме.

COM: VBA

4.0

13

FindRowsInCSVansi

Dозвращает найденную строку/строки в файле CSV по искомой подстроке.

HRESULT FindRowsInCSVansi([in] BSTR FileIn, [in] BSTR FindString, [in, defaultvalue(0)]  LONG MultiLine, [in, defaultvalue(0)] LONG FileFlagNoBuffering, [out, retval] BSTR* StringOutRetval);

 

Beta-версия функции, тестирование и описание Подробнее на форуме.

COM: VBA

4.0

14

SortDeleteDuplicateRowsCSVansi

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

HRESULT SortDeleteDuplicateRowsCSVansi([in] BSTR FileIn, [in] BSTR FileOut, [in, defaultvalue(0)]  LONG HeaderRowsCount, [in, defaultvalue(0)] LONG OnlySort, [in, defaultvalue(0)] LONG SortOrder, [in, defaultvalue(0)] LONG FileFlagNoBuffering, [in, defaultvalue(0)] LONG SetLocale, [in, defaultvalue(L"")] BSTR Locale, [out, retval] LONGLONG* RowsCountOutRetval);

 

Beta-версия функции, тестирование и описание Подробнее на форуме.

COM: VBA

4.0

15

SHAstrUTF8

Хеширование строки алгоритмами
SHA

Использованы исходники Crypto++

HRESULT SHAstrUTF8([in] BSTR stringIn, [in] LONG versionSHA, [in, defaultvalue(0)] VARIANT_BOOL charLower, [out, retval] BSTR* stringOutRetval);

Параметры функции:

1.stringIn- входящая строка

2.versionSHA- версия алгоритма SHA

3.charLower - вывод результата в нижнем регистре (опционально, по умолчанию FALSE)

 

 Поддержка следующих алгоритмов (+ новейшие SHA3) :

versionSHA = 1,        SHA1

versionSHA = 2224, SHA2_224

versionSHA = 2256, SHA2_256

versionSHA = 2384, SHA2_384

versionSHA = 2512, SHA2_512

versionSHA = 3224, SHA3_224

versionSHA = 3256, SHA3_256

versionSHA = 3384, SHA3_384

versionSHA = 3512, SHA3_512

 

Пример использования:

[VBA]

Sub SHA_1()

    Dim bCOM As New BedvitCOM.VBA

    Debug.Print bCOM.HashStringSHA("String", 1)   'VersionSHA = 1, SHA1

    End Sub

[/VBA]

COM: VBA

4.0

16

MDstrUTF8

Хеширование строки алгоритмами
MD

Использованы исходники Crypto++

HRESULT MDstrUTF8([in] BSTR stringIn, [in] LONG versionMD, [in, defaultvalue(0)] VARIANT_BOOL charLower, [out, retval] BSTR* stringOutRetval);

Параметры функции:

1.StringIn - входящая строка

2.versionMD- версия алгоритма MD

3.charLower - вывод результата в нижнем регистре (опционально, по умолчанию FALSE)

 

Поддержка следующих алгоритмов:

versionMD = 5,        MD5

 

COM: VBA

4.0

17

AESstrUTF8

Шифрование данных алгоритмами AES

Использованы исходники Crypto++

HRESULT AESstrUTF8([in] BSTR stringIn, [in] BSTR key, [in, defaultvalue(0)] VARIANT_BOOL decrypt, [in, defaultvalue(L"0")] VARIANT mode, [in, defaultvalue(L"")] BSTR initializationVectorIV, [in, defaultvalue(0) ]VARIANT_BOOL strFormatHex, [in, defaultvalue(0)]VARIANT_BOOL secureZeroMemoryKey, [out, retval] BSTR* stringOutRetval);

Параметры функции:

1.StringIn - входящая строка

2.key- ключ должен быть длинной 128, 256 bit (16, 32 Byte).

3.decrypt - decrypt/encrypt (true/false)

4.mode - Supporter mode : ECB, CBC, OFB, CFB, CBC-CTS, CTR (индексы см.ниже)

5.initializationVectorIV - an initialization vector (IV)

6.str_format_hex - вывод результата в формате Hex/Base64 (true/false)

7.secureZeroMemoryKey – безопасное зануление памяти для входящего ключа

 

Шифрование 128 или 256 bit зависит от длины ключа, который введет пользователь 16 или 32 символа (EN - 1 байт и RU - 2 байта на символ в utf-8 соответственно)
AESstrUTF8() - изменились индексы алгоритмов шифрования, теперь у всех функций по шифрованию 
одинаковые индексы для алгоритмов AES

 

Алгоритмы шифрования AES:

    1 - "Без шифрования"

    2 - "AES256:ECB"

    3 - "AES256:CBC"

    4 - "AES256:OFB"

    5 - "AES256:CFB"

    6 - "AES256:CBC-CTS"

    7 - "AES256:CTR"

 

Примечание: эта функция низкоуровневая, где разработчику нужно самому подбирать длину ключа –только 128 или 256 бит.

Более высокоуровневая функция VariantAES256Encrypt() и VariantAES256Decrypt(), где пароль может быть любой длинны, который преобразуется в 256-битный ключ в самой функции.

 

COM: VBA

4.0

18

Array2Dto1D

Быстрое преобразования двухмерного массива в одномерный (данные не обрезаются, 2е измерение преобразуются в очередь
- складывается "столбцами")
HRESULT Array2Dto1D([in, out] VARIANT* array_in_out, [in, defaultvalue(0)] LONG lLbound);

Параметры метода:

1.array_in_out - массив, который нужно преобразовать

2.lLbound1 - нижняя граница нового массива (по умолчанию=0)

 

Пример использования в VBA (Excel):

Visual BasicВыделить код

1

2

3

4

5

6

7

8

9

10

11

Sub TestArrayDtoD()

Dim r As New BedvitCOM.VBA 'раннее связывание

Dim t, arr, i

arr = [a1:a1000000]

t = Timer

For i = 1 To 1000000

    r.Array2Dto1D arr 'в одномерный (нижняя граница = 0 - по умолчанию)

    r.Array1Dto2D arr, 1, 1 'в двухмерный с 1м столбцом, нижние границы измерений = 1

Next

Debug.Print "Time: " & Timer - t & " sec."

End Sub

начиная с v2.0.0.2

Visual BasicВыделить код

1

2

3

4

5

6

7

8

9

Sub TestArrayDtoD_()

    'Dim bVBA As New BedvitCOM.VBA 'раннее связывание

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

    Dim arr

    arr = [a1:b10] ' забираем массив 2 столбца, 10 строк

    bVBA.Array2Dto1D arr 'в одномерный (нижняя граница = 0 - по умолчанию)

    bVBA.Array1Dto2D arr, 1, 1, 10 'преобразуем в двухмерный с 10ю столбцами и 2 строками, нижние границы измерений = 1, порядок данных сохраняется исходный

    Cells(1, 1).Resize(UBound(arr, 1), UBound(arr, 2)) = arr 'нового размера массив со старым порядком данных

End Sub

 

 

Подробнее на форуме.

 

COM: VBA

4.0

19

Array1Dto2D

Быстрое преобразование одномерного массива в двухмерный (данные не удаляются) (v1.0.5.0 и выше)

Начиная с v2.0.0.2 можно задавать размер первой размерности, вторая рассчитывается автоматически, в зависимости от общего количества элементов. Размер для размерности должен задаваться так, чтобы общее количество элементов массива было кратно задаваемому размеру. Порядок данных сохраняется первоначальный.

HRESULT Array1Dto2D([in, out] VARIANT* array_in_out, [in, defaultvalue(0)] LONG lLboundCol, [defaultvalue(0)] LONG lLboundRow, [defaultvalue(1)] LONG cElementsCol);

1.array_in_out - массив, который нужно преобразовать

2.lLboundCol - нижняя граница нового массива, 1е измерение - столбцы (по умолчанию=0)

3.lLboundRow - нижняя граница нового массива, 2е измерение - строки(по умолчанию=0)

4.cElementsCol - размер для первой размерности, кол-во столбцов (по умолчанию=1)(начиная с v2.0.0.2)

 

Пример использования в VBA (Excel):

Visual BasicВыделить код

1

2

3

4

5

6

7

8

9

10

11

Sub TestArrayDtoD()

Dim r As New BedvitCOM.VBA 'раннее связывание

Dim t, arr, i

arr = [a1:a1000000]

t = Timer

For i = 1 To 1000000

    r.Array2Dto1D arr 'в одномерный (нижняя граница = 0 - по умолчанию)

    r.Array1Dto2D arr, 1, 1 'в двухмерный с 1м столбцом, нижние границы измерений = 1

Next

Debug.Print "Time: " & Timer - t & " sec."

End Sub

начиная с v2.0.0.2

Visual BasicВыделить код

1

2

3

4

5

6

7

8

9

Sub TestArrayDtoD_()

    'Dim bVBA As New BedvitCOM.VBA 'раннее связывание

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

    Dim arr

    arr = [a1:b10] ' забираем массив 2 столбца, 10 строк

    bVBA.Array2Dto1D arr 'в одномерный (нижняя граница = 0 - по умолчанию)

    bVBA.Array1Dto2D arr, 1, 1, 10 'преобразуем в двухмерный с 10ю столбцами и 2 строками, нижние границы измерений = 1, порядок данных сохраняется исходный

    Cells(1, 1).Resize(UBound(arr, 1), UBound(arr, 2)) = arr 'нового размера массив со старым порядком данных

End Sub

 

 

 

Подробнее на форуме.

 

COM: VBA

4.0

20

ArrayFilterV

Фильтр одномерного и двухмерного СОМ-массива (
VARIANT).

Инструмент для фильтрации одномерного и двухмерного СОМ-массива (тип данных VARIANT) для любого количества столбцов, с любым количеством условий.

Реализован параллельный алгоритм фильтрации (поддержка любого количества логических процессоров).

HRESULT ArrayFilterV([in] VARIANT* array_in, [in] VARIANT* array_parameters, [in] VARIANT_BOOL array_index_on, [in, out] VARIANT* array_out);

1. array_in - массив входящий (одномерный, двухмерный), тип данных VARIANT.

2. array_parameters - массив задаваемых параметров, тип данных VARIANT (6 параметров для одного условия, можно для одного и того же столбца, можно для разных). Количество условий не ограничено. Условия можно создать из списка, можно создать двухмерный массив и заполнить, можно забрать сразу с листа Excel.

3. array_out_index - режим вывода: 0- отфильтрованный массив, 1-массив индексов

4. array_out - массив результатов

 

Условия в массиве параметров применяются в порядке следования, если нет скобок или внутри скобок. Скобки задают приоритет выполнения условий (стандартно), потом "И" и "ИЛИ" в порядке очередности.
Параметры массива условий (сделал максимально близко к стандартной записи условий) - 6 параметров для каждой строки условия:
1.Логические
операторы (0-ИЛИ, 1-И). Для первого условия можно не указывать.

2.Скобки открывающие (если нужны, можно несколько)
3.Столбец для фильтрации
4.Операторы сравнения (для сравнения значения заданного столбца со значением фильтра):
1 - меньше (для числа),
2 - равно (для числа и строки),
4 - больше (для числа),
8 - содержит подстроку (для строки),
16 - зарезервированное значение (регулярки),
32 - игнорировать регистр (для строки) ,
64 - зарезервированное значение (basic),
128 - зарезервированное значение (extended),
256 - LIKE (пока только знак подстановки "*")(для строки) (начиная с v3.5, в XLL c v4.6) полноценный Like (бинарный режим)
512-НЕ (для числа и строки)

Реализовано в виде бинарной маски, т.е. можно складывать, к примеру 8+512 - НЕ содержит подстроку, 1+2 - меньше или равно и т.д.
5.Значение фильтра (для фильтрации)
6.Скобки закрывающие (если нужны, можно несколько)

т.е. для каждого условия 6 параметров: И/ИЛИ,(((...,стобец, оператор сравнения, значение, ...)))

Условия можно задавать как простые:
'фильтр по первому столбцу, значение = 9
Array(,,1, 2, 9, "")

так и более сложные, к примеру (см.ниже.)

(((c1 like "маша" or like "вася") and c1<>"маша иванова") or (c2<>"1" or c2=1)) and (c3>=12,5 and c3<=55,8)

Логические операторы

Скобка, открывающая

Столбец для фильтрации

Операторы сравнения

Значение для фильтра

Скобка, закрывающая

0(ИЛИ)*

(((

1

8(Содержит)*

"маша"

 

0(ИЛИ)*

 

1

8(Содержит)*

"вася"

)

1(И)*

 

1

512+2(<>)*

"маша иванова"

)

0(ИЛИ)*

(

2

512+2(<>)*

"1"

 

0(ИЛИ)*

 

2

2(=)*

1

))

1(И)*

(

3

4+2(>=)*

12,5

 

1(И)*

 

3

1+2(<=)*

55,8

)

*(расшифровка передаваемого числового значения)

 

Array(,"(((", 1, Содержит, "маша", , ИЛИ, , 1, Содержит, "вася", ")", И, , 1, НеРавно, "маша иванова", ")", ИЛИ, "(", 2, НеРавно, "'1", , ИЛИ, , 2, Равно, 1, "))", И, "(", 3, БольшеРавно, 12.5, , И, , 3, МеньшеРавно, 55.8, ")")
или в таком виде (как удобнее). В примере для операторов сравнения созданы псевдонимы (в виде слова, по факту это банарная маска, см. выше)
Array( _
,"(((", 1, Содержит, "маша", , _
ИЛИ, , 1, Содержит, "вася", ")", _
И, , 1, НеРавно, "маша иванова", ")", _
ИЛИ, "(", 2, НеРавно, "'1", , _
ИЛИ, , 2, Равно, 1, "))", _
И, "(", 3, БольшеРавно, 12.5, , _
И, , 3, МеньшеРавно, 55.8, ")" _
)

 

 

Простые примеры (с замером скорости на 10 млн строк) и сложные (с выводом условий и результата):

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

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

Option Explicit

'операторы (aliases) псевдонимы

Const ИЛИ = 0, И = 1, РАВНО = 2, СОДЕРЖИТ = 8, НЕРАВНО = 512 + 2, МЕНЬШЕРАВНО = 1 + 2, БОЛЬШЕРАВНО = 4 + 2, МЕНЬШЕ = 1, БОЛЬШЕ = 4

 

'ОДНОМЕРНЫЙ МАССИВ, ПРОСТЫЕ УСЛОВИЯ, бинарная маска без слова-псевдонима

Sub TestArrayFilterV_1()

    'Dim bVBA As New BedvitCOM.VBA 'раннее связывание

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

    Dim arrResult

    'первоначальный массив данных

    Dim arrV: arrV = Array(1, 0, 1, 0, 1, 0)

    'массив условий (фильтр по первому столбцу, значение = 1)

    Dim p: p = Array(, , 1, 2, 1, "")

 

    ' фильтруем ===============================

    bVBA.ArrayFilterV arrV, p, 0, arrResult

    '========================================

    Debug.Print UBound(arrResult) + 1 'начало с 0

End Sub

 

 

 

'ДВУХМЕРНЫЙ МАССИВ, ПРОСТЫЕ УСЛОВИЯ, бинарная маска в виде слова-псевдонима

Sub TestArrayFilterV_2()

    'Dim bVBA As New BedvitCOM.VBA 'раннее связывание

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

    Dim arrResult, r, c, t, x

    Dim sizeRow As Long: sizeRow = 10000000

    Dim sizeCol As Long: sizeCol = 1

    Dim arrV: ReDim arrV(1 To sizeRow, 1 To sizeCol) 'первоначальный массив данных, далее хаполняем рендомно

    

    'массив условий (фильтр по первому столбцу, значение = 1)

    Dim p: p = Array(, , 1, РАВНО, 1, "")

     

    'заполняем первоначальный массив с данными

    For r = 1 To sizeRow

        For c = 1 To sizeCol

        arrV(r, c) = CLng(Rnd * 2)

        Next

    Next

     

    t = Timer

    ' фильтруем ===============================

    bVBA.ArrayFilterV arrV, p, 0, arrResult

    '========================================

    Debug.Print Timer - t

    Debug.Print UBound(arrResult) + 1 'начало с 0

End Sub

 

 

 

'ДВУХМЕРНЫЙ МАССИВ, СЛОЖНЫЕ УСЛОВИЯ, бинарная маска в виде слова-псевдонима

Sub TestArrayFilterV_3()

 

Dim arrParam, arrTest, arrRes, bCOMvba As Object: Set bCOMvba = CreateObject("BedvitCOM.VBA")

 

Cells.ClearContents

 

'создаем тестовый массив

arrTest = Array("маша иванова", "'1", 13, "маша иванова", 1, 13, "маша", "'1", 14, "вася", "'1", 14, "паша", 1, 50, "вася", 2, 52, "маша", 1, 60, "вася", 1, 65)

bCOMvba.Array1Dto2D arrTest, 1, 1, UBound(arrTest) / 3: bCOMvba.Transpose arrTest

Cells(1, 1).Resize(UBound(arrTest, 1), UBound(arrTest, 2)) = arrTest

 

'запись условий для фильтра:(((c1 like "маша" or like "вася") and c1<>"маша иванова") or (c2<>"1" or c2=1)) and (c3>=12,5 and c3<=55,8)

arrParam = Array(, "(((", 1, СОДЕРЖИТ, "маша", , ИЛИ, , 1, СОДЕРЖИТ, "вася", ")", И, , 1, НЕРАВНО, "маша иванова", ")", ИЛИ, "(", 2, НЕРАВНО, "'1", , ИЛИ, , 2, РАВНО, 1, "))", И, "(", 3, БОЛЬШЕРАВНО, 12.5, , И, , 3, МЕНЬШЕРАВНО, 55.8, ")")

'ИЛИ ТАК

arrParam = Array( _

, "(((", 1, СОДЕРЖИТ, "маша", , _

ИЛИ, , 1, СОДЕРЖИТ, "вася", ")", _

И, , 1, НЕРАВНО, "маша иванова", ")", _

ИЛИ, "(", 2, НЕРАВНО, "'1", , _

ИЛИ, , 2, РАВНО, 1, "))", _

И, "(", 3, БОЛЬШЕРАВНО, 12.5, , _

И, , 3, МЕНЬШЕРАВНО, 55.8, ")" _

)

bCOMvba.Array1Dto2D arrParam, 1, 1, UBound(arrParam) / 6: bCOMvba.Transpose arrParam

Cells(1, 5).Resize(UBound(arrParam, 1), UBound(arrParam, 2)) = arrParam

 

'применяем фильтр

bCOMvba.ArrayFilterV arrTest, arrParam, 0, arrRes

Cells(1, 12).Resize(UBound(arrRes, 1), UBound(arrRes, 2)) = arrRes

 

End Sub

 

 

 

Подробнее на форуме.

 

COM: VBA

4.0

21

ArrayCharLowerV

Преобразовать все символы строки в нижний регистр (в массиве).

HRESULT ArrayCharLowerV([in, out] VARIANT* array_in_out);

Параметры функции:

1.array_in_out – массив строк, который нужно преобразовать (на месте)

COM: VBA

4.0

22

ArrayCharUpperV

Преобразовать все символы строки в ВЕРХНИЙ регистр (в массиве).

HRESULT ArrayCharUpperV([in, out] VARIANT* array_in_out);

Параметры функции:

1.array_in_out - массив, который нужно преобразовать (на месте)

COM: VBA

4.0

23

ArrayCharToNumV

Преобразовать все данные в тип:
Double (числа сохраненные как текст)  (в массиве).

HRESULT ArrayCharToNumV([in, out] VARIANT* array_in_out);

Параметры функции:

1.array_in_out - массив, который нужно преобразовать (на месте)

COM: VBA

4.0

24

ArrayNumToCharV

Преобразовать все данные в тип: String (в массиве).

HRESULT ArrayNumToCharV([in, out] VARIANT* array_in_out);

Параметры функции:

1.array_in_out - массив, который нужно преобразовать (на месте)

COM: VBA

4.0

25

Version

Версия библиотеки BedvitCOM.dll

HRESULT Version([out, retval] VARIANT* versionDLLRetval);

COM: VBA

4.0

26

FileName

Полный путь к зарегистрированной библиотеки
BedvitCOM.dll

HRESULT FileName([out, retval] VARIANT* fileNameDLLRetval);

COM: VBA

4.0

27

VariantCopy

Глубокая копия VARIANT.

HRESULT VariantCopy([in] VARIANT* variantIn, [out, retval] VARIANT* variantCopyRetval);

Параметры функции:

1. variantIn – исходный VARIANT, с которого делается копия

COM: VBA

4.0

28

ArrayDtoD

Быстрое преобразование одномерного массива в двухмерный (данные не удаляются и не добавляются).

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

HRESULT ArrayDtoD([in, out] VARIANT* arrayInOut, [in, defaultvalue(0)]LONG lLboundRow, [in, defaultvalue(0)]LONG cElementsRow, [in, defaultvalue(0)]LONG lLboundCol, [in, defaultvalue(0)]LONG cElementsCol, [in, defaultvalue(0)]LONG lLbound3, [in, defaultvalue(0)]LONG cElements3, [in, defaultvalue(0)]LONG lLbound4, [in, defaultvalue(0)]LONG cElements4, [in, defaultvalue(0)]LONG lLbound5, [in, defaultvalue(0)]LONG cElements5, [in, defaultvalue(0)]LONG lLbound6, [in, defaultvalue(0)]LONG cElements6, [in, defaultvalue(0)]LONG lLbound7, [in, defaultvalue(0)]LONG cElements7, [in, defaultvalue(0)]LONG lLbound8, [in, defaultvalue(0)]LONG cElements8, [in, defaultvalue(0)]LONG lLbound9, [in, defaultvalue(0)]LONG cElements9, [in, defaultvalue(0)]LONG lLbound10, [in, defaultvalue(0)]LONG cElements10);

Параметры функции:

1. arrayInOut – массив для преобразования «на месте»

2. lLboundRow – нижняя граница для строк

3. cElementsRow – количество строк

4. lLboundCol – нижняя граница для столбцов

5. cElementsCol – количество столбцов

4. lLbound3 – нижняя граница для третьего измерения

5. cElements3 – количество элементов третьего измерения

 

COM: VBA

4.0

30

ArrayReDim

Изменение размерности и количество элементов в размерностях СОМ-массива. Можно обрезать/добавлять элементы, как в начало, так и в конец любой размерности массива.

 

Информация сохраняется, если не обрезается принудительно. Для созданный блоков массива задаются значения Empty.

HRESULT ArrayReDim([in, out] VARIANT* arrayInOut, [in, defaultvalue(0)]LONG lLboundRow, [in, defaultvalue(0)]LONG rowStartChange, [in, defaultvalue(0)]LONG rowEndChange, [in, defaultvalue(0)]LONG lLboundCol, [in, defaultvalue(0)]LONG colStartChange, [in, defaultvalue(0)]LONG colEndChange);

1.arrayInOut - массив (Variant)

2.lLboundRow - новая нижняя граница для строк

3.rowStartChange - изменения для начала измерения строк ("-"обрезаем, "+"добавляем новые строки)

4.rowEndChange - изменения для конца измерения строк ("-"обрезаем, "+"добавляем новые строки)

5.lLboundCol - новая нижняя граница для столбцов

6.colStartChange - изменения для начала измерения столбцов ("-"обрезаем, "+"добавляем новые столбцы)

7.colEndChange - изменения для конца измерения столбцов ("-"обрезаем, "+"добавляем новые столбцы)

COM: VBA

4.0

31

ArraySize

Размер СОМ – массива. Количество элементов в сумме по всем измерениям.

HRESULT ArraySize([in] VARIANT* arrayIn, [out, retval] VARIANT* arraySizeRetval);

Параметры функции:

1. arrayIn – массив, для которогу нужно получить количество всех элементов.

COM: VBA

4.0

32

SplitS

Возвращает одномерный массив подстрок из указанной строки, разделенной по указанному разделителю
(входящая строка BSTR)

HRESULT SplitS([in] BSTR stringIn, [in] BSTR delimiter, [in, defaultvalue(0)] LONG setLowerBound, [in, defaultvalue(0)] LONG multiThreading, [out, retval] VARIANT* arrayOutRetval);

Параметры функции:

1. stringIn – строка для деления на подстроки

2. delimiter – разделитель, по которому нужно разделить строку

3. setLowerBound – нижняя граница для создаваемого массива

4. multiThreading  - включение многопоточных вычислений

COM: VBA

4.0

33

SplitV

Возвращает одномерный массив подстрок из указанной строки, разделенной по указанному разделителю
(входящий VARIANT)

HRESULT SplitV([in] VARIANT stringIn, [in] VARIANT delimiter, [in, defaultvalue(0)] LONG setLowerBound, [in, defaultvalue(0)] VARIANT_BOOL multiThreading, [out, retval] VARIANT* arrayOutRetval);

Параметры функции:

1. stringIn VARIANT содержащий строку для деления на подстроки

2. delimiter – разделитель, по которому нужно разделить строку

3. setLowerBound – нижняя граница для создаваемого массива

4. multiThreading  - включение многопоточных вычислений

COM: VBA

4.0

34

ArrayCopyStoV

Копирование СОМ-массива с типом данных
BSTR(строка) в СОМ-массив с типом данных VARIANT.

HRESULT ArrayCopyStoV([in] VARIANT* arrayIn, [in] LONG multiThreading, [in, out, defaultvalue(0)]  VARIANT* arrayOut, [out, retval] VARIANT* arrayOutRetval);

Параметры функции:

1. arrayIn – входящий массив

2. multiThreading - включение многопоточных вычислений

3. arrayOut – получаемый массив

COM: VBA

4.0

35

ArrayConvertStoV

Преобразование «на месте» СОМ-массива с типом данных
BSTR(строка) в СОМ-массив с типом данных VARIANT.

HRESULT ArrayConvertStoV([in, out] VARIANT* arrayInOut, [in, defaultvalue(0)] LONG multiThreading);

Параметры функции:

1. arrayInOut – массив меняемый «на месте»

2. multiThreading - включение многопоточных вычислений

COM: VBA

4.0

36

ArrayConvertVtoS

Преобразование «на месте» СОМ-массива с типом данных
VARIANT в СОМ-массив с типом данных BSTR(строка).

 
HRESULT ArrayConvertVtoS([in, out] VARIANT* arrayInOut, [in, defaultvalue(0)] LONG multiThreading);

Параметры функции:

1. arrayInOut – массив меняемый «на месте»

2. multiThreading - включение многопоточных вычислений

COM: VBA

4.0

37

Like

Используется для сравнения двух строк.

HRESULT Like([in] BSTR stringIn, [in] BSTR patternIn, [out, retval] VARIANT_BOOL* resultRetval);

Параметры функции:
1. string - входящая строка
2. pattern - шаблон, маска для сравнения со строкой

Аналог оператора LIKE от Microsoft (https://learn.microsoft.com/ru-ru/office/vba/language/reference/user-interface-help/like-operator)
с таким же набором правил составления маски и с таким же возвращаемым результатом

Предоставляет универсальное средство для сравнения строк. Возможности сопоставления шаблона позволяют использовать подстановочные знаки, списки знаков или диапазоны знаков в любой комбинации, чтобы сопоставить строки. В следующей таблице представлены знаки, разрешенные для использования в аргументе pattern, и объясняется, чему они соответствуют:
Знаки в pattern - Сопоставление в string
? - Любой отдельный знак.
* - Ноль или больше знаков.
# - Любая однозначная цифра (0–9).
[ charlist ] - Любой отдельный знак, представленный в charlist.
[ !charlist ] - Любой отдельный знак, не представленный в charlist.

Группа из одного или нескольких символов ( charlist ), заключенная в квадратные скобки ([ ]), может использоваться для сопоставления с любым одним символом в строке и может включать практически любой код символов, включая цифры.

 Примечание

Чтобы получить сопоставление для специальных знаков, а именно для левой квадратной скобки ([), вопросительного знака (?), знака номера (#) и звездочки (*), заключите их в квадратные скобки. Знак правой квадратной скобки (]) не может использоваться в рамках группы для сопоставления самому себе, однако может использоваться за пределами группы как отдельный знак.

С помощью дефиса (-), разделяющего нижнюю и верхнюю границы диапазона, charlist может использоваться для определения диапазона знаков. Например, приводит к совпадению, [A-Z] если соответствующая позиция символов в строке содержит прописные буквы в диапазоне от A до Z. Несколько диапазонов могут включаться в квадратные скобки без использования каких-либо разделителей.

Также имеются другие важные правила для сопоставления шаблона:

Восклицательный знак (!) в начале charlist означает, что выполняется сопоставление, если любой знак, кроме знаков, указанных в charlist, будет найден в аргументе string. При использовании вне квадратных скобок восклицательный знак сопоставляется самому себе.
Дефис (-) может отображаться в начале (но после восклицательного знака, если он используется) или в конце charlist для сопоставления самому себе. На любой другой позиции дефис используется для указания диапазона знаков.
При задании диапазона знаков они должны отображаться по возрастающему порядку сортировки (от наименьшего к наибольшему). [A-Z] является допустимым шаблоном, но [Z-A] не является.
Последовательность [] символов считается строкой нулевой длины ("").

Возвращает TRUE or FALSE в зависимости от итога сравнения строки с шаблоном.

 

COM: VBA

4.0

38

RegexMatchECMAScript

Поиск подстроки в строке с помощью регулярныз выражений, грамматика ECMAScript.

HRESULT RegexMatchECMAScript([in] BSTR stringIn, [in] BSTR patternIn, [out, retval] VARIANT_BOOL* resultRetval);

Параметры функции:

1.stringIn – строка в которой ищем

2. patternIn – шаблон

 

Везде использована стандартная библиотека C++, функция regex_match(), грамматика ECMAScript, на https://regex101.com/ можно проверить шаблон в разделе "EcmaScript (JavaScript)".

COM: VBA

4.0

39

UnicodeCharCodeGet

Возвращает юникод указанного символа в строке.

HRESULT UnicodeCharCodeGet([in] BSTR stringIn, [in] LONG position, [out, retval] SHORT* unicodeCharRetval);

Параметры функции:

1.stringIn – строка в которой смотрим символ

2.position – позиция символа в строке (отсчет с 1)

COM: VBA

4.0

40

UnicodeCharCodeSet

Меняет указанный символ в строке на указанный юникод

HRESULT UnicodeCharCodeSet([in] BSTR stringIn, [in] LONG position, [in] SHORT unicodeChar);//строки с 1? массивы с 0?

Параметры функции:

1.stringIn – строка в которой меняем символ

2.position – позиция символа в строке (отсчет с 1)

 

COM: VBA

4.0

41

CoCreateGuid

создает
GUID — уникальное 128-битное целое число.

HRESULT CoCreateGuid([in, defaultvalue(0)]LONG liteMode, [out, retval] BSTR* GUIDstringOutRetval);

Параметры функции:

1. liteMode – режим вывода, стандартный = 0 и упрощенный =1, ("{E06AD101-5907-474B-8506-A7CD0149537F}" и  "c883f002273a4c63ae52f91c787ba1e9" соответственно).

 

COM: VBA

4.0

42

VariantSerialization

Cериализация и десериализация типа данных Variant, используемый в COM, VB, VBA, C++, Python и других поддерживающих СОМ языков

Поддерживаются базовые типы и массивы. Объекты не сериализуются.

В некоторой степени - аналог CComVariant::ReadFromStream и CComVariant::WriteToStream

HRESULT VariantSerialization([in] VARIANT variantIn, [out, retval] VARIANT* byteArrayOutRetval);

Параметры функции:

1. variantIn - входящий VARIANT - значение или массив значений

2. byteArrayOutRetval - массив байтов получаемый

 

Особенности:

1. Cериализация в байтовый массив

2. Размер массива не может превышать 2^32 элементов (около 4Гбайт). Это ограничение самого  COM - массива. В С++ (в другом контейнере) сохранял файлы боле 4,5 Гб.

3. Реализован похожий механизм (shared string table), как и в Excel, для оптимизации размера одинаковых строк.

 

Пример использования

[VBA]

Sub TestVariantSerialization()    

    'Dim bVBA As New BedvitCOM.VBA 'раннее связывание    

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

    Dim t, arr, byteArr    

    

    Range("A:B").value2 = "Tst Srl ёя"         

    t = Timer        

    byteArr = bVBA.VariantSerialization(Range("A:B").value2)        

    arr = bVBA.VariantDeserialization(byteArr)    

    Debug.Print "VariantSerialization+VariantDeserialization " & Timer - t & " s."    

    Range("D:E").value2 = arr    

End Sub

[/VBA]

COM: VBA

4.0

43

VariantDeserialization

Cериализация и десериализация типа данных Variant, используемый в COM, VB, VBA, C++, Python и других поддерживающих СОМ языков

Поддерживаются базовые типы и массивы. Объекты не сериализуются.

В некоторой степени - аналог CComVariant::ReadFromStream и CComVariant::WriteToStream

HRESULT VariantDeserialization([in] VARIANT byteArrayIn, [out, retval] VARIANT* variantOutRetval);

Параметры функции:

1. byteArrayIn - входящий массив байтов

2. byteArrayOutRetval – получаемый VARIANT

 

Особенности:

1. Cериализация в байтовый массив

2. Размер массива не может превышать 2^32 элементов (около 4Гбайт). Это ограничение самого  COM - массива. В С++ (в другом контейнере) сохранял файлы боле 4,5 Гб.

3. Реализован похожий механизм (shared string table), как и в Excel, для оптимизации размера одинаковых строк.

 

Пример использования

[VBA]

Sub TestVariantSerialization()    

    'Dim bVBA As New BedvitCOM.VBA 'раннее связывание    

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

    Dim t, arr, byteArr    

    

    Range("A:B").value2 = "Tst Srl ёя"         

    t = Timer        

    byteArr = bVBA.VariantSerialization(Range("A:B").value2)         

    arr = bVBA.VariantDeserialization(byteArr)    

    Debug.Print "VariantSerialization+VariantDeserialization " & Timer - t & " s."    

    Range("D:E").value2 = arr    

End Sub

[/VBA]

 

COM: VBA

4.0

44

 VariantAES256Encrypt

Шифрование данных алгоритмами
AES (зашифровать)

Использованы исходники Crypto++

HRESULT VariantAES256Encrypt([in] VARIANT variantIn, [in]BSTR password, [in, defaultvalue(0)]VARIANT_BOOL secureZeroMemoryPassword, [in, defaultvalue(L"")]BSTR salt, [in, defaultvalue(3)]LONG algorithmCrypto, [out, retval]VARIANT* byteArrayOutRetval); 

Параметры функции:

1. variantIn - входящий массив или отдельное значение

2. password - пароль

3. secureZeroMemoryPassword - безопасное обнуление значения пароля

4. salt - соль (к паролю)

5. algorithmCrypto - алгоритмы шифрования AES:

    1 - "Без шифрования"

    2 - "AES256:ECB"

    3 - "AES256:CBC"

    4 - "AES256:OFB"

    5 - "AES256:CFB"

    6 - "AES256:CBC-CTS"

    7 - "AES256:CTR"

byteArrayOutRetval - получаемый результат: зашифрованная строка (результат всегда в виде строки).

 

Функционал:

+ Можно шифровать как отдельные значения, так и диапазоны/массивы.

+ Тип данных и алгоритм шифрования запоминается при зашифровке, и их нужно указывать только при шифровании

+ Пароль нигде не хранится, его знает только пользователь и при утере, расшифровать данные не получится никому

+ Зашифрованные значения или массивы - независимые, т.е. можно каждый отдельный массив или значение зашифровать со своим паролем, можно зашифровать дважды (для гиков  )

+ Для данных у которых упаковка будет экономить размер итоговой зашифрованной строки (для массивов и длинных строк)  - используется алгоритм сжатия WinAPI:XPRESS_HUFF

+ Реализован механизм (shared string table), как и в Excel, для оптимизации размера одинаковых строк (для массивов).

+ Итоговый результат шифрования (любого типа данных: строки, числа, ошибки и т.д.) - хранится в виде строки (массива зашифрованных байт).

 

Примечание: эта функция более высокоуровневая, чем AESstrUTF8(), рекомендуется использовать её, из-за ряда преимуществ (см.выше).

COM: VBA

4.0

45

VariantAES256Decrypt

Шифрование данных алгоритмами
AES (расшифровать)

Использованы исходники Crypto++

HRESULT VariantAES256Decrypt([in] VARIANT byteArrayIn, [in]BSTR password, [in, defaultvalue(0)]VARIANT_BOOL secureZeroMemoryPassword, [in, defaultvalue(L"")]BSTR salt, [in, defaultvalue(3)]LONG algorithmCrypto, [out, retval]VARIANT* variantOutRetval);

Параметры функции:

1. byteArrayIn - входящий байтовый массив(строка) для расшифровки

2. password - пароль

3. secureZeroMemoryPassword - безопасное обнуление значения пароля

4. salt - соль (к паролю)

5. algorithmCrypto - алгоритмы шифрования AES:

    1 - "Без шифрования"

    2 - "AES256:ECB"

    3 - "AES256:CBC"

    4 - "AES256:OFB"

    5 - "AES256:CFB"

    6 - "AES256:CBC-CTS"

    7 - "AES256:CTR"

variantOutRetval - получаемый результат: первоначальный, расшифрованный VARIANT

 

Функционал:

+ Можно шифровать как отдельные значения, так и диапазоны/массивы.

+ Тип данных и алгоритм шифрования запоминается при зашифровке, и их нужно указывать только при шифровании

+ Пароль нигде не хранится, его знает только пользователь и при утере, расшифровать данные не получится никому

+ Зашифрованные значения или массивы - независимые, т.е. можно каждый отдельный массив или значение зашифровать со своим паролем, можно зашифровать дважды (для гиков  )

+ Для данных у которых упаковка будет экономить размер итоговой зашифрованной строки (для массивов и длинных строк)  - используется алгоритм сжатия WinAPI:XPRESS_HUFF

+ Реализован механизм (shared string table), как и в Excel, для оптимизации размера одинаковых строк (для массивов).

+ Итоговый результат шифрования (любого типа данных: строки, числа, ошибки и т.д.) - хранится в виде строки (массива зашифрованных байт).

 

Примечание: эта функция более высокоуровневая, чем AESstrUTF8(), рекомендуется использовать её, из-за ряда преимуществ (см.выше).

COM: UnorderedMap

4.0

1

Find

Поиск значения по ключу, возвращает true, если найден. Если
value задан - возвращает значение (опционально)

HRESULT Find([in] VARIANT key, [in, out, optional] VARIANT* value, [out, retval] VARIANT_BOOL* resultRetval);

COM: UnorderedMap

4.0

2

Insert

Вставляет пару ключ-значения по ключу, возвращает true, если успешно, false - если ключ уже есть (не перезаписывается)

HRESULT Insert([in] VARIANT key, [in] VARIANT value, [out, retval] VARIANT_BOOL* resultRetval);

COM: UnorderedMap

4.0

3

InsertOrAssign

Вставляет или перезаписывает пару ключ-значения по ключу, возвращает true, если создан новый и false если обновлен уже существующий.

HRESULT InsertOrAssign([in] VARIANT key, [in] VARIANT value, [out, retval] VARIANT_BOOL* resultRetval);

COM: UnorderedMap

4.0

4

Erase

Удаляет пару ключ-значения по ключу, возвращает true, если успешно.

HRESULT Erase([in] VARIANT key, [out, retval] VARIANT_BOOL* resultRetval);

COM: UnorderedMap

4.0

5

Clear

Очистить весь контейнер.

HRESULT Clear();

COM: UnorderedMap

4.0

6

Size

Возвращает размер контейнера (количество пар ключ-значение)

HRESULT Size([out, retval] LONG* resultRetval);

COM: UnorderedMap

4.0

7

RangeSet

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

HRESULT RangeSet([in] VARIANT range, [out, retval] LONG* resultRetval);

COM: UnorderedMap

4.0

8

RangeGet

Возвращает количество выгруженных элементов в массив с указанной нижней границей массива (по умолчанию
= 0)

HRESULT RangeGet([out] VARIANT* range, [in, defaultvalue(0)] LONG lowerBound, [out, retval] LONG* resultRetval);

COM: UnorderedMap

4.0

9

SetArray1D

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

HRESULT SetArray1D([in] VARIANT range, [out, retval] LONG* resultRetval);

COM: UnorderedMap

4.0

10

GetArray1D

Возвращает количество выгруженных элементов в одномерный массив по порядку (ключи, потом значения), с указанной нижней границей массива (по умолчанию = 0)

HRESULT GetArray1D([out] VARIANT* range, [in, defaultvalue(0)] LONG lowerBound, [out, retval] LONG* resultRetval);

XLL: Function: XLLBignumArithmeticInteger

5.0

1

SumFloat

Сумма обычных/длинных чисел.

LPXLOPER12 SumFloat(LPXLOPER12 xlop1, XCHAR * xstr1, int precisionOut, XCHAR * separatorIn, XCHAR * separatorOut, int bignumBaseIn, int bignumBaseOut, int eNotationOFF)
Параметры функции:
xlop1 - число обычное, длинное (строка) или диапазон таких чисел.
xstr1 - число обычное, длинное  (строка)
precisionOut - точность длинного числа, количество значимых символов в мантиссе числа (по умолчанию 32 тыс. знаков в E-нотации, что бы поместилось в ячейку Excel или меньше, в случае вывода в виде дробной нотации, за счет нулей)
separatorIn - разделитель целой и дробной части входящего числа (по умолчанию берется из Excel)
separatorOut - разделитель целой и дробной части возвращаемого/расчетного числа (по умолчанию берется из Excel)
bignumBaseIn - база счисления входящего числа 2-62 (по умолчанию, если не указана = 10).
bignumBaseOut - база счисления возвращаемого/расчетного числа 2-62 (по умолчанию, если не указана = 10).
eNotationOFF - отключение E-нотации. В таком случае выводится в дробной виде для выбранной базы счисления.
Для Е-нотации с основанием от 2 до 62: в десятичном основании - символ 'e', в других 2 - 9,11 - 62 - символ '@'.
Мантисса выводится в указанном основании, экспонента всегда в десятичном формате.

Возвращает строку (длинное число) если команда выполнена успешно и #NUM!(#ЧИСЛО!) если ошибка.

XLL: Function: XLLBignumArithmeticInteger

5.0

2

SubtractFloat

Разница обычных/длинных чисел.

LPXLOPER12 SubtractFloat(LPXLOPER12 xlop1, XCHAR * xstr1, int precisionOut, XCHAR * separatorIn, XCHAR * separatorOut, int bignumBaseIn, int bignumBaseOut, int eNotationOFF)
Параметры функции:
xlop1 - число обычное, длинное (строка)
xstr1 - число обычное, длинное  (строка)
precisionOut - точность длинного числа, количество значимых символов в мантиссе числа (по умолчанию 32 тыс. знаков в E-нотации, что бы поместилось в ячейку Excel или меньше, в случае вывода в виде дробной нотации, за счет нулей)
separatorIn - разделитель целой и дробной части входящего числа (по умолчанию берется из Excel)
separatorOut - разделитель целой и дробной части возвращаемого/расчетного числа (по умолчанию берется из Excel)
bignumBaseIn - база счисления входящего числа 2-62 (по умолчанию, если не указана = 10).
bignumBaseOut - база счисления возвращаемого/расчетного числа 2-62 (по умолчанию, если не указана = 10).
eNotationOFF - отключение E-нотации. В таком случае выводится в дробной виде для выбранной базы счисления.
Для Е-нотации с основанием от 2 до 62: в десятичном основании - символ 'e', в других 2 - 9,11 - 62 - символ '@'.
Мантисса выводится в указанном основании, экспонента всегда в десятичном формате.

Возвращает строку (длинное число) если команда выполнена успешно и #NUM!(#ЧИСЛО!) если ошибка.

XLL: Function: XLLBignumArithmeticInteger

5.0

3

MultiplyFloat

Произведение обычных/длинных чисел.

LPXLOPER12 MultiplyFloat(LPXLOPER12 xlop1, XCHAR * xstr1, int precisionOut, XCHAR * separatorIn, XCHAR * separatorOut, int bignumBaseIn, int bignumBaseOut, int eNotationOFF)
Параметры функции:
xlop1 - число обычное, длинное (строка) или диапазон таких чисел.
xstr1 - число обычное, длинное  (строка)
precisionOut - точность длинного числа, количество значимых символов в мантиссе числа (по умолчанию 32 тыс. знаков в E-нотации, что бы поместилось в ячейку Excel или меньше, в случае вывода в виде дробной нотации, за счет нулей)
separatorIn - разделитель целой и дробной части входящего числа (по умолчанию берется из Excel)
separatorOut - разделитель целой и дробной части возвращаемого/расчетного числа (по умолчанию берется из Excel)
bignumBaseIn - база счисления входящего числа 2-62 (по умолчанию, если не указана = 10).
bignumBaseOut - база счисления возвращаемого/расчетного числа 2-62 (по умолчанию, если не указана = 10).
eNotationOFF - отключение E-нотации. В таком случае выводится в дробной виде для выбранной базы счисления.
Для Е-нотации с основанием от 2 до 62: в десятичном основании - символ 'e', в других 2 - 9,11 - 62 - символ '@'.
Мантисса выводится в указанном основании, экспонента всегда в десятичном формате.

Возвращает строку (длинное число) если команда выполнена успешно и #NUM!(#ЧИСЛО!) если ошибка.

XLL: Function: XLLBignumArithmeticInteger

5.0

4

DivideFloat

Деление обычных/длинных чисел.

LPXLOPER12 DivideFloat(LPXLOPER12 xlop1, XCHAR * xstr1, int precisionOut, XCHAR * separatorIn, XCHAR * separatorOut, int bignumBaseIn, int bignumBaseOut, int eNotationOFF)
Параметры функции:
xlop1 - число обычное, длинное (строка)
xstr1 - число обычное, длинное  (строка)
precisionOut - точность длинного числа, количество значимых символов в мантиссе числа (по умолчанию 32 тыс. знаков в E-нотации, что бы поместилось в ячейку Excel или меньше, в случае вывода в виде дробной нотации, за счет нулей)
separatorIn - разделитель целой и дробной части входящего числа (по умолчанию берется из Excel)
separatorOut - разделитель целой и дробной части возвращаемого/расчетного числа (по умолчанию берется из Excel)
bignumBaseIn - база счисления входящего числа 2-62 (по умолчанию, если не указана = 10).
bignumBaseOut - база счисления возвращаемого/расчетного числа 2-62 (по умолчанию, если не указана = 10).
eNotationOFF - отключение E-нотации. В таком случае выводится в дробной виде для выбранной базы счисления.
Для Е-нотации с основанием от 2 до 62: в десятичном основании - символ 'e', в других 2 - 9,11 - 62 - символ '@'.
Мантисса выводится в указанном основании, экспонента всегда в десятичном формате.

Возвращает строку (длинное число) если команда выполнена успешно и #NUM!(#ЧИСЛО!) если ошибка.

XLL: Function: XLLBignumArithmeticInteger

5.0

5

PowerFloat

Возведение в степень обычных/длинных чисел.

LPXLOPER12 PowerFloat(LPXLOPER12 xlop1, int exponent, int precisionOut, XCHAR * separatorIn, XCHAR * separatorOut, int bignumBaseIn, int bignumBaseOut, int eNotationOFF)
Параметры функции:
xlop1 - число обычное, длинное (строка)
exponent - экспонента (показатель степени)
precisionOut - точность длинного числа, количество значимых символов в мантиссе числа (по умолчанию 32 тыс. знаков в E-нотации, что бы поместилось в ячейку Excel или меньше, в случае вывода в виде дробной нотации, за счет нулей)
separatorIn - разделитель целой и дробной части входящего числа (по умолчанию берется из Excel)
separatorOut - разделитель целой и дробной части возвращаемого/расчетного числа (по умолчанию берется из Excel)
bignumBaseIn - база счисления входящего числа 2-62 (по умолчанию, если не указана = 10).
bignumBaseOut - база счисления возвращаемого/расчетного числа 2-62 (по умолчанию, если не указана = 10).
eNotationOFF - отключение E-нотации. В таком случае выводится в дробной виде для выбранной базы счисления.
Для Е-нотации с основанием от 2 до 62: в десятичном основании - символ 'e', в других 2 - 9,11 - 62 - символ '@'.
Мантисса выводится в указанном основании, экспонента всегда в десятичном формате.

Возвращает строку (длинное число) если команда выполнена успешно и #NUM!(#ЧИСЛО!) если ошибка.

XLL: Function: XLLBignumArithmeticInteger

5.0

6

RootFloat

Квадратный корень из обычных/длинных чисел.

LPXLOPER12 RootFloat(LPXLOPER12 xlop1, int precisionOut, XCHAR * separatorIn, XCHAR * separatorOut, int bignumBaseIn, int bignumBaseOut, int eNotationOFF)
Параметры функции:
xlop1 - число обычное, длинное (строка)
precisionOut - точность длинного числа, количество значимых символов в мантиссе числа (по умолчанию 32 тыс. знаков в E-нотации, что бы поместилось в ячейку Excel или меньше, в случае вывода в виде дробной нотации, за счет нулей)
separatorIn - разделитель целой и дробной части входящего числа (по умолчанию берется из Excel)
separatorOut - разделитель целой и дробной части возвращаемого/расчетного числа (по умолчанию берется из Excel)
bignumBaseIn - база счисления входящего числа 2-62 (по умолчанию, если не указана = 10).
bignumBaseOut - база счисления возвращаемого/расчетного числа 2-62 (по умолчанию, если не указана = 10).
eNotationOFF - отключение E-нотации. В таком случае выводится в дробной виде для выбранной базы счисления.
Для Е-нотации с основанием от 2 до 62: в десятичном основании - символ 'e', в других 2 - 9,11 - 62 - символ '@'.
Мантисса выводится в указанном основании, экспонента всегда в десятичном формате.

Возвращает строку (длинное число) если команда выполнена успешно и #NUM!(#ЧИСЛО!) если ошибка.

XLL: Function: XLLBignumArithmeticInteger

5.0

7

SumInteger

Сумма обычных/длинных чисел.

LPXLOPER12 SumInteger(LPXLOPER12 xlop1, XCHAR * xstr1, int bignumBaseIn, int bignumBaseOut)
Параметры функции:
xlop1 - число обычное, длинное (строка) или диапазон таких чисел.
xstr1 - число обычное, длинное  (строка)
bignumBaseIn - база счисления входящего числа 2-62 (по умолчанию, если не указана = 10).
bignumBaseOut - база счисления возвращаемого/расчетного числа 2-62 (по умолчанию, если не указана = 10).

Возвращает строку (длинное число) если команда выполнена успешно и #NUM!(#ЧИСЛО!) если ошибка.

XLL: Function: XLLBignumArithmeticInteger

5.0

8

SubtractInteger

Разница обычных/длинных чисел.

LPXLOPER12 SubtractInteger(LPXLOPER12 xlop1, XCHAR * xstr1, int bignumBaseIn, int bignumBaseOut)
Параметры функции:
xlop1 - число обычное, длинное (строка)
xstr1 - число обычное, длинное  (строка)
bignumBaseIn - база счисления входящего числа 2-62 (по умолчанию, если не указана = 10).
bignumBaseOut - база счисления возвращаемого/расчетного числа 2-62 (по умолчанию, если не указана = 10).

Возвращает строку (длинное число) если команда выполнена успешно и #NUM!(#ЧИСЛО!) если ошибка.

XLL: Function: XLLBignumArithmeticFloat

5.0

1

MultiplyInteger

Произведение обычных/длинных чисел.

LPXLOPER12 MultiplyInteger(LPXLOPER12 xlop1, XCHAR * xstr1, int bignumBaseIn, int bignumBaseOut)
Параметры функции:
xlop1 - число обычное, длинное (строка) или диапазон таких чисел.
xstr1 - число обычное, длинное  (строка)
bignumBaseIn - база счисления входящего числа 2-62 (по умолчанию, если не указана = 10).
bignumBaseOut - база счисления возвращаемого/расчетного числа 2-62 (по умолчанию, если не указана = 10).

Возвращает строку (длинное число) если команда выполнена успешно и #NUM!(#ЧИСЛО!) если ошибка.

XLL: Function: XLLBignumArithmeticFloat

5.0

2

DivideInteger

Деление обычных/длинных чисел.

LPXLOPER12 DivideInteger(LPXLOPER12 xlop1, XCHAR * xstr1, int bignumBaseIn, int bignumBaseOut)
Параметры функции:
xlop1 - число обычное, длинное (строка)
xstr1 - число обычное, длинное  (строка)
bignumBaseIn - база счисления входящего числа 2-62 (по умолчанию, если не указана = 10).
bignumBaseOut - база счисления возвращаемого/расчетного числа 2-62 (по умолчанию, если не указана = 10).

Возвращает строку (длинное число) если команда выполнена успешно и #NUM!(#ЧИСЛО!) если ошибка.

XLL: Function: XLLBignumArithmeticFloat

5.0

3

PowerInteger

Возведение в степень обычных/длинных чисел.

LPXLOPER12 PowerInteger(LPXLOPER12 xlop1, int exponent, int bignumBaseIn, int bignumBaseOut)
Параметры функции:
xlop1 - число обычное, длинное (строка)
exponent - экспонента (показатель степени)
bignumBaseIn - база счисления входящего числа 2-62 (по умолчанию, если не указана = 10).
bignumBaseOut - база счисления возвращаемого/расчетного числа 2-62 (по умолчанию, если не указана = 10).

Возвращает строку (длинное число) если команда выполнена успешно и #NUM!(#ЧИСЛО!) если ошибка.

XLL: Function: XLLBignumArithmeticFloat

5.0

4

ModInteger

Деление обычных/длинных чисел и возврат остатка (делит два числа и возвращает только оставшуюся часть)

LPXLOPER12 ModInteger(LPXLOPER12 xlop1, XCHAR * xstr1, int bignumBaseIn, int bignumBaseOut)
Параметры функции:
xlop1 - число обычное, длинное (строка)
xstr1 - число обычное, длинное  (строка)
bignumBaseIn - база счисления входящего числа 2-62 (по умолчанию, если не указана = 10).
bignumBaseOut - база счисления возвращаемого/расчетного числа 2-62 (по умолчанию, если не указана = 10).

Возвращает строку (длинное число) если команда выполнена успешно и #NUM!(#ЧИСЛО!) если ошибка.

XLL: Function: XLLBignumArithmeticFloat

5.0

5

FactorialInteger

Факториал натурального числа n

LPXLOPER12 FactorialInteger(int n, int bignumBaseOut)
Параметры функции:
n - натуральное число
bignumBaseIn - база счисления входящего числа 2-62 (по умолчанию, если не указана = 10).
bignumBaseOut - база счисления возвращаемого/расчетного числа 2-62 (по умолчанию, если не указана = 10).

Возвращает строку (длинное число) если команда выполнена успешно и #NUM!(#ЧИСЛО!) если ошибка.

XLL: Function: XLLBignumArithmeticFloat

5.0

6

ConvertBaseInteger

Конвертация обычнного/длинного числа из одной базы счисления в другую.

LPXLOPER12 ConvertBaseInteger(LPXLOPER12 xlop1, int bignumBaseIn, int bignumBaseOut)
Параметры функции:
xlop1 - число обычное, длинное (строка) входящее
bignumBaseIn - база счисления входящего числа 2-62 (по умолчанию, если не указана = 10).
bignumBaseOut - база счисления возвращаемого/расчетного числа 2-62 (по умолчанию, если не указана = 10).

Возвращает строку (длинное число) если команда выполнена успешно и #NUM!(#ЧИСЛО!) если ошибка.

XLL: Function: XLL

5.0

1

FilterUnicodeChar

Получить/удалить любые символы Unicode из строки (отфильтровать)

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

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

Возвращает строку с отфильтрованными символами Юникода.

XLL: Function: XLL

5.0

2

QRcodePrint

Печатает QR-код в ячейке листа Excel (см. https://bedvit.ru/xll/qr/ )

Использованы: libqrencode Windows GDI


LPXLOPER12 QRcodePrint(wchar_t *  QRcodeText, LPXLOPER12 sizePixel, LPXLOPER12 pixelColorR, LPXLOPER12 pixelColorG, LPXLOPER12 pixelColorB, LPXLOPER12 versionSymbol, LPXLOPER12 levelErrCorrect, LPXLOPER12 widthImage, LPXLOPER12 heightImage, LPXLOPER12 quietZone, LPXLOPER12 left, LPXLOPER12 top)
Параметры/Аргументы функции QRcodePrint :
1. QRcodeText - что печатаем, строка(обязательное).
2. SizePixel - размер пикселя (не картинки, а квадратика в QR), по умолчанию 4 (минимально рекомендуемый)
3. PixelColorR =0 цвет RGB (0-255) если хотим цветную картинку (по умолчанию черный)
4. PixelColorG = 0
5. PixelColorB =0
6. VersionSymbol - версия QR кода (1-40) (по умолчанию = 0-выбор автоматом), см. ниже
7. LevelErrCorrect - уровень коррекции ошибок (0-3, по умолчанию = 1 ~15%), см. ниже
8.WidthImage - постоянная ширина (т.к. при кодировании разного размера данных размер QR меняется). Если хотим постоянный размер - проставляем. По умолчанию "-1" (размер фактический)
9.
HeightImage - постоянная высота, тоже, что и п.8
10. QuietZone - Размер в модулях зоны тишины (>=0, по умолчанию = 4). Quiet zone — это область, отделяющая границу штрих-кода от фона и других изображений. Начиная с версии xll - v2.0.1.6
11.Left - отступ от левого верхнего угла ячейки с функцией (рекомендуется оставлять значение по умолчанию = 0)
12.
Top - тоже, что и п.11 (рекомендуется оставлять значение по умолчанию = 0)
п.11,12 рекомендовано использовать, только тогда, когда есть понимание, как это все работает (см.ниже). В обратном случае может быть ситуация, когда изменили размер ячейки или изменили 11 и/или 12 параметр, и теперь QR - печатается в другой ячейке, а в предыдущей он уже не удалится, останется до ручного удаления.

Важно: Ячейка в которую помещается QR-код предварительно очищается от старых версий QR.
Если QR-код больше не нужен можно удалить вручную или задать пустую строку для первого параметра функции (старый QR-код удалится, новый не создастся). Важно! QR-код при этом должен находится (его левый верхний угол) в рамках ячейки, в которой находится функция QRcodePrint(), в противном случай картинка не удалится.

Результат: При удаче, возвращается закодированная в QR-коде строка, при ошибке - "#ЧИСЛО!"

XLL: Function: XLL

5.0

3

TextJoinXLL

Объединяет текст из нескольких строк (выделенного диапазона), вставляя между текстовыми значениями указанные разделитель(и) . Можно задать массив разделителей. Введенные числа будут считаться текстом.

LPXLOPER12 TextJoinXLL(LPXLOPER12 range, LPXLOPER12 delimiter, BOOL ignoreEmpty)
Параметры функции:
1.range - массив/диапазон строк
2.delimiter - строка-разделитель (опционально = "")
3.ignoreEmpty - игнорировать пустые ячейки в Range (опционально = 0 - не игнорировать)

Аналог TextJoin(ОБЪЕДИНИТЬ) от Microsoft (https://support.microsoft.com/en-gb/office/textjoin-function-357b449a-ec91-49d0-80c3-0e8fc845691c)
Если объединенная строка содержит свыше 32767 символов (ограничение для ячейки), функция вернет ошибку #ЧИСЛО!.

Возвращает строку.

XLL: Function: XLL

5.0

4

HelpXLL

Возвращает строку, содержащую все основные данные по работе надстройки, аналогичные данным в команде меню "XLL Help"

LPXLOPER12 HelpXLL()
Параметры функции:
1.Без параметров

Возвращает строку, содержащую все основные данные по работе надстройки, аналогичные данным в команде меню "XLL Help"

XLL: Function: XLL

5.1

5

CoCreateGuidXLL

Создает GUID — уникальное 128-битное целое число, используемое для CLSI