XLL
Библиотека
(надстройка) XLL для Excel
XLL-надстройка представляет собой скомпилированный на C/C++ файл
динамической библиотеки Windows, специально предназначенной для использования
в Excel.
Область применения - Excel 2007 (х32, х64) и
выше (для Excel x32 - версия библиотеки (х32), для Excel
х64 - версия (х64)). Не поддерживается WinXP.
Начиная с версии BedvitXLL 5.0, поддерживается Windows8 и
выше, т.е. не поддерживается Windows7, но
периодически выходит спец. выпуск BedvitXLLwin7.
Содержит библиотеку BedvitCOM (весь функционал BedvitCOM ).
НЕ нужно устанавливать или удалять в системе, это один файл
(+файл сохранений .bin), подключается как "обычная" надстройка
.xla, .xlam или открывается как файл Excel
НЕ нужен .NET Framework, НE нужны какие-либо другие
библиотеки, НЕ нужна регистрация или активация, НЕ нужно подключение к
Интернет
Главная
страница надстройки BedvitXLL
(здесь можно посмотреть примеры, скачать надстройку)
|
XLL ▶
Functions
Функции
листа Excel
Высокопроизводительные
функции рабочих листов Excel, написанные на С/С++ и экспортируемые из XLL.
Во многом аналогичные стандартным функциям Excel.
|
Функции листа Excel,
категория: XLLBignumArithmeticFloat
|
XLL
▶ Functions
▶ SumFloat
dll v5.0
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
▶ Functions
▶ SubtractFloat
dll v5.0
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
▶ Functions
▶ MultiplyFloat
dll v5.0
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
▶ Functions
▶ DivideFloat
dll v5.0
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
▶ Functions
▶ PowerFloat
dll v5.0
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
▶ Functions
▶ RootFloat
dll v5.0
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!(#ЧИСЛО!) если ошибка.
|
Функции листа Excel,
категория: XLLBignumArithmeticInteger
|
XLL ▶ Functions ▶ SumInteger
dll v5.0
SumInteger
Сумма обычных/длинных чисел.
LPXLOPER12 SumInteger(LPXLOPER12 xlop1, XCHAR * xstr1, int
bignumBaseIn, int bignumBaseOut)
Параметры функции: xlop1 - число обычное, длинное (строка) или диапазон таких чисел. xstr1 - число обычное, длинное (строка) bignumBaseIn - база счисления входящего числа 2-62 (по умолчанию, если
не указана = 10). bignumBaseOut - база счисления возвращаемого/расчетного числа 2-62 (по
умолчанию, если не указана = 10).
Возвращает строку (длинное число) если команда выполнена успешно и
#NUM!(#ЧИСЛО!) если ошибка.
|
XLL ▶ Functions ▶ SubtractInteger
dll v5.0
SubtractInteger
Разница обычных/длинных чисел.
LPXLOPER12 SubtractInteger(LPXLOPER12 xlop1, XCHAR * xstr1, int
bignumBaseIn, int bignumBaseOut)
Параметры функции: xlop1 - число обычное, длинное (строка) xstr1 - число обычное, длинное (строка) bignumBaseIn - база счисления входящего числа 2-62 (по умолчанию, если
не указана = 10). bignumBaseOut - база счисления возвращаемого/расчетного числа 2-62 (по
умолчанию, если не указана = 10).
Возвращает строку (длинное число) если команда выполнена успешно и
#NUM!(#ЧИСЛО!) если ошибка.
|
XLL ▶ Functions ▶ MultiplyInteger
dll v5.0
MultiplyInteger
Произведение обычных/длинных чисел.
LPXLOPER12 MultiplyInteger(LPXLOPER12 xlop1, XCHAR * xstr1, int
bignumBaseIn, int bignumBaseOut)
Параметры функции: xlop1 - число обычное, длинное (строка) или диапазон таких чисел. xstr1 - число обычное, длинное (строка) bignumBaseIn - база счисления входящего числа 2-62 (по умолчанию, если
не указана = 10). bignumBaseOut - база счисления возвращаемого/расчетного числа 2-62 (по
умолчанию, если не указана = 10).
Возвращает строку (длинное число) если команда выполнена успешно и
#NUM!(#ЧИСЛО!) если ошибка.
|
XLL ▶ Functions ▶ DivideInteger
dll v5.0
DivideInteger
Деление обычных/длинных чисел.
LPXLOPER12 DivideInteger(LPXLOPER12 xlop1, XCHAR * xstr1, int
bignumBaseIn, int bignumBaseOut)
Параметры функции: xlop1 - число обычное, длинное (строка) xstr1 - число обычное, длинное (строка) bignumBaseIn - база счисления входящего числа 2-62 (по умолчанию, если
не указана = 10). bignumBaseOut - база счисления возвращаемого/расчетного числа 2-62 (по
умолчанию, если не указана = 10).
Возвращает строку (длинное число) если команда выполнена успешно и
#NUM!(#ЧИСЛО!) если ошибка.
|
XLL ▶ Functions ▶ PowerInteger
dll v5.0
PowerInteger
Возведение в степень обычных/длинных чисел.
LPXLOPER12 PowerInteger(LPXLOPER12 xlop1, int exponent, int
bignumBaseIn, int bignumBaseOut)
Параметры функции: xlop1 - число обычное, длинное (строка) exponent - экспонента (показатель степени) bignumBaseIn - база счисления входящего числа 2-62 (по умолчанию, если
не указана = 10). bignumBaseOut - база счисления возвращаемого/расчетного числа 2-62 (по
умолчанию, если не указана = 10).
Возвращает строку (длинное число) если команда выполнена успешно и
#NUM!(#ЧИСЛО!) если ошибка.
|
XLL ▶ Functions ▶ ModInteger
dll v5.0
ModInteger
Деление обычных/длинных чисел и возврат остатка (делит два числа и возвращает
только оставшуюся часть)
LPXLOPER12 ModInteger(LPXLOPER12 xlop1, XCHAR * xstr1, int
bignumBaseIn, int bignumBaseOut)
Параметры функции: xlop1 - число обычное, длинное (строка) xstr1 - число обычное, длинное (строка) bignumBaseIn - база счисления входящего числа 2-62 (по умолчанию, если
не указана = 10). bignumBaseOut - база счисления возвращаемого/расчетного числа 2-62 (по
умолчанию, если не указана = 10).
Возвращает строку (длинное число) если команда выполнена успешно и
#NUM!(#ЧИСЛО!) если ошибка.
|
XLL ▶ Functions ▶ FactorialInteger
dll v5.0
FactorialInteger
Факториал натурального числа n
LPXLOPER12 FactorialInteger(int n, int bignumBaseOut) Параметры функции:
n - натуральное число bignumBaseIn - база счисления входящего числа 2-62 (по умолчанию, если не указана = 10). bignumBaseOut - база счисления возвращаемого/расчетного числа 2-62 (по умолчанию, если не указана = 10).
Возвращает
строку (длинное число) если команда выполнена успешно и #NUM!(#ЧИСЛО!) если
ошибка.
|
XLL ▶ Functions ▶ ConvertBaseInteger
dll v5.0
ConvertBaseInteger
Конвертация обычного/длинного числа из одной базы счисления в другую.
LPXLOPER12 ConvertBaseInteger(LPXLOPER12 xlop1, int bignumBaseIn, int
bignumBaseOut)
Параметры функции: xlop1 - число обычное, длинное (строка) входящее bignumBaseIn - база счисления входящего числа 2-62 (по умолчанию, если
не указана = 10). bignumBaseOut - база счисления возвращаемого/расчетного числа 2-62 (по
умолчанию, если не указана = 10).
Возвращает строку (длинное число) если команда выполнена успешно и
#NUM!(#ЧИСЛО!) если ошибка.
|
Функции листа Excel,
категория: XLL
|
XLL ▶ Functions ▶ FilterUnicodeChar
dll v5.0
FilterUnicodeChar
Получить/удалить любые символы Unicode
из строки (отфильтровать)
LPXLOPER12 FilterUnicodeChar(XCHAR * StringIn, XCHAR * EnableChar,
XCHAR * DisableChar) Параметры функции:
1. StringIn - входящая строка
2. EnableChar - символы включаемые в итоговую строку (через
"-" указывается диапазон, сам "-" выводится/удаляется
если его поставить первым символом или последним в шаблоне)
3. DisableChar - символы исключаемые из итоговой строки (через
"-" указывается диапазон).
Последние два параметра - не обязательные. Можно задавать любой из них, можно
все два, можно никакой - тогда выводится первоначальная строка.
Возвращает строку с отфильтрованными символами Юникода.
|
XLL
▶ Functions
▶ QRcodePrint
dll v5.0
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 ▶ Functions ▶ TextJoinXLL
dll v5.0
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 ▶ Functions ▶ HelpXLL
dll v5.0
HelpXLL
Возвращает строку, содержащую все основные данные по работе надстройки,
аналогичные данным в команде меню "XLL Help"
LPXLOPER12 HelpXLL()
Параметры функции:
1.Без параметров
Возвращает строку, содержащую все основные данные по работе надстройки,
аналогичные данным в команде меню "XLL Help"
|
XLL ▶ Functions ▶ CoCreateGuidXLL
dll v5.1
CoCreateGuidXLL
Создает GUID — уникальное 128-битное целое число, используемое для CLSID и
идентификаторов интерфейса.
LPXLOPER12 CoCreateGuidXLL(int liteMode)
Параметры функции:
1. liteMode - режимы вывода: 0 - стандартный
"{E06AD101-5907-474B-8506-A7CD0149537F}", 1 - упрощенный
"c883f002273a4c63ae52f91c787ba1e9" (в нижнем регистре без дефисов и
фигурных скобок)
Возвращает строку в зависимости от выбранного режима вывода.
|
XLL ▶ Functions ▶ LikeXLL
dll v5.1
LikeXLL
Используется для сравнения двух строк.
LPXLOPER12 LikeXLL(XCHAR * string, XCHAR * pattern)
Параметры функции:
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 в зависимости от
итога сравнения строки с шаблоном.
|
XLL
▶ Commands
Команды XLL в Excel
Команды, использующие COM-взаимодействие с Excel,
позволяющие полностью использовать объектную модель Excel и сервер событий Excel.
|
Команды основного меню
библиотеки (надстройки) XLL в Excel
|
XLL ▶ Commands ▶ XLLcmdHelp
dll v5.0
XLL
Help
"О Продукте". Форма с информацией о продукте.
LPXLOPER12 XLLcmdHelp(XCHAR* param, LPXLOPER12 param2) param - режим диалога для команд меню XLL - см. "Диалог"
param2 - зарезервирован
Возвращает код ошибки: 0 - команда выполнена успешно и Error 2036, #NUM!,
#ЧИСЛО! - если ошибка.
Пример:
XLLcmdHelp("1") //Включены все сообщения для данной команды
|
XLL ▶ Commands ▶ XLLcmdOpen
dll v5.0
Открыть
Открыть и заразить сохраненные настройки и данные
LPXLOPER12 XLLcmdOpen(XCHAR* param=0, LPXLOPER12 param2) param - режим диалога для
команд меню XLL - см. "Диалог" param2 - зарезервирован
Возвращает код ошибки: 0 - команда выполнена успешно и Error 2036, #NUM!, #ЧИСЛО! - если
ошибка.
Пример:
XLLcmdOpen ("1") //Включены все сообщения для данной команды
|
XLL ▶ Commands ▶ XLLcmdSaveAs
dll v5.0
Сохр.как
Сохранить настройки и данные в указанный файл
LPXLOPER12 XLLcmdSaveAs(XCHAR* param=0, LPXLOPER12 param2)
param - режим диалога для команд меню XLL - см. "Диалог" param2 - зарезервирован
Возвращает код ошибки: 0 - команда выполнена успешно и Error 2036, #NUM!, #ЧИСЛО! - если
ошибка.
Пример:
XLLcmdSaveAs ("1") //Включены все сообщения для данной команды
|
XLL ▶ Commands ▶ XLLcmdTracePrecedents
dll v5.0
Влияющ.
Показать влияющие ячейки (на выделенный массив)
LPXLOPER12 XLLcmdTracePrecedents(XCHAR* param=0, LPXLOPER12 param2)
param - режим диалога для команд меню XLL - см. "Диалог" param2 - зарезервирован
Возвращает код ошибки: 0 - команда выполнена успешно и Error 2036, #NUM!, #ЧИСЛО! - если
ошибка.
Пример:
XLLcmdTracePrecedents ("1") //Включены все сообщения для данной
команды
|
XLL ▶ Commands ▶ XLLcmdTraceDependents
dll v5.0
Зависим.
Показать зависимые ячейки (от выделенного массива)
LPXLOPER12 XLLcmdTraceDependents(XCHAR* param=0, LPXLOPER12 param2)
param - режим диалога для команд меню XLL - см. "Диалог" param2 - зарезервирован
Возвращает код ошибки: 0 - команда выполнена успешно и Error 2036, #NUM!, #ЧИСЛО! - если
ошибка.
Пример:
XLLcmdTraceDependents ("1") //Включены все сообщения для данной
команды
|
XLL ▶ Commands ▶ XLLcmdRemoveArrows
dll v5.0
Убрать
Убрать все стрелки
LPXLOPER12 XLLcmdRemoveArrows(XCHAR* param=0, LPXLOPER12 param2)
param - режим диалога для команд меню XLL - см. "Диалог" param2 - зарезервирован
Возвращает код ошибки: 0 - команда выполнена успешно и Error 2036, #NUM!, #ЧИСЛО! - если
ошибка.
Пример:
XLLcmdRemoveArrows ("1") //Включены все сообщения для данной
команды
|
XLL ▶ Commands ▶ XLLcmdSetNumberFormat
dll v5.0
Числовой формат
Числовой формат
(NumberFormat) применить к выделенным ячейкам/сохранить в список форматов/удалить из списка форматов
LPXLOPER12 XLLcmdSetNumberFormat(XCHAR* param=0, LPXLOPER12 param2)
param - режим диалога для команд меню XLL - см. "Диалог" param2 - зарезервирован
Возвращает код ошибки: 0 - команда выполнена успешно и Error 2036, #NUM!, #ЧИСЛО! - если
ошибка.
Пример:
XLLcmdSetNumberFormat ("1") //Включены все сообщения для данной команды
|
XLL ▶ Commands ▶ XLLcmdIncreaseDecimal
dll v5.0
Ув.разряд
Увеличить разрядность числа
LPXLOPER12 XLLcmdIncreaseDecimal(XCHAR* param=0, LPXLOPER12 param2)
param - режим диалога для команд меню XLL - см. "Диалог" param2 - зарезервирован
Возвращает код ошибки: 0 - команда выполнена успешно и Error 2036, #NUM!, #ЧИСЛО! - если
ошибка.
Пример:
XLLcmdIncreaseDecimal ("1") //Включены все сообщения для данной
команды
|
XLL ▶ Commands ▶ XLLcmdDecreaseDecimal
dll v5.0
Ум.разряд
Уменьшить разрядность числа
LPXLOPER12 XLLcmdDecreaseDecimal(XCHAR* param=0, LPXLOPER12 param2)
param - режим диалога для команд меню XLL - см. "Диалог" param2 - зарезервирован
Возвращает код ошибки: 0 - команда выполнена успешно и Error 2036, #NUM!, #ЧИСЛО! - если
ошибка.
Пример:
XLLcmdDecreaseDecimal ("1") //Включены все сообщения для данной
команды
|
XLL ▶ Commands ▶ XLLcmdSetSheetFormat
dll v5.13
Ф.Лист
Хранение форматов листа и их применение к активному листу или к файлам в
выбранных папках.
Хранятся данные: обычный формат листа,
условный формат, проверка данных, примечания, закрепить области, масштаб,
отобразить сетку, показать заголовки, автофильтр.
Синтаксис
LPXLOPER12 XLLcmdSetSheetFormat
(XCHAR* param=0, LPXLOPER12 param2)
Параметры
param - режим диалога для команд меню XLL
- см. "Диалог" param2 - имя сохранения нужного формата (сохраняется в
пользовательской форме).
Возвращаемое значение
Возвращает код ошибки: 0 - команда
выполнена успешно и Error 2036, #NUM!, #ЧИСЛО! - если ошибка.
Комментарии
Для массовых операций с файлами есть два
фильтра: для имен файлов и для имен листов в файлах.
В обоих фильтрах применяется функция Like()
Примеры
Visual Basic
Sub
TestXLLcmdSetSheetFormat()
Dim dialogMode, formatName, result
'0 или пусто –
значение по умолчанию (то, что выбрано в меню)
'1 - Всё включено (рекомендуется).
'2 - Отключить пользовательские
сообщения.
'3 - Отключить информацию в
статус-баре Excel.
'4 - Отключить пользовательские
сообщения + информацию в статус-баре Excel.
'5 - Отключить всё (в т.ч. сообщения
об ошибках). Можно только кодом в командах меню, в первом параметре.
dialogMode = "1"
'Имя сохранения нужного формата (сохраняется в
пользовательской форме).
formatName = "Мой сохраненный
формат"
'Возвращает код ошибки: 0 - команда выполнена
успешно и Error 2036, #NUM!, #ЧИСЛО! - если ошибка.
'Если второй аргумент пропущен - выводится
пользовательская форма.
result = Application.RUN("XLLcmdSetSheetFormat",
dialogMode, formatName)
Debug.Print result
'примеры вариантов запуска:
'1.вывод пользовательской формы
Debug.Print
Application.RUN("XLLcmdSetSheetFormat", "1")
'2.отключение всех пользовательских сообщений,
в.ч. ошибок (вывод ошибки только как результат выполнения функции)
Debug.Print
Application.RUN("XLLcmdSetSheetFormat", "5",
formatName)
End Sub
Python
from win32com import
client
input_xll = r'C:\Users\...\AppData\Roaming\Microsoft\AddIns\BedvitXLL64.xll'
input_file = r'C:\Users\...\Documents\Test.xlsb'
app =
client.DispatchEx("Excel.Application")
app.Visible = True
app.RegisterXLL(input_xll)
workbook =
app.Workbooks.Open(input_file)
app.Application.Run("XLLcmdSetSheetFormat", "1", "Мой сохраненный формат")
app.Application.Quit()
del app
|
XLL ▶ Commands ▶ XLLcmdTextToNumber
dll v5.1
Число
Преобразовать выделенные значения/формулы, сохраненные как текст - в
числа/формулы (если выделена одна ячека, обрабатывается весь лист). Будут
удалены из числа: неразрывный пробел, пробел, апостроф, перенос строки.
Начиная
с версии 5.4 - можно настраивать свой список символов Unicode для удаления из
числа, см. подробнее.
LPXLOPER12 XLLcmdTextToNumber(XCHAR* param=0, LPXLOPER12 param2) param - режим диалога
для команд меню XLL - см. "Диалог" param2 - зарезервирован
Особенности:
+ максимальная длина строки для
преобразования в ячейке - 8190 символов.
+ если выделена одна ячейка, обрабатывается
весь лист
+ в процессе выполнения команды все скрытые
ячейки будут показаны.
+ по умолчанию будут удалены из числа:
пробел Ch(32), апостроф Ch(39), неразрывный пробел Ch(160)
+ список символов Unicode к удалению из
числа можно настроить.
+ этот список символов к удалению
применяется только для строк, которые удалось преобразовать в число (удалив
эти символы), т.е. в результате - для чисел. Если строку не удалось
преобразовать в число - строка выводится полностью, со всеми изначальными
символами.
+ новый список символов сохраняется
автоматически, при удачном выполнении команды.
+ список символов Unicode к удалению можно,
при необходимости, сбросить на список по умолчанию.
Возвращает код ошибки: 0 - команда выполнена успешно и Error 2036, #NUM!,
#ЧИСЛО! - если ошибка.
Пример: XLLcmdTextToNumber
("1")
//Включены все сообщения для данной команды
|
XLL ▶ Commands ▶ XLLcmdNumberToText
dll v5.1
Текст
Преобразовать выделенные числа/формулы - в значения/формулы, сохраненные как
текст (если выделена одна ячейка, обрабатывается весь лист) , см. подробнее.
LPXLOPER12 XLLcmdNumberToText(XCHAR* param=0, LPXLOPER12 param2) param - режим диалога
для команд меню XLL - см. "Диалог" param2 – зарезервирован
Особенности:
+ максимальная длина строки для
преобразования в ячейке - 8190 символов.
+ если выделена одна ячейка, обрабатывается
весь лист
+ в процессе выполнения команды все скрытые
ячейки будут показаны.
Возвращает код ошибки: 0 - команда выполнена успешно и Error 2036, #NUM!,
#ЧИСЛО! - если ошибка.
Пример: XLLcmdNumberToText
("1")
//Включены все сообщения для данной команды
|
XLL ▶ Commands ▶ XLLcmdTranspose
dll v5.0
Трансп
Транспонирование данных на месте
LPXLOPER12 XLLcmdTranspose(XCHAR* param=0, LPXLOPER12 param2)
param - режим диалога для команд меню XLL - см. "Диалог" param2 - зарезервирован
Возвращает код ошибки: 0 - команда выполнена успешно и Error 2036, #NUM!, #ЧИСЛО! - если
ошибка.
Пример:
XLLcmdTranspose("1") //Включены все сообщения для данной команды
|
Имена
(группа)
Показать скрытые имена, удалить ошибочные, удалить все имена
|
XLL ▶ Commands ▶ XLLcmdVisibleHiddenName
dll v5.0
Показать скрытые имена
Показать скрытые имена (отобразить в диспетчере имён)
LPXLOPER12 XLLcmdVisibleHiddenName(XCHAR* param=0, LPXLOPER12 param2)
param - режим диалога для команд меню XLL - см. "Диалог" param2 - зарезервирован
Возвращает код ошибки: 0 - команда выполнена успешно и Error 2036, #NUM!, #ЧИСЛО! - если
ошибка.
Пример:
XLLcmdVisibleHiddenName("1") //Включены все сообщения для данной
команды
|
XLL ▶ Commands ▶ XLLcmdDeleteErrorName
dll v5.0
Удалить
ошибочные имена
Удалить все имена с ошибочными значениями (в т.ч. скрытые, не отображаемые в
диспетчере имён)
LPXLOPER12 XLLcmdDeleteErrorName(XCHAR* param=0, LPXLOPER12 param2) param - режим диалога
для команд меню XLL - см. "Диалог" param2 - зарезервирован
Возвращает код ошибки: 0 - команда выполнена успешно и Error 2036, #NUM!, #ЧИСЛО! - если
ошибка.
Пример:
XLLcmdDeleteErrorName("1") //Включены все сообщения для данной
команды
|
XLL ▶ Commands ▶ XLLcmdDeleteNames
dll v5.0
Удалить все имена
Удалить все имена (в т.ч. скрытые, не отображаемые в диспетчере имён)
LPXLOPER12 XLLcmdDeleteNames(XCHAR* param=0, LPXLOPER12 param2)
param - режим диалога для команд меню XLL - см. "Диалог" param2 - зарезервирован
Возвращает код ошибки: 0 - команда выполнена успешно и Error 2036, #NUM!, #ЧИСЛО! - если
ошибка.
Пример: XLLcmdDeleteNames("1") //Включены все сообщения для данной
команды
|
УФ->Ф
(группа)
Перевести условное форматирование в обычный формат
|
XLL ▶ Commands ▶ XLLcmdConditionalFormatToFormat
dll v5.0
Условный
формат в обычный
Перевести условное форматирование в обычный формат ячейки в выделенном
диапазоне или на всем листе (в случае, если выделена одна ячейка)
LPXLOPER12 XLLcmdConditionalFormatToFormat(XCHAR* param=0, LPXLOPER12 param2) param - режим диалога
для команд меню XLL - см. "Диалог" param2 - зарезервирован
Возвращает код ошибки: 0 - команда выполнена успешно и Error 2036, #NUM!, #ЧИСЛО! - если
ошибка.
Пример:
XLLcmdConditionalFormatToFormat("1") //Включены все сообщения для
данной команды
|
XLL ▶ Commands ▶ XLLcmdConditionalFormatToFormatAllSheets
dll v5.0
Условный формат в обычный - все листы
Перевести условное форматирование в обычный формат на всех листах текущей книги (листы, защищенные паролем - не обрабатываются)
LPXLOPER12 XLLcmdConditionalFormatToFormatAllSheets(XCHAR* param=0,
LPXLOPER12 param2)
param - режим диалога для команд меню XLL - см. "Диалог" param2 - зарезервирован
Возвращает код ошибки: 0 - команда выполнена успешно и Error 2036, #NUM!, #ЧИСЛО! - если
ошибка.
Пример:
XLLcmdConditionalFormatToFormatAllSheets("1") //Включены все
сообщения для данной команды
|
XLL ▶ Commands ▶ XLLcmdFindSummands
dll v5.0
Поиск сл.
Поиск слагаемых для заданной суммы
LPXLOPER12 XLLcmdFindSummands(XCHAR* param=0, LPXLOPER12 param2)
param - режим диалога для команд меню XLL - см. "Диалог" param2 - зарезервирован
Возвращает код ошибки: 0 - команда выполнена успешно и Error 2036, #NUM!, #ЧИСЛО! - если
ошибка.
Пример:
XLLcmdFindSummands("1") //Включены все сообщения для данной команды
|
XLL ▶ Commands ▶ XLLcmdDuplicateValues
dll v5.0
Повторы
Выделить уникальным цветом группы повторов в выделенном диапазоне или на всем
листе (в случае, если выделена одна ячейка) и/или вывести статистику.
Выделение цветом нельзя отменить!
В
процессе выполнения команды все скрытые ячейки будут показаны.
LPXLOPER12 XLLcmdDuplicateValues(XCHAR* param=0, LPXLOPER12 param2) param - режим диалога
для команд меню XLL - см. "Диалог" param2 - зарезервирован
Возвращает код ошибки: 0 - команда выполнена успешно и Error 2036, #NUM!, #ЧИСЛО! - если
ошибка.
Пример:
XLLcmdDuplicateValues("1") //Включены все сообщения для данной
команды
|
XLL ▶ Commands ▶ XLLcmdFindValues
dll v5.0
Найти
Найти на текущем листе значения из выделенной ячейки и выделить все ячейки с
найденными дубликатами (учитываются значения и результаты формул). «Tab» -
переход по найденным (выделенным) ячейкам
LPXLOPER12 XLLcmdFindValues(XCHAR* param=0, LPXLOPER12 param2)
param - режим диалога для команд меню XLL - см. "Диалог"
param2 - зарезервирован
Возвращает код ошибки: 0 - команда выполнена успешно и Error 2036, #NUM!,
#ЧИСЛО! - если ошибка.
Пример:
XLLcmdFindValues("1") //Включены все сообщения для данной команды
|
XLL ▶ Commands ▶ XLLcmdSheets
dll v5.0
Листы
Вывести на новый лист список всех листов текущей книги (с гиперссылкой)
LPXLOPER12 XLLcmdSheets(XCHAR* param=0, LPXLOPER12 param2)
param - режим диалога для команд меню XLL - см. "Диалог" param2 - зарезервирован
Возвращает код ошибки: 0 - команда выполнена успешно и Error 2036, #NUM!, #ЧИСЛО! - если
ошибка.
Пример:
XLLcmdSheets("1") //Включены все сообщения для данной команды
|
XLL ▶ Commands ▶ XLLcmdErrors
dll v5.0
Ошибки
Вывести на новый лист список всех ячеек текущей книги, содержащих ошибку.
Обрабатываются только видимые листы.
LPXLOPER12 XLLcmdErrors(XCHAR* param=0, LPXLOPER12 param2)
param - режим диалога для команд меню XLL - см. "Диалог"
param2 - зарезервирован
Возвращает код ошибки: 0 - команда выполнена успешно и Error 2036, #NUM!,
#ЧИСЛО! - если ошибка.
Пример:
XLLcmdErrors("1") //Включены все сообщения для данной команды
|
Связи
(группа)
Вывести на новый лист список связей на другие книги или список ячеек данной
книги, содержащих связи на другие книги.
|
XLL ▶ Commands ▶ XLLcmdLinksWorkBook
dll v5.0
Список
связей на другие книги
Вывести на новый лист список всех книг, на которые есть связи из данной
книги.
LPXLOPER12 XLLcmdLinksWorkBook(XCHAR* param=0, LPXLOPER12 param2)
param - режим диалога для команд меню XLL - см. "Диалог"
param2 - зарезервирован
Возвращает код ошибки: 0 - команда выполнена успешно и Error 2036, #NUM!,
#ЧИСЛО! - если ошибка.
Пример:
XLLcmdLinksWorkBook("1") //Включены все сообщения для данной
команды
|
XLL ▶ Commands ▶ XLLcmdLinksRangeWorkBook
dll v5.0
Список ячеек со связями на
другие книги
Вывести на новый лист список всех ячеек данной книги, содержащих связи на
другие книги.
LPXLOPER12 XLLcmdLinksRangeWorkBook(XCHAR* param=0, LPXLOPER12 param2)
param - режим диалога для команд меню XLL - см. "Диалог"
param2 - зарезервирован
Возвращает код ошибки: 0 - команда выполнена успешно и Error 2036, #NUM!,
#ЧИСЛО! - если ошибка.
Пример:
XLLcmdLinksRangeWorkBook("1") //Включены все сообщения для данной
команды
|
XLL ▶ Commands ▶ XLLcmdBreakLinksSheet
dll v5.0
Разорвать
связи на ЛИСТЕ
Разорвать связи на текущем ЛИСТЕ с другими ЛИСТАМИ этой книги и ВНЕШНИМИ
файлами. Формулы с такими связями при разрыве будут преобразованы в
принимаемые на данный момент значения.
LPXLOPER12 XLLcmdBreakLinksSheet(XCHAR* param=0, LPXLOPER12 param2)
param - режим диалога для команд меню XLL - см. "Диалог"
param2 - зарезервирован
Возвращает код ошибки: 0 - команда выполнена успешно и Error 2036, #NUM!,
#ЧИСЛО! - если ошибка.
Пример:
XLLcmdBreakLinksSheet ("1") //Включены все сообщения для данной
команды
|
XLL ▶ Commands ▶ XLLcmdCompactValues
dll v5.0
Упл.данные
Уплотнить данные, удалив
пустые (не содержащие данные) строки и столбцы. Обрабатывается весь лист. Эту
команду нельзя отменить. В процессе выполнения команды все скрытые ячейки
будут показаны.
LPXLOPER12 XLLcmdCompactValues(XCHAR* param=0, LPXLOPER12 param2)
param - режим диалога для команд меню XLL - см. "Диалог"
param2 - зарезервирован
Возвращает код ошибки: 0 - команда выполнена успешно и Error 2036, #NUM!,
#ЧИСЛО! - если ошибка.
Пример:
XLLcmdCompactValues("1") //Включены все сообщения для данной
команды
|
XLL ▶ Commands ▶ XLLcmdA1R1C1ReferenceStyle
dll v5.0
A1<->R1C1
Стиль ссылок A1. Изменение формата ссылок на ячейки в формулах Excel
LPXLOPER12 XLLcmdA1referenceStyle(XCHAR* param=0, LPXLOPER12 param2)
param - режим диалога для команд меню XLL - см. "Диалог" param2 - зарезервирован
Возвращает код ошибки: 0 - команда выполнена успешно и Error 2036, #NUM!, #ЧИСЛО! - если
ошибка.
Пример:
XLLcmdA1referenceStyle("1") //Включены все сообщения для данной
команды
|
Face
(группа)
Коллекция иконок Excel по FaceID (около 32 тыс. штук). Можно вывести на лист
|
XLL ▶ Commands ▶ XLLcmdCreateMenuFaceID
dll v5.0
Вывести
Вывести все возможные иконки Excel в меню (по ID)
LPXLOPER12 XLLcmdCreateMenuFaceID(XCHAR* param=0, LPXLOPER12 param2)
param - режим диалога для команд меню XLL - см. "Диалог"
param2 - зарезервирован
Возвращает код ошибки: 0 - команда выполнена успешно и Error 2036, #NUM!,
#ЧИСЛО! - если ошибка.
Пример:
XLLcmdCreateMenuFaceID("1") //Включены все сообщения для данной
команды
|
XLL ▶ Commands ▶ XLLcmdDeleteMenuFaceID
dll v5.0
Удалить
Удалить ранее выведенные иконки Excel из меню
LPXLOPER12 XLLcmdDeleteMenuFaceID(XCHAR* param=0, LPXLOPER12 param2) param - режим диалога
для команд меню XLL - см. "Диалог" param2 - зарезервирован
Возвращает код ошибки: 0 - команда выполнена успешно и Error 2036, #NUM!, #ЧИСЛО! - если
ошибка.
Пример:
XLLcmdDeleteMenuFaceID("1") //Включены все сообщения для данной
команды
|
XLL ▶ Commands ▶ XLLcmdCopyFormula
dll v5.0
Copy
Копировать формулы для вставки (без смещения адресов). Не используется буфер
обмена. Копируются и скрытые ячейки.
LPXLOPER12 XLLcmdCopyFormulaLocal(XCHAR* param=0, LPXLOPER12 param2)
param - режим диалога для команд меню XLL - см. "Диалог"
param2 - зарезервирован
Возвращает код ошибки: 0 - команда выполнена успешно и Error 2036, #NUM!,
#ЧИСЛО! - если ошибка.
Пример:
XLLcmdCopyFormulaLocal("1") //Включены все сообщения для данной
команды
|
XLL ▶ Commands ▶ XLLcmdPasteFormula
dll v5.0
Paste
Вставить формулы (без смещения адресов). Не используется буфер обмена. В
процессе выполнения команды все скрытые ячейки будут показаны.
LPXLOPER12 XLLcmdPasteFormulaLocal(XCHAR* param=0, LPXLOPER12 param2) param - режим диалога
для команд меню XLL - см. "Диалог" param2 - зарезервирован
Возвращает код ошибки: 0 - команда выполнена успешно и Error 2036, #NUM!, #ЧИСЛО! - если
ошибка.
Пример:
XLLcmdPasteFormulaLocal("1") //Включены все сообщения для данной
команды
|
XLL ▶ Commands ▶ XLLcmdVBAModuleStore
dll v5.0
VBA store - beta-версия, эксперимент
Хранилище VBA модулей
LPXLOPER12 XLLcmdVBAModuleStore(XCHAR* param=0, LPXLOPER12 param2)
param - режим диалога для команд меню XLL - см. "Диалог" param2 - зарезервирован
Возвращает код ошибки: 0 - команда выполнена успешно и Error 2036, #NUM!, #ЧИСЛО! - если
ошибка.
Пример:
XLLcmdVBAModuleStore("1") //Включены все сообщения для данной
команды
|
XLL ▶ Commands ▶ XLLcmdRangeStore
dll v5.0
Range store
Шифрование данных алгоритмами AES на листе Excel, шифрования файла
пользовательских сохранений, хранение зашифрованных диапазонов
формул/значений с листа Excel в файле пользовательских сохранений (см.
https://bedvit.ru/xll/crypto/) Использованы исходники Crypto++
Алгоритмы шифрования AES:
1 - "Без шифрования"
2 - "AES256:ECB"
3 - "AES256:CBC"
4 - "AES256:OFB"
5 - "AES256:CFB"
6 - "AES256:CBC-CTS"
7 - "AES256:CTR"
Функционал:
+ Можно шифровать как отдельные значения так и диапазоны/массивы.
+ Шифровать можно на листе, шифровать можно сохраняемые диапазоны и шифровать
можно и файл пользовательских сохранений.
+ Шифровать данные можно прям на листе Excel, с дальнейшей расшифровкой
нужного диапазона или всего листа в виде значений (value2), так и в виде
формул (formula).
+ Зашифрованные данные можно хранить в XLL как в виде значений (value2), так
и в виде формул (formula). Формула может содержать максимум 8 тыс. символов
+ Пароль нигде не хранится, его знает только пользователь и при утере,
расшифровать данные не получится никому
+ Тип данных и алгоритм шифрования запоминается при зашифровки, и их нужно
указывать только при шифровании. При расшифровки нужен только 1 пароль
(повтор пароля нужен только для шифрования, для расшифровки достаточно
одного-первого)
+ Зашифрованные диапазоны - независимые, т.е. можно каждый отдельный диапазон
зашифровать со своим паролем, можно зашифровать диапазон дважды (для гиков)
+ Реализовано автоматическое распознавание разных блоков зашифрованных
диапазонов, с разными алгоритмами и их расшифровка разом (см. видео), но
должен быть одинаковый пароль для случаев пакетной распаковки (сразу всего
листа)
+ Для данных у которых упаковка будет экономить размер итоговой зашифрованной
строки (для массивов и длинных строк) - используется алгоритм сжатия WinAPI:XPRESS_HUFF
+ Реализован механизм (shared
string table), как и в Excel, для оптимизации размера одинаковых строк
(для массивов), см. особенности ниже.
+ Данные на листе Excel шифруются для каждой ячейки отдельно (для возможности
хранить и расшифровывать данные независимо для каждой ячейки)
+ Итоговый результат шифрования (любого типа данных: строки, числа, ошибки и
т.д.) - хранится в виде строки (массива зашифрованных байт).
+ Для каждой команды есть всплывающие подсказки
Особенности:
+ Сохранять диапазон в списке диапазонов можно в зашифрованном виде или не в
зашифрованном (в незашифрованном эффективнее сжимаются сохранения т.к.
обрабатываются все дубликаты во всех сохранённых диапазонах, а не частично в
отдельном диапазоне), но можно шифровать сам файл пользовательских настроек -
эффективность сжатия сохраняется.
+ Есть возможность автоматически определять границы диапазона, выделяя весь
лист или целый столбец или целую строку, см. usedrange
+ Добавлена возможность выключать пользовательские сообщения и сообщения в
статус-баре Excel
UPD: 03.02.2024 BedvitXLL.dll_v5.1
+добавлена возможность использования разных локализаций и разной разрядности
Excel при шифровании, дешифровки и сохранении формул/значений (см. видео
справку ниже).
+добавлена обработка ошибок на листе Excel при шифровании, дешифровки и
сохранении формул/значений.
Справочно: форма для шифрования - МОДАЛЬНАЯ, т.е. что бы выделить новый диапазон
нужно щелкнуть на адрес.
UPD: 20.06.2024 BedvitXLL.dll_v5.8
+ В процессе выполнения команды все скрытые ячейки будут показаны.
LPXLOPER12 XLLcmdRangeStore(XCHAR* param=0, LPXLOPER12 param2) param - режим диалога
для команд меню XLL - см. "Диалог" param2 - зарезервирован
Возвращает код ошибки: 0 - команда выполнена успешно и Error 2036, #NUM!, #ЧИСЛО! - если
ошибка.
Пример:
XLLcmdHelp("1") //Включены все сообщения для данной команды
|
Архив
(группа)
Тестовые команды, beta-функционал или команды, которые устарели или были
заменены более новыми (в след. версиях библиотеки эти команды могут быть
удалены)
|
v(version)
Текущая версия XLL-библиотеки
|
f(file)
Версия и расположение активного файла пользовательских настроек (все
пользовательские настройки и данные сохраняются в нем сразу же при
изменениях)
|
XLL ▶ Commands ▶ XLLcmdRegisterBedvitCOM
dll v5.0
BedvitCOM: OFF/ON/R
Регистрация библиотеки
BedvitCOM в реестре и автоподключение в
References (VBA): OFF/ON/R
OFF - нет автоподключения (ни в реестре
Windows, ни в
References (VBA)
ON - есть автоподключение (и в реестре
Windows, и в
References (VBA)
R - только регистрация в реестре Windows
(нет автоподключения в
References (VBA) Порядок переключений:
OFF->ON->R->OFF
LPXLOPER12 XLLcmdRegisterBedvitCOM(XCHAR* param=0, LPXLOPER12 param2)
param - режим диалога для команд меню XLL - см. "Диалог" param2 - зарезервирован
Возвращает код ошибки: 0 - команда выполнена успешно и Error 2036, #NUM!, #ЧИСЛО! - если
ошибка.
Пример:
XLLcmdHelp("1") //Включены все сообщения для данной команды
|
XLL ▶ Commands ▶ XLLcmdMenuLanguage
dll v5.0
Язык
Язык основного меню и контекстного меню
LPXLOPER12
XLLcmdMenuLanguag (XCHAR* param=0, LPXLOPER12 param2)
param - режим диалога для команд меню XLL -
см. "Диалог"
param2 - зарезервирован
Возвращает код ошибки: 0 - команда выполнена успешно и Error 2036, #NUM!,
#ЧИСЛО! - если ошибка.
Пример:
XLLcmdMenuLanguag("1") //Включены все сообщения для данной команды
|
XLL ▶ Commands ▶ XLLcmdDialogMode
dll v5.0
Диалог
Режим диалога для команд меню XLL (пользовательские сообщения, информация в
статус-баре Excel и сообщения об ошибках).
Константы:
0 или пусто – значение по
умолчанию (то, что выбрано в меню)
1 - Всё включено (рекомендуется).
2 - Отключить пользовательские сообщения.
3 - Отключить информацию в статус-баре Excel.
4 - Отключить пользовательские сообщения + информацию в статус-баре Excel.
5 - Отключить всё (в т.ч.
сообщения об ошибках). Можно только кодом в командах меню, в первом
параметре.
LPXLOPER12 XLLcmdDialogMode(XCHAR* param=0, LPXLOPER12 param2)
param - режим диалога для команд меню XLL - см. "Диалог"
param2 - зарезервирован
Возвращает код ошибки: 0 - команда выполнена успешно и Error 2036, #NUM!,
#ЧИСЛО! - если ошибка.
Пример:
XLLcmdDialogMode("1") //Включены все сообщения для данной команды
|
XLL
API
Список команд XLL.
Выводится в списке: Имя команды меню
XLL/Имя кнопки/Описание
Все Команды XLL (с префиксом XLLcmd) зарегистрированы в Excel и их можно
вызывать с нужным параметром.
Пример (VBA):
Application.RUN "XLLcmdHelp", "1" 'Вызов формы с
информацией о продукте.
|
XLL ▶ Commands ▶ XLLcmdMenuSetting
dll v5.0
МЕНЮ
Настройка меню BedvitXLL (основное + контекстное). Можно включать и отключать
элементы меню.
LPXLOPER12 XLLcmdMenuSetting(XCHAR* param=0, LPXLOPER12 param2) param - режим диалога
для команд меню XLL - см. "Диалог" param2 - зарезервирован
Возвращает
код ошибки: 0 - команда выполнена успешно и Error 2036, #NUM!, #ЧИСЛО! - если
ошибка.
Пример:
XLLcmdMenuSetting("1") //Включены все сообщения для данной команды
|
Команды библиотеки
(надстройки) XLL не в меню
|
XLL
▶ Commands
▶ XLLcmdE12xlSet
dll v5.3
XLLcmdE12xlSet
Команда XLL. Очень быстро
помещает значения констант в ячейки или диапазоны.
Данные помещаются в том же формате, в
котором эти данные были изначально в значении или в массиве, т.е. без
преобразования.
Использована функция xlSet из Excel C API.
LPXLOPER12 XLLcmdE12xlSet(XCHAR * param, LPXLOPER12 param2, LPXLOPER12 pxReference, LPXLOPER12 pxValue) param - командная строка XLL API - см. "XLL
API": 1й параметр - Режим диалога для команд меню XLL - см.
"Диалог"
param2 – зарезервирован
pxReference - Прямоугольная
ссылка (адрес), описывающая целевую ячейку или ячейки. Адрес должен описывать
смежные ячейки.
pxValue - Значение или значения, помещаемые
в ячейку или ячейки.
Аргумент pxValue
pxValue может быть значением или массивом.
Если это значение, этим значением заполняется весь диапазон назначения. Если
это массив, элементы массива помещаются в соответствующие расположения в
прямоугольнике.
Если для четвертого аргумента используется
горизонтальный массив, он дублируется вниз, чтобы заполнить весь
прямоугольник. Если используется вертикальный массив, он дублируется вправо
для заполнения всего прямоугольника. Если вы используете прямоугольный
массив, и он слишком мал для прямоугольного диапазона, в который вы хотите
его поместить, этот диапазон заполняется исходными данными размером с массив,
а остальной диапазон заполняется #Н/Д.
Если целевой диапазон меньше исходного
массива, значения копируются до пределов целевого диапазона, а лишние данные
из массива игнорируются.
Чтобы очистить элемент прямоугольника
назначения, используйте элемент массива типа Empty в исходном массиве.
Чтобы очистить весь прямоугольник
назначения, опустите четвертый аргумент.
Ограничения
Невозможно отменить xlSet. Кроме того, он
удаляет все сведения об отмене, которые могли быть доступны ранее.
XlSet может помещать в ячейки только
константы, а не формулы. Максимальная длина помещаемой строки 8190 символов.
Возвращает
код ошибки: 0 - команда выполнена успешно и Error 2036, #NUM!, #ЧИСЛО! - если
ошибка.
Пример
использования:
Visual Basic
Sub TestXLLcmdE12xlSet()
Dim i, testSize As Long: testSize
= 2
Dim arrOrValue: ReDim arrOrValue(1 To testSize, 1 To 1)
For i = 1 To testSize
arrOrValue(i, 1) = Str(i) 'MAX количество символов для ячейки: 8190
Next
'Варианты использования:
'1.Выводим массив или значение
по указанному диапазону на лист Excel
Debug.Print Application.RUN("XLLcmdE12xlSet", "", 0, Range("a1:a2").Address, arrOrValue)
'2.
Помещаем в диапазон значение "1"
Debug.Print Application.RUN("XLLcmdE12xlSet", "", 0, Range("b1:b2").Address, "1")
'3.
Выводим массив по указанному диапазону на лист Excel, первый элемент = Empty
arrOrValue(1, 1) = Empty 'первый элемент Empty
Debug.Print Application.RUN("XLLcmdE12xlSet", "", 0, Range("c1:c2").Address, arrOrValue)
'4 Очищаем
заданный диапазон от данных
[d1:d5] = 2 'заполняем данными (2)
диапазон для теста
Debug.Print
Application.RUN("XLLcmdE12xlSet", "", 0,
Range("d1:d2").Address) '
очищаем в заданном диапазоне
End Sub
|
COM
Библиотека COM
DLL c COM интерфейсом. Реализованы dual-интерфейсы с Automation-совместимыми
типами данных, структур (поддержка как раннего связывания (статистической
линковки), так и позднего (динамической). Раннее - предпочтительнее в части
скорости (на 50% быстрее).
Регистрация COM реализовано как
под админом, так и под пользователем (актуально в офисной части клиентов).
Регистрация стандартная:
Админ: Regsvr32 "FullName.DLL"
Пользователь: Regsvr32 /i /n "FullName.DLL"
Удалить из реестра:
Regsvr32 /u "FullName"
Главная
страница библиотеки BedvitCOM (здесь
можно посмотреть примеры, скачать надстройку)
|
COM ▶
BignumArithmeticInteger
Класс
BignumArithmeticInteger
Проект
основан на исходниках (С++) библиотеки MPIR, Edition 3.0.0. (https://github.com/wbhart/mpir)
Реализовано два класса: класс целых
чисел с арифметикой (BignumArithmeticInteger) и класс чисел с
плавающей точкой (BignumArithmeticFloat).
При создании экземпляра класса создается
массив из длинных чисел и арифметикой. К Bignum числам можно обращаться
по индексам в массиве.
BignumArithmeticInteger (Bignum)
увеличивается в памяти по мере расчета - автоматически, перераспределяя
память.
Размер чисел ничем не ограничен, кроме
вашей оперативной памяти.
|
COM
▶ BignumArithmeticInteger ▶ Help
dll v4.0
Help
HTML Справка
(без параметров). Открывает html-страницу с описанием свойств и методов
класса.
void Help()
|
COM
▶ BignumArithmeticInteger ▶ Bignum
dll v4.0
Bignum
Принимает и возвращает BSTR строку StringBSTR (задает число
или возвращает значение).
BSTR Bignum(LONG Bignum, LONG BignumBase=10)
= BSTR Bignum-индекс длинного числа в массиве. BignumBase-база длинного числа (от 2 до 62), по умолчанию = 10.
|
COM
▶ BignumArithmeticInteger ▶ Sign
dll v4.0
Sign
Возвращает знак длинного числа
LONG Sign(LONG Bignum) Возвращает 1 если Bignum >
0, 0 если Bignum =
0, и -1 если Bignum <
0.
|
COM
▶ BignumArithmeticInteger ▶ Even
dll v4.0
Even
Определяет, является ли Bignum четное или нечетное.
LONG Even(BYTE Bignum)
Возвращает 1 если Bignum четное, 0 если Bignum нечетное.
|
COM
▶ BignumArithmeticInteger ▶ Compare
dll v4.0
Compare
Сравнивает два длинных числа.
LONG Compare(LONG Bignum1, LONG Bignum2)
Возвращает 1 если Bignum1 > Bignum2, 0
если Bignum1 = Bignum2, и -1 если Bignum1 < Bignum2.
|
COM
▶ BignumArithmeticInteger ▶ BignumSet
dll v4.0
BignumSet
Задает
число с параметрами аналогичными методу Bignum().
BignumSet(LONG Bignum, BSTR StringBSTR, LONG BignumBase=10)
|
COM
▶ BignumArithmeticInteger ▶ Sum
dll v4.0
Sum
Суммирует
два длинных числа.
Sum(BYTE BignumSet, BYTE Bignum1, BYTE Bignum2); BignumSet = Bignum1 + Bignum2
|
COM
▶ BignumArithmeticInteger ▶ SumL
dll v4.0
SumL
Суммирует длинное число с обычным.
SumL(BYTE BignumSet, BYTE Bignum1, LONG_PTR LONG_PTR); BignumSet = Bignum1 + LONG_PTR(х64:LONG_PTR= LONGLONG, х32:LONG_PTR= LONG)
|
COM
▶ BignumArithmeticInteger ▶ Abs
dll v4.0
Abs
Возвращает модуль числа
Abs(BYTE BignumSet, BYTE Bignum1); Возвращает модуль значения из Bignum1 в BignumSet.
|
COM
▶ BignumArithmeticInteger ▶ Negate
dll v4.0
Negate
Задает значение с противоположным знаком
Negate(BYTE BignumSet, BYTE Bignum1);
Возвращает значение с противоположным знаком из Bignum1 в BignumSet. BignumSet =
- Bignum1.
|
COM
▶ BignumArithmeticInteger ▶ Subtract
dll v4.0
Subtract
Вычитает из одного длинного числа другое
Subtract(BYTE BignumSet, BYTE Bignum1, BYTE Bignum2); BignumSet = Bignum1 - Bignum2
|
COM
▶ BignumArithmeticInteger ▶ SubtractL
dll v4.0
SubtractL
Вычитает из длинного числа обычное.
SubtractL(BYTE BignumSet, BYTE Bignum1, LONG_PTR LONG_PTR); BignumSet = Bignum1 - LONG_PTR.
|
COM
▶ BignumArithmeticInteger ▶ Multiply
dll v4.0
Multiply
Умножает
одно длинное число на другое.
Multiply(BYTE BignumSet, BYTE Bignum1, BYTE Bignum2); BignumSet = Bignum1 * Bignum2.
|
COM
▶ BignumArithmeticInteger ▶ MultiplyL
dll v4.0
MultiplyL
Умножает длинное число на обычное.
MultiplyL(BYTE BignumSet, BYTE Bignum1, LONG_PTR LONG_PTR); BignumSet = Bignum1 * LONG_PTR.
|
COM
▶ BignumArithmeticInteger ▶ Divide
dll v4.0
Divide
Делит одно длинное число на другое
Divide(BYTE BignumQuotient, BYTE BignumRemainder, BYTE Bignum1, BYTE Bignum2); При делении получаем частное в BignumQuotient,
остаток от деления в BignumRemainder = Bignum1 / Bignum2.
|
COM
▶ BignumArithmeticInteger ▶ DivideL
dll v4.0
DivideL
Делит
длинное число на обычное.
DivideL(BYTE BignumQuotient, BYTE BignumRemainder, BYTE Bignum1, LONG_PTR LONG_PTR);
При делении получаем частное в BignumQuotient, остаток от деления
в BignumRemainder = Bignum1 / LONG_PTR.
|
COM ▶ BignumArithmeticInteger ▶ Power
dll v4.0
Power
Возводит в степень длинное число.
Power(BYTE BignumSet, BYTE Bignum1, LONG_PTR LONG_PTR);
Возводит в степень LONG_PTR длинное число Bignum1,
результат возвращает в BignumSet. BignumSet = Bignum1 ^ LONG_PTR.
|
COM
▶ BignumArithmeticInteger ▶ Clone
dll v4.0
Clone
Копирует одно длинное число в другое.
Clone(BYTE BignumSet, BYTE Bignum1); Копирует Bignum1 в BignumSet. BignumSet = Bignum1
|
COM
▶ BignumArithmeticInteger ▶ RootRem
dll v4.0
RootRem
Извлекает корень длинного числа
RootRem(BYTE BignumRoot, BYTE BignumRemainder, BYTE Bignum1, LONG_PTR n_root); Извлекает корень n_root-степени из Bignum1. Целочисленный
результат возвращает в BignumRoot, остаток в BignumRemainder =
(n-th root)√ Bignum1.
|
COM
▶ BignumArithmeticInteger ▶ Factorial
dll v4.0
Factorial
Возвращает факториал для длинного числа
Factorial(BYTE BignumSet, LONG n); Возвращает в BignumSet факториал n!
|
COM
▶ BignumArithmeticInteger ▶ Fibonacci
dll v4.0
Fibonacci
Возвращает в число Фибоначчи для длинного числа
Fibonacci(BYTE BignumSet, LONG_PTR n); Возвращает в BignumSet число Фибоначчи n.
Fn+1 = Fn + Fn-1
|
COM
▶ BignumArithmeticInteger ▶ LucNum
dll v4.0
LucNum
Возвращает число Лукаса для длинного числа
LucNum(BYTE BignumSet, LONG_PTR n); Возвращает в BignumSet число Лукаса n.
Ln+1 =Ln + Ln-1
|
COM
▶ BignumArithmeticInteger ▶ FileSet
dll v4.0
FileSet Загружает длинное число из файла (*.txt)
FileSet(BYTE Bignum, BSTR StringBSTRFileName, LONG BignumBase=10); Принимает BSTR*
строку StringBSTRFileName в качестве полного пути и имени файла. Bignum-индекс длинного
числа в массиве. BignumBase-база числа (от 2 до 62), по умолчанию = 10.
|
COM
▶ BignumArithmeticInteger ▶ FileGet
dll v4.0
FileGet
Сохраняет длинное число в файл (*.txt)
FileGet(BYTE Bignum, BSTR StringBSTRFileName, LONG BignumBase=10); Сохраняет длинное число в файл
(*.txt). Принимает BSTR*
строку StringBSTRFileName в качестве полного пути и имени
файла. Bignum-индекс длинного числа в массиве. BignumBase-база числа (от 2 до 62), по умолчанию = 10.BignumSet
|
COM
▶ BignumArithmeticInteger ▶ Clear
dll v4.0
Clear
Освобождает
память занятую длинным числом
Clear(LONG Bignum=-1);
Освобождает память занятую длинным числом Bignum, или освобождает память
занятую всеми числами при заданном параметре по умолчанию = -1.
|
COM
▶ BignumArithmeticInteger ▶ BignumArraySize
dll v4.0
BignumArraySize
Возвращает количество чисел Bignum в созданном классе/массиве
LONG Val = BignumArraySize();
Возвращает количество чисел Bignum в созданном классе/массиве.
Начиная с v2.0.0.0 (теперь массив чисел может быть произвольного размера, а
не как ранее 256 чисел, размер увеличиваться автоматически.)
|
COM ▶
BignumArithmeticFloat
Класс
BignumArithmeticFloat
Проект
основан на исходниках (С++) библиотеки MPIR, Edition 3.0.0. (https://github.com/wbhart/mpir)
Реализовано два класса: класс целых
чисел с арифметикой (BignumArithmeticInteger) и класс чисел с
плавающей точкой (BignumArithmeticFloat).
При создании экземпляра класса создается
массив из длинных чисел и арифметикой.
К Bignum числам можно
обращаться по индексам в массиве.
BignumArithmeticFloat (Bignum) - задается
изначально, т.к. дробь может быть бесконечной (по умолчанию принимается
минимальный размер).
Размер чисел ничем не ограничен, кроме вашей оперативной памяти.
Обратите внимание, что функции
BignumArithmeticFloat (Bignum) основаны на таком же принципе действия, как и
IEEE, но не предназначены для плавного расширения для арифметики IEEE P754. В
частности, результаты, полученные на одном компьютере, часто отличаются от
результатов на компьютере с другим размером машинного слова.
|
COM
▶ BignumArithmeticFloat ▶ Help
dll v4.0
Help
HTML Справка (без параметров). Открывает html-страницу с описанием
свойств и методов класса.
void Help()
|
COM ▶ BignumArithmeticFloat ▶ SizeBits
dll v4.0
SizeBits
Задает и возвращает размер длинного числа.
LONG Val = SizeBits(BYTE Bignum, LONG_PTR* pVal)
= .LONG Val;
Задает и возвращает размер длинного числа в БИТАХ LONG Val.
Bignum-индекс длинного числа в массиве.
|
COM ▶ BignumArithmeticFloat ▶ Bignum
dll v4.0
Bignum
Принимает и возвращает BSTR строку StringBSTR (задает число
или возвращает значение).
BSTR* StringOut = Bignum(BYTE Bignum, LONG BignumBase=10, LONG_PTR Precision=0, BSTR Separator=”.”, VARIANT_BOOL eNotationOFF=0)
= BSTR* StringIn;
Принимает и возвращает BSTR* строку String (задает число или
возвращает значение). Bignum-индекс длинного числа в массиве. BignumBase-база длинного числа (от 2 до 62), по умолчанию = 10. Precision – точность (кол-во значимых цифр в числе), по умолчанию
= 0 - максимальная (равна заданному размеру в битах). Separator – символ разделителя целой и дробной частей числа, по
умолчанию точка(“.”). eNotationOFF – по умолчанию =0 - экспоненциальная запись
(Е-нотация), 1 – дробная по выбранному основанию.
Для Е-нотации с основанием от 2 до 62: в десятичном основании - символ 'e', в
других 2 - 9,11 - 62 - символ '@'.
Мантисса выводится в указанном основании, экспонента всегда в десятичном
формате.
|
COM ▶ BignumArithmeticFloat ▶ Sign
dll v4.0
Sign
Возвращает знак длинного числа
LONG Val = Sign(BYTE Bignum);
Возвращает знак длинного числа LONG Val.
Возвращает
1 если Bignum >
0, 0 если Bignum =
0, и -1 если Bignum <
0.
|
COM ▶ BignumArithmeticFloat ▶ Compare
dll v4.0
Compare
Сравнивает два длинных числа.
LONG Val = Compare(BYTE Bignum1, BYTE Bignum2);
Возвращает 1 если Bignum1 > Bignum2, 0
если Bignum1 = Bignum2, и -1 если Bignum1 < Bignum2.
|
COM ▶ BignumArithmeticFloat ▶ SizeBitsSet
dll v4.0
SizeBitsSet
Метод. Задает размер длинного числа.
SizeBitsSet(BYTE Bignum, LONG_PTR SizeBits);
Задает размер длинного числа в БИТАХ LONG Val.
|
COM ▶ BignumArithmeticFloat ▶ BignumSet
dll v4.0
BignumSet
Задает длинное число.
BignumSet(BYTE Bignum, BSTR StringBSTR, LONG BignumBase=10, BSTR Separator=”.”); Задает число с параметрами, аналогичными методу Bignum(), см. Bignum().
|
COM ▶ BignumArithmeticFloat ▶ Sum
dll v4.0
Sum
Суммирует два длинных числа.
Sum(BYTE BignumSet, BYTE Bignum1, BYTE Bignum2) BignumSet = Bignum1 + Bignum2
|
COM ▶ BignumArithmeticFloat ▶ SumL
dll v4.0
SumL
Суммирует длинное число с обычным.
SumL(BYTE BignumSet, BYTE Bignum1, LONG_PTR LONG_PTR); BignumSet = Bignum1 + LONG_PTR(х64:LONG_PTR= LONGLONG, х32:LONG_PTR= LONG)
|
COM ▶ BignumArithmeticFloat ▶ Abs
dll v4.0
Abs
Возвращает модуль числа
Abs(BYTE BignumSet, BYTE Bignum1); Возвращает модуль значения из Bignum1 в BignumSet.
|
COM ▶ BignumArithmeticFloat ▶ Subtract
dll v4.0
Subtract
Вычитает из одного длинного числа другое
Subtract(BYTE BignumSet, BYTE Bignum1, BYTE Bignum2); BignumSet = Bignum1 - Bignum2
|
COM ▶ BignumArithmeticFloat ▶ SubtractL
dll v4.0
SubtractL
Вычитает из длинного числа обычное.
SubtractL(BYTE BignumSet, BYTE Bignum1, LONG_PTR LONG_PTR); BignumSet = Bignum1 - LONG_PTR.
|
COM ▶ BignumArithmeticFloat ▶ Multiply
dll v4.0
Multiply
Умножает
одно длинное число на другое.
Multiply(BYTE BignumSet, BYTE Bignum1, BYTE Bignum2); BignumSet = Bignum1 * Bignum2.
|
COM ▶ BignumArithmeticFloat ▶ MultiplyL
dll v4.0
MultiplyL
Умножает длинное число на обычное.
MultiplyL(BYTE BignumSet, BYTE Bignum1, LONG_PTR LONG_PTR); BignumSet = Bignum1 * LONG_PTR.
|
COM ▶ BignumArithmeticFloat ▶ Divide
dll v4.0
Divide
Делит одно длинное число на другое
Divide(BYTE BignumQuotient, BYTE BignumRemainder, BYTE Bignum1, BYTE Bignum2); При делении получаем частное в BignumQuotient,
остаток от деления в BignumRemainder = Bignum1 / Bignum2.
|
COM ▶ BignumArithmeticFloat ▶ DivideL
dll v4.0
DivideL
Делит
длинное число на обычное.
DivideL(BYTE BignumQuotient, BYTE BignumRemainder, BYTE Bignum1, LONG_PTR LONG_PTR);
При делении получаем частное в BignumQuotient, остаток от деления
в BignumRemainder = Bignum1 / LONG_PTR.
|
COM ▶ BignumArithmeticFloat ▶ Root
dll v4.0
Root
Извлекает квадратный корень длинного числа
Root(BYTE BignumSet, BYTE Bignum1);
Извлекает квадратный корень из Bignum1.
Результат возвращает в BignumSet. BignumSet = √ Bignum1.
|
COM ▶ BignumArithmeticFloat ▶ Negate
dll v4.0
Negate
Задает значение с противоположным знаком
Negate(BYTE BignumSet, BYTE Bignum1);
Возвращает значение с противоположным знаком из Bignum1 в BignumSet. BignumSet =
- Bignum1.
|
COM ▶ BignumArithmeticFloat ▶ Power
dll v4.0
Power
Возводит в степень длинное число.
Power(BYTE BignumSet, BYTE Bignum1, LONG_PTR LONG_PTR);
Возводит в степень LONG_PTR длинное число Bignum1,
результат возвращает в BignumSet. BignumSet = Bignum1 ^ LONG_PTR.
|
COM ▶ BignumArithmeticFloat ▶ Clone
dll v4.0
Clone
Копирует одно длинное число в другое.
Clone(BYTE BignumSet, BYTE Bignum1); Копирует Bignum1 в BignumSet. BignumSet = Bignum1
|
COM ▶ BignumArithmeticFloat ▶ FileSet
dll v4.0
FileSet
Загружает длинное число из файла (*.txt)
FileSet(BYTE Bignum, BSTR StringBSTRFileName, LONG BignumBase=10); Принимает BSTR*
строку StringBSTRFileName в качестве полного пути и имени файла. Bignum-индекс длинного
числа в массиве. BignumBase-база числа (от 2 до 62), по умолчанию = 10.
|
COM ▶ BignumArithmeticFloat ▶ FileGet
dll v4.0
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 ▶ Clear
dll v4.0
Clear
Освобождает
память занятую длинным числом
Clear(LONG Bignum=-1);
Освобождает память занятую длинным числом Bignum, или освобождает память
занятую всеми числами при заданном параметре по умолчанию = -1.
|
COM ▶ BignumArithmeticFloat ▶ BignumArraySize
dll v4.0
BignumArraySize
Возвращает количество чисел Bignum в созданном классе/массиве
LONG Val = BignumArraySize();
Возвращает количество чисел Bignum в созданном классе/массиве.
Начиная с v2.0.0.0 (теперь массив чисел может быть произвольного размера, а
не как ранее 256 чисел, размер увеличиваться автоматически.)
|
COM ▶ BignumArithmeticFloat ▶ GetToBignumInt
dll v4.0
GetToBignumInt
Преобразовать Bignum из Float в Integer.
BSTR* StringOut = GetToBignumInt(LONG Bignum, LONG BignumBase=10); ВАЖНО! преобразование происходит с заданной ранее точностью в битах для Float
(SizeBitsSet). Без
округлений, отбрасывается дробная часть.
Будьте внимательнее в таких преобразованиях.
Начиная с v2.0.0.0.
|
COM ▶
VBA
Класс
VBA
Сборник инструментов, не
вошедших в другие классы:
Инструменты для работы с массивами (сортировка,
удаление дубликатов, транспонирование, изменение размерности с сохранением
данных, фильтрация и т.д.)
Работа со строками:
+хеширование строки разными алгоритмами SHA (+ новейшие
SHA3)
+получить/удалить любые символы Unicode из строки
+удалить из текста лишние пробелы
+поиск вхождения подстроки в строку
+заменить одну подстроку на другую
+поиск строки в одном массиве с выводом данных из
второго массива (из соответствующей
позиции найденного значению в первом массиве)
Генератор
QR-кода + конвертации графических форматов из одного в другой
Cериализация и шифрование
|
COM ▶ VBA ▶ ArraySortS
dll v4.0
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
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 ▶ FilterUnicodeChar
dll v4.0
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 ▶ LikeUnicodeChar
dll v4.0
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 ▶ Trim
dll v4.0
Trim
Удаляет из текста все пробелы, за исключением одиночных пробелов между
словами.
HRESULT
Trim([in] BSTR StringIn, [out, retval] BSTR* StringOutRetval);
Параметры метода:
1.StringIn - входящая строка
|
COM ▶ VBA ▶ InStr
dll v4.0
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 ▶ Replace
dll v4.0
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 ▶ ArraySortV
dll v4.0
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
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 ▶ Transpose
dll v4.0
Transpose
быстрое транспонирование (на месте) двухмерного массива (поддерживаются все
типы данных).
HRESULT
Transpose([in, out] VARIANT* array_in_out);
Параметры метода:
1.array_in_out - указатель на массив
(ввод/вывод)
|
COM ▶ VBA ▶ QRcodePrint
dll v4.0
QRcodePrint
Печать QR-кода в Excel, Word, 1С и проч. приложениях с поддержкой COM/ActiveX
(см. https://bedvit.ru/com/qr/)
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
Option Explicit Sub QR_Generate() Dim bVBA As Object: Set bVBA = CreateObject("BedvitCOM.VBA") 'позднее связывание Dim fileName As String: fileName = Environ("Temp") & "\QR.png" 'печать QR в файл (в пользовательский Temp) Dim convertToFile As String: convertToFile = Environ("Temp") & "\QR.tif" Dim QRcodeText As String: QRcodeText = "https://www.cyberforum.ru/blogs/829006/blog6514.html" Dim resultFileName As String 'печать QR в файл (в пользовательский Temp) и вывести на лист Excel 'с аргументами по умолчанию resultFileName = bVBA.QRcodePrint(QRcodeText, fileName) ActiveSheet.Shapes.AddPicture resultFileName, False, True, 0, 0, -1, -1 'с нужными аргументами resultFileName = bVBA.QRcodePrint(QRcodeText, fileName, 4, 4, 255, 0, 0, 0, 1, 4) ActiveSheet.Shapes.AddPicture resultFileName, False, True, 200, 0, -1, -1 'Конвертировать формат изображения bVBA.ConvertFormatImage fileName, convertToFile, 3 'формат (tiff), см. в описании End Sub
Visual
Basic
Sub QR_Generate_Fast() ActiveSheet.Shapes.AddPicture CreateObject("BedvitCOM.VBA").QRcodePrint("Здесь инфо для печати", Environ("Temp") & "\QR.png"), False, True, 0, 0, -1, -1 End Sub
2. 1C -
регистрируем COM нужной разрядности (можно под
пользователем), далее код (по аналогии с Excel)
|
COM ▶ VBA ▶ ConvertFormatImage
dll v4.0
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 ▶ GetRowsCountCSVansi
dll v4.0
GetRowsCountCSVansi
Возвращает кол-во строк в файле CSV.
HRESULT GetRowsCountCSVansi([in] BSTR FileIn, [in, defaultvalue(0)]
LONG FileFlagNoBuffering, [out, retval] LONG* RowsCountOutRetval);
Beta-версия функции,
тестирование и описание Подробнее на
форуме.
|
COM ▶ VBA ▶ GetRowCSVansi
dll v4.0
GetRowCSVansi
возвращает найденную строку в файле CSV по индексу.
HRESULT
GetRowCSVansi([in] BSTR FileIn, [in] LONG IndexString, [in,
defaultvalue(0)] LONG FileFlagNoBuffering, [out, retval] BSTR*
StringOutRetval);
Beta-версия функции,
тестирование и описание Подробнее на
форуме.
|
COM ▶ VBA ▶ FindRowsInCSVansi
dll v4.0
FindRowsInCSVansi
Возвращает найденную строку/строки в файле 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 ▶ SortDeleteDuplicateRowsCSVansi
dll v4.0
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 ▶ SHAstrUTF8
dll v4.0
SHAstrUTF8
Хеширование строки алгоритмами SHA (см. https://bedvit.ru/com/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
Пример использования:
Visual
Basic
Sub SHA_1()
Dim bCOM As New BedvitCOM.VBA
Debug.Print bCOM.HashStringSHA("String", 1) 'VersionSHA = 1, SHA1
End Sub
|
COM ▶ VBA ▶ MDstrUTF8
dll v4.0
MDstrUTF8
Хеширование строки алгоритмами MD (см. https://bedvit.ru/com/sha/)
Использованы исходники 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 ▶ AESstrUTF8
dll v4.0
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 ▶ Array2Dto1D
dll v4.0
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
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
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 ▶ Array1Dto2D
dll v4.0
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
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
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 ▶ ArrayFilterV
dll v4.0
ArrayFilterV
Фильтр одномерного и двухмерного СОМ-массива (VARIANT) (см. https://bedvit.ru/com/arrayfilterv/)
Инструмент для фильтрации одномерного и
двухмерного СОМ-массива (тип данных 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
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 ▶ ArrayCharLowerV
dll v4.0
ArrayCharLowerV
Преобразовать все символы строки в нижний регистр (в массиве).
HRESULT
ArrayCharLowerV([in, out] VARIANT* array_in_out);
Параметры функции:
1.array_in_out – массив строк, который
нужно преобразовать (на месте)
|
COM ▶ VBA ▶ ArrayCharUpperV
dll v4.0
ArrayCharUpperV
Преобразовать все символы строки в ВЕРХНИЙ регистр (в массиве).
HRESULT
ArrayCharUpperV([in, out] VARIANT* array_in_out);
Параметры функции:
1.array_in_out - массив, который нужно
преобразовать (на месте)
|
COM ▶ VBA ▶ ArrayCharToNumV
dll v4.0
ArrayCharToNumV
Преобразовать все данные в тип: Double (числа сохраненные как текст)
(в массиве).
HRESULT
ArrayCharToNumV([in, out] VARIANT* array_in_out);
Параметры функции:
1.array_in_out - массив, который
нужно преобразовать (на месте)
|
COM ▶ VBA ▶ ArrayNumToCharV
dll v4.0
ArrayNumToCharV
Преобразовать
все данные в тип: String (в массиве).
HRESULT
ArrayNumToCharV([in, out] VARIANT* array_in_out);
Параметры функции:
1.array_in_out - массив, который
нужно преобразовать (на месте)
|
COM ▶ VBA ▶ Version
dll v4.0
Version
Версия библиотеки
BedvitCOM.dll
HRESULT Version([out, retval] VARIANT* versionDLLRetval);
|
COM ▶ VBA ▶ FileName
dll v4.0
FileName
Полный путь к зарегистрированной библиотеки BedvitCOM.dll
HRESULT FileName([out, retval] VARIANT* fileNameDLLRetval);
|
COM ▶ VBA ▶ VariantCopy
dll v4.0
VariantCopy
Глубокая копия
VARIANT.
HRESULT VariantCopy([in] VARIANT* variantIn, [out, retval] VARIANT*
variantCopyRetval);
Параметры функции:
1. variantIn – исходный VARIANT, с которого
делается копия
|
COM ▶ VBA ▶ ArrayDtoD
dll v4.0
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 ▶ ArrayReDim
dll v4.0
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 ▶ ArraySize
dll v4.0
ArraySize
Размер СОМ – массива. Количество элементов в сумме по всем измерениям.
HRESULT
ArraySize([in] VARIANT* arrayIn, [out, retval] VARIANT* arraySizeRetval);
Параметры функции:
1. arrayIn – массив, для
которого нужно получить количество всех элементов.
|
COM ▶ VBA ▶ SplitS
dll v4.0
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 ▶ SplitV
dll v4.0
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 ▶ ArrayCopyStoV
dll v4.0
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 ▶ ArrayConvertStoV
dll v4.0
ArrayConvertStoV
Преобразование «на месте» СОМ-массива с типом данных BSTR(строка) в
СОМ-массив с типом данных VARIANT.
HRESULT
ArrayConvertStoV([in, out] VARIANT* arrayInOut, [in, defaultvalue(0)]
LONG multiThreading);
Параметры функции:
1. arrayInOut – массив меняемый
«на месте»
2. multiThreading - включение
многопоточных вычислений
|
COM ▶ VBA ▶ ArrayConvertVtoS
dll v4.0
ArrayConvertVtoS
Преобразование «на месте» СОМ-массива с типом данных VARIANT в СОМ-массив с
типом данных BSTR(строка).
HRESULT ArrayConvertVtoS([in, out] VARIANT* arrayInOut, [in,
defaultvalue(0)] LONG multiThreading);
Параметры функции:
1. arrayInOut – массив меняемый
«на месте»
2. multiThreading - включение
многопоточных вычислений
|
COM ▶ VBA ▶ Like
dll v4.0
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 ▶ RegexMatchECMAScript
dll v4.0
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 ▶ UnicodeCharCodeGet
dll v4.0
UnicodeCharCodeGet
Возвращает юникод указанного символа в строке.
HRESULT
UnicodeCharCodeGet([in] BSTR stringIn, [in] LONG position, [out,
retval] SHORT* unicodeCharRetval);
Параметры функции:
1.stringIn – строка в которой
смотрим символ
2.position – позиция символа в
строке (отсчет с 1)
|
COM ▶ VBA ▶ UnicodeCharCodeSet
dll v4.0
UnicodeCharCodeSet
Меняет указанный символ в строке на указанный юникод
HRESULT UnicodeCharCodeSet([in] BSTR stringIn, [in] LONG position,
[in] SHORT unicodeChar);//строки с 1, массивы с 0
Параметры функции:
1.stringIn – строка в которой
меняем символ
2.position – позиция символа в
строке (отсчет с 1)
|
COM ▶ VBA ▶ CoCreateGuid
dll v4.0
CoCreateGuid
создает GUID — уникальное
128-битное целое число.
HRESULT
CoCreateGuid([in, defaultvalue(0)]LONG liteMode, [out, retval]
VARIANT* GUIDstringOutRetval);
Параметры функции:
1. liteMode – режим вывода,
стандартный = 0 и упрощенный =1, ("{E06AD101-5907-474B-8506-A7CD0149537F}"
и "c883f002273a4c63ae52f91c787ba1e9" соответственно).
|
COM
▶ VBA
▶ VariantSerialization
dll v5.0
VariantSerialization
Cериализация и десериализация типа данных Variant, используемый в COM, VB,
VBA, C++, Python и других поддерживающих СОМ языков (см. https://bedvit.ru/com/serialization/)
Поддерживаются базовые типы и массивы.
Объекты
не сериализуются.
В некоторой степени - аналог 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, для оптимизации размера одинаковых строк.
Пример использования
Visual
Basic
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
|
COM
▶ VBA
▶ VariantDeserialization
dll v5.0
VariantDeserialization
Cериализация и десериализация типа данных Variant, используемый в COM, VB,
VBA, C++, Python и других поддерживающих СОМ языков (см. https://bedvit.ru/com/serialization/)
Поддерживаются базовые типы и массивы.
Объекты не сериализуются.
В некоторой степени - аналог 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, для оптимизации размера одинаковых строк.
Пример использования
Visual
Basic
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
|
COM
▶ VBA
▶ VariantAES256Encrypt
dll v5.0
VariantAES256Encrypt
Шифрование данных алгоритмами AES (зашифровать) (см. https://bedvit.ru/com/crypto/)
Использованы исходники 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
▶ VariantAES256Decrypt
dll v5.0
VariantAES256Decrypt
Шифрование данных алгоритмами AES (расшифровать) (см. https://bedvit.ru/com/crypto/)
Использованы исходники 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 ▶ VBA ▶ ValueFormatExcelSheet
dll v5.6
ValueFormatExcelSheet
Преобразования данных в формат выгрузки на лист Excel (для текста проставляется апостроф(') первым символом)
HRESULT ValueFormatExcelSheet([in] VARIANT valueIn, [out,
retval]VARIANT* valueOutRetval);
Параметры функции:
1. valueIn – входящие данные,
отдельное значение или массив
2.valueOutRetval – исходящие данные
в формате выгрузки на лист Excel (для текста
проставляется апостроф (') первым символом).
|
COM ▶ UnorderedMap
Класс UnorderedMap
BedvitCOM.UnorderedMap
Реализация в COM ассоциативного контейнера, содержащего пары
ключ-значение с уникальными ключами. Поиск, вставка и удаление элементов
имеют среднюю постоянную сложность.
Часть библиотеки BedvitCOM (начиная с v1.0.4.7, в XLL c
v2.0.1.5).
Использован стандартный контейнер С++: std::unordered_map (хеш-таблица)
КЛЮЧ: можно использовать любые данные (не включая ссылки на
массивы и объекты), ключ хранится как строка (конвертируется, если нужно, из
другого типа данных).
ЗНАЧЕНИЕ: можно использовать любые данные (включая ссылки на
массивы, объекты и даже на другую хеш-таблицу)
(см.
https://bedvit.ru/com/unorderedmap/)
|
COM ▶ UnorderedMap ▶ Find
dll v4.0
Find
Поиск значения по ключу, возвращает true, если найден. Если value задан - возвращает значение (опционально) (см. https://bedvit.ru/com/unorderedmap/)
HRESULT Find([in] VARIANT key, [in, out, optional] VARIANT* value,
[out, retval] VARIANT_BOOL* resultRetval);
|
COM ▶ UnorderedMap ▶ Insert
dll v4.0
Insert
Вставляет пару ключ-значения по ключу, возвращает true, если успешно, false -
если ключ уже есть (не перезаписывается) (см. https://bedvit.ru/com/unorderedmap/)
HRESULT Insert([in] VARIANT key, [in] VARIANT value, [out, retval]
VARIANT_BOOL* resultRetval);
|
COM ▶ UnorderedMap ▶ InsertOrAssign
dll v4.0
InsertOrAssign
Вставляет или перезаписывает пару ключ-значения по ключу, возвращает true,
если создан новый и false если обновлен уже существующий (см. https://bedvit.ru/com/unorderedmap/)
HRESULT InsertOrAssign([in] VARIANT key, [in] VARIANT value, [out,
retval] VARIANT_BOOL* resultRetval);
|
COM ▶ UnorderedMap ▶ Erase
dll v4.0
Erase
Удаляет пару ключ-значения по ключу, возвращает true, если успешно (см.
https://bedvit.ru/com/unorderedmap/)
HRESULT Erase([in] VARIANT key, [out, retval] VARIANT_BOOL*
resultRetval);
|
COM ▶ UnorderedMap ▶ Clear
dll v4.0
Clear
Очистить весь контейнер (см. https://bedvit.ru/com/unorderedmap/)
HRESULT
Clear();
|
COM ▶ UnorderedMap ▶ Size
dll v4.0
Size
Возвращает размер контейнера (количество пар ключ-значение) (см. https://bedvit.ru/com/unorderedmap/)
HRESULT Size([out, retval] LONG* resultRetval);
|
COM ▶ UnorderedMap ▶ RangeSet
dll v4.0
RangeSet
Вставляет пары ключ-значения из массива/диапазона, возвращает количество
вставленных пар ключ-значение. Из дубликатов - загружается только первый по
порядку (см. https://bedvit.ru/com/unorderedmap/)
HRESULT RangeSet([in] VARIANT range, [out, retval] LONG*
resultRetval);
|
COM ▶ UnorderedMap ▶ RangeGet
dll v4.0
RangeGet
Возвращает количество выгруженных элементов в массив с указанной нижней
границей массива (по умолчанию = 0) (см. https://bedvit.ru/com/unorderedmap/)
HRESULT RangeGet([out] VARIANT* range, [in, defaultvalue(0)] LONG
lowerBound, [out, retval] LONG* resultRetval);
|
COM ▶ UnorderedMap ▶ SetArray1D
dll v4.0
SetArray1D
Вставляет пары ключ-значения из одномерного массива по порядку (ключи, потом
значения), возвращает количество вставленных пар ключ-значение. Из дубликатов
- загружается только первый по порядку (см. https://bedvit.ru/com/unorderedmap/)
HRESULT SetArray1D([in] VARIANT range, [out, retval] LONG*
resultRetval);
|
COM ▶ UnorderedMap ▶ GetArray1D
dll v4.0
GetArray1D
Возвращает количество выгруженных элементов в
одномерный массив по порядку (ключи, потом значения), с указанной нижней
границей массива (по умолчанию = 0) (см. https://bedvit.ru/com/unorderedmap/)
HRESULT GetArray1D([out] VARIANT* range, [in, defaultvalue(0)] LONG
lowerBound, [out, retval] LONG* resultRetval);
|