Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 88 След.
Как ускорить эксель?, задействовать всю производительность компьютера для работы Эксель
 
Так бывает когда это выгрузка из 1С и листы скрыты и есть объединенные ячейки.
«Бритва Оккама» или «Принцип Калашникова»?
Экспорт данных из модели Power Pivot в cvs или файлы Excel
 
Цитата
PooHkrd написал:
Смотрите  здесь . Экспериментируйте на копии!
Цитата
Gerzzog написал:
Сработало на модели где немного строк, а вот на большой модели макрос выбивает ошибку "An error occurred - Method Open of object _Recordset failed"
Была задача автоматизировать процесс в одну кнопку.
DAX Studio не справился, потому как я не умею его готовить.

Посему пришлось использовать решение выложенное выше с апгрейдом:
1.Выгружаются данные любого размера (у меня 2,5 млн строк, 60 столбцов, в основном текст)
2.Спец.символы экранируются, в данном случае кавычки
3.Числа сохраняются без кавычек, что правильно распознается SQL-сервером
4.Дата сохраняется в формате, который понимает SQL: "yyyy-mm-dd hh:mm:ss"
5.Отключен Timeout, который вызывал отключение запроса на больших временных отрезках (больших данных): cmd.CommandTimeout = 0 '
6.Поменял фильтр CSV-файлов для нового Excel, кто хочет может допилить до "правильного" кода не привязанного к фильтру, а привязанного к CSV: OFD.FilterIndex = 21
7.Оставил всеми любимый GoTo - на функционал не влияет, кто хочет подпилить - прошу.
8.Файл выгружается в кодировке Windows-1251, не знаю, может ли VBA выгружать в другой, мне было не нужно, можно тоже подпилить при желании.


Да, забыл...
По скорости выгрузки +- паритет с DAX Studio (у меня в тестах быстрее, чем DAX Studio),
Плюс NULL-значения не выгружает (;;), что в SQL и распознается как NULL. DAX Studio выгружает как пустую строку(;"";), что, я считаю, некорректно, т.к. в SQL попадает как пустая строка.
Плюс DAX Studio дату оформляет в виде строки с кавычками так, что SQL не распознает как дату.
Плюс DAX Studio проставляет в число системный разделитель дробной части, т.е. "," (запятая). В инструменте всегда "." (точка), что корректно загружается в SQL.

Из особенностей инструмента: числовые значения если число дробное и меньше нуля, ведущий нуль до разделителя дробной части не проставляется, пример: число 0,002365 отображается как .002365, так отрабатывает Str(), такие числа нормально распознаются, проблем не было. Иногда число отображается в Экспоненциальном виде 2.12344E+21, по той же причине. В моем проекте с этим тоже проблем не было.


Код
'Экспорт в CSV из модели данных PowerQuery
'06.02.2024

'Для работы нужно активировать библиотеки (Tools -> Preferences...):
'-Microsoft Scripting Runtime
'-Microsoft ActiveX Data Objects 6.1 Library
'-Microsoft ActiveX Data Objects Recordset 6.0 Library

Option Explicit

Public FSO     As New FileSystemObject

Sub main()

    Dim ModelList As String
    Dim OFD    As FileDialog
    Dim i      As Integer
    Dim ModelNum As Integer
    Dim tmp    As String
    Dim t

    ModelList = "Доступные в данной книге модели:" + Chr(10) + Chr(13) + Chr(13)
    If ThisWorkbook.Model.ModelTables.Count <> 0 Then
        For i = 1 To ThisWorkbook.Model.ModelTables.Count
            ModelList = ModelList & i & ". " & ThisWorkbook.Model.ModelTables.Item(i).Name & Chr(10) & Chr(13)
        Next i
    Else
        ModelList = ModelList & " Нет доступных моделей"
    End If


ModelNameInput:

    ModelNum = 0
    tmp = InputBox(ModelList, "Введите номер модели")

    If IsNumeric(tmp) Then
        If CInt(tmp) > ThisWorkbook.Model.ModelTables.Count Or CInt(tmp) <= 0 Then
            MsgBox "Incorrect Model num", vbOKOnly
            GoTo ModelNameInput
        Else
            ModelNum = CInt(tmp)
        End If
    Else
        If tmp <> "" Then
            MsgBox "Incorrect Model num", vbOKOnly
            GoTo ModelNameInput
        Else
            Exit Sub
        End If
    End If

    Set OFD = Application.FileDialog(msoFileDialogSaveAs)

    OFD.Title = "Выберите путь и имя файла"
    OFD.ButtonName = "Сохранить"
    OFD.FilterIndex = 21
    OFD.InitialFileName = "export.csv"
    OFD.InitialView = msoFileDialogViewLargeIcons

    t = Timer
    If OFD.Show <> 0 Then
        Call ExportToCsv(ThisWorkbook.Model.ModelTables.Item(ModelNum).Name, OFD.SelectedItems.Item(1), True)
    Else
    End If
    
    Set OFD = Nothing
    MsgBox "Готово! Время, сек.: " & (Timer - t), vbInformation
End Sub


Public Sub ExportToCsv(QueryName As String, exportPath As String, ShowColumnNames As Boolean)
    Dim wbTarget As Workbook
'    Dim ws As Worksheet
    Dim rs As Object
    Dim cmd As New ADODB.Command
    Dim fileCSV As TextStream
    Dim i As Long, x, max_iter, iter, sn, row, col, strCSV As String
    Dim batch_size: batch_size = 1000 ' Размер одного блока '1000
    
    Application.StatusBar = "(" & Now() & ") Экспорт данных в CSV..."
    DoEvents
    
    Set wbTarget = ThisWorkbook

    ' Загрузка модели
    wbTarget.Model.Initialize

    'Send query to the model
    Set cmd.ActiveConnection = wbTarget.Model.DataModelConnection.ModelConnection.ADOConnection
    cmd.CommandTimeout = 0 ' Отключение прерывания подключения после определенного времени
    cmd.CommandText = "EVALUATE '" & QueryName & "'"   '

    Set rs = CreateObject("ADODB.Recordset")
    rs.Open cmd

    Set fileCSV = FSO.CreateTextFile(exportPath, True)

    If ShowColumnNames Then
        For i = 0 To rs.Fields.Count - 1
            strCSV = strCSV & IIf(i > 0, ";", "") & VarToCSV(Mid(rs.Fields(i).Name, InStr(1, rs.Fields(i).Name, "[") + 1, Len(rs.Fields(i).Name) - InStr(1, rs.Fields(i).Name, "[") - 1))
        Next i

        fileCSV.Write strCSV & vbNewLine
    End If
    
    max_iter = rs.RecordCount \ batch_size + IIf(rs.RecordCount Mod batch_size, 1, 0)
    For iter = 1 To max_iter
        sn = rs.GetRows(batch_size)

        ReDim c(0 To UBound(sn))
        ReDim b(0 To UBound(sn, 2))

        For row = 0 To UBound(sn, 2)
            For col = 0 To UBound(sn)
                c(col) = VarToCSV(sn(col, row))
            Next
            b(row) = Join(c, ";") 'строка
        Next
        strCSV = Join(b, vbNewLine) & vbNewLine 'строки
        fileCSV.Write strCSV
    Next iter

    fileCSV.Close
    rs.Close
    Set fileCSV = Nothing
    Set rs = Nothing
    Set cmd = Nothing
    
    Application.StatusBar = False

End Sub

Function VarToCSV(ByVal v) As String

    If VarType(v) = vbDate Then
        If v = Int(v) Then
            VarToCSV = FORMAT(v, "yyyy-mm-dd")
        Else
            VarToCSV = FORMAT(v, "yyyy-mm-dd hh:mm:ss")
        End If
            VarToCSV = """" & VarToCSV & """"
            
    ElseIf VarType(v) = vbString Then
        VarToCSV = """" & Replace(v, """", """""") & """"
        
    ElseIf VarType(v) = vbEmpty Then
        VarToCSV = "" '"NULL"
        
    ElseIf VarType(v) = vbNull Then
        VarToCSV = "" '"NULL"
        
    Else
        VarToCSV = Trim(Str(v))
        
    End If
    
End Function

Изменено: bedvit - 06.02.2024 18:43:23
«Бритва Оккама» или «Принцип Калашникова»?
Шифрование данных на листе Excel и в VBA
 
04.02.2024 BedvitXLL.dll_v5.1

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

Как сохраняются текстовые форматы в функциях форматирования в разных локализациях Win + Excel, как сам Excel с этим справляется пока вопрос открытый.
Изменено: bedvit - 05.02.2024 10:05:30
«Бритва Оккама» или «Принцип Калашникова»?
Экспорт данных из модели Power Pivot в cvs или файлы Excel
 
Андрей VG, Андрей привет! Подскажи, а существует ли в DAX Studio.возможность автоматизировать процесс выгрузки данных в CSV. К примеру жмакнув где-то кнопку?
«Бритва Оккама» или «Принцип Калашникова»?
Разъеснение по взлому XLL от bedvit
 
Senaki, к сожалению, единственного тестера в той теме забанили (не за взлом - я давал офф. разрешение, как разработчик на "стресс-тестирование", а за несоблюдение других правил). Сам с интересом почитаю, если такая информация появятся.
«Бритва Оккама» или «Принцип Калашникова»?
Шифрование данных на листе Excel и в VBA
 
Релиз BedvitXLL v5.0
Добавил описание на сайт, примеры шифрования тоже. Всем, кому интересно шифрование в XLL. Шифрование в COM
Изменено: bedvit - 22.01.2024 09:16:12
«Бритва Оккама» или «Принцип Калашникова»?
Шифрование данных на листе Excel и в VBA
 
Бахтиёр,
а) этот инструмент позволяет зашифровать нужный диапазон данных (формул) и пользователь может так же на них ссылатся, когда нужно - можно этот диапазон расшифровать и сделать пересчет модели.
б) формулу можно пересчитать и зашифровать, при следующем пересчёте - можно сделать это еще раз. В динамике получать результат из зашифрованных формул нельзя.

+Для работы нужна надстройка, ее можео просто открыть или установить в папку надстроек. Работает как обычная надстройка под правами пользователя.

+Поддерживаются все символы юникода, какие сможет отобразить Excel - это вопрос шрифтов.
Изменено: bedvit - 18.01.2024 10:33:21
«Бритва Оккама» или «Принцип Калашникова»?
Шифрование данных на листе Excel и в VBA
 
Новая редакция BedvitXLL64v5.0b (beta)
Добавленный функционал:
+для каждой команды есть всплывающие подсказки
+хранить и шифровать можно значения (value2) или формулы (formula). Формула может содержать максимум 8 тыс. символов
+добавлены разные алгоритмы шифрования
+тип данных и алгоритм шифрования запоминается при зашифровки, и их нужно указывать только при шифровании. При расшифровки нужен только 1 пароль (повтор пароля нужен только для шифрования, для расшифровки достаточно одного-первого)
+шифровать можно на листе, шифровать можно сохраняемые диапазоны и шифровать можно и файл пользовательских сохранений.
+сохранять диапазон в списке диапазонов можно в зашифрованном виде или не в зашифрованном (в незашифрованном эффективнее сжимаются сохранения т.к. обрабатываются все дубликаты во всех сохранённых диапазонах, а не частично в отдельном диапазоне), но можно шифровать сам файл пользовательских настроек - эффективность сжатия сохраняется.
+есть возможность автоматически определять границы диапазона, выделяя весь лист или целый столбец или целую строку, см. usedrange
+добавлена возможность включать пользовательские сообщения и сообщения в статус-баре Excel
+ЭКСПЕРЕМЕНТАЛЬНО: добавлено автоматическое распознавание разных блоков зашифрованных диапазонов, с разными алгоритмами и их расшифровка разом (см. видео).


BedvitXLL64v5.0
Изменено: bedvit - 19.01.2024 00:06:15
«Бритва Оккама» или «Принцип Калашникова»?
Генерация GUID в Excel
 
Senaki, возможно у вас не подключена СОМ-библиотека. Работают ли другие функции?
«Бритва Оккама» или «Принцип Калашникова»?
Генерация GUID в Excel
 
Senaki, думаю у вас старая версия xll. Посмотрите какая.
«Бритва Оккама» или «Принцип Калашникова»?
Шифрование данных на листе Excel и в VBA
 
Jack Famous, Спасибо за тест! Твоих предложений много, нужно отобрать интересные и полезные! Видео - это тема, может youtube - канал завести? :)
«Бритва Оккама» или «Принцип Калашникова»?
Шифрование данных на листе Excel и в VBA
 
Мое почтение, джентльмены!
В продолжении темы Variant Serialization and Deserialization
Сделал инструменты шифрования алгоритмами AES данных на листе Excel и в коде VBA.
Виды алгоритмов шифрования можно выбирать. В тесте работает алгоритм AES256:CBC.

Функционал:
1. Можно шифровать как отдельные значения так и диапазоны/массивы.
2. Шифровать данные можно прям на листе Excel, с дальнейшей расшифровкой нужного диапазона или всего листа.
3. Зашифрованные данные можно хранить в XLL как в виде значений (value2), так и в виде формул (formula)
4. Алгоритм шифрования AES256:CBC. Использована библиотека Crypto++
5. Пароль нигде не хранится, его знает только пользователь и при утере, расшифровать данные не получится никому :)
6. Зашифрованные диапазоны - независимые, т.е. можно каждый отдельный диапазон зашифровать со своим паролем, можно зашифровать диапазон дважды (для гиков :) )
7. Для данных у которых упаковка будет экономить размер итоговой зашифрованной строки (для массивов и длинных строк)  - используется алгоритм сжатия WinAPI:XPRESS_HUFF
8. Реализован механизм (shared string table), как и в Excel, для оптимизации размера одинаковых строк (для массивов).
9. Данные на листе Excel шифруются для каждой ячейки отдельно (для возможности хранить и расшифровывать данные независимо для каждой ячейки) с применением п,7.
Для VBA (одно значение или массив) зашифровываются в один массив байт, что позволяет применять и п.7 и п.8  
10. Итоговый результат шифрования (любого типа данных: строки, числа, ошибки и т.д.) - хранится в виде строки (массива зашифрованных байт).



Шифрование на листе Excel и хранение данный в XLL:



Шифрование данных VBA:

Функции:
1. VARIANT stringProtect = VariantAES256Encrypt(VARIANT variantIn, BSTR password, BSTR salt, LONG mode)
2. VARIANT variantUnProtect = VariantAES256Decrypt(VARIANT byteArrayIn, BSTR password, BSTR salt, LONG mode)


Можем обсудить, кому интересно, подробности и, возможно, внести новый функционал, если он нужен и не реализован.

Надстройка:
BedvitXLL64v5.0
Изменено: bedvit - 19.01.2024 00:05:59
«Бритва Оккама» или «Принцип Калашникова»?
XLL хранение и выполнение VBA кода, или защита VBA кода от просмотра?
 
Цитата
PoToLoK™_LastVersion написал:
сложно было дать комментарий при таких обстоятельствах
Цитата
БМВ написал:
Как обычно , бан.
Вижу, что да вам не просто участвовать в данной теме. "Ad astra per aspera"...
БМВ, Михаил, единственного тестера в данной теме забанил, эх...
Цитата
PoToLoK™_LastVersion написал:
разработать механизм асимметричного шифрования, чтобы другу не пришлось отправлять пароль в открытом виде, но вопрос, надо ли?
Пока непонятно что это даст. Будет интерес - можно будет подумать.

Цитата
PoToLoK™_LastVersion написал:
crypto++... Никто ломать данную библу и не будет
Верно, она с открытым кодом - зашел и посмотрел, зачем её ломать?
Цитата
PoToLoK™_LastVersion написал:
Взлому будет подвержена сама логика вашего решения и думать, что данное решение не имеет способов взлома - это глупо!
Там нечего ломать, данные из формы сразу передаются в крипто-библу, не хранятся и нигде больше не используются. Код библы открыт, пожалуйста попробуйте взломать зашифрованные данные алгоритмом AES256:CBC с помощью этой библиотеки с открытым кодом. Мне интересен результат.  :-). Без знания пароля даже я - разработчик не смогу расшифровать зашифрованные данные. Кстати такой же алгоритм шифрует Excel файлы, вы знаете кому удалось взломать Excel-файл или rar-архив (не Brute force с простым паролем)? Я не знаю, и было бы интересно узнать прецедент :-)

Цитата
PoToLoK™_LastVersion написал:
будущее - не выдавайте кишки своих решений (см. Кишки XLL), а то при простом дизасемблировании очень легко наткнуться на ветку с частичной логикой вашего кода
А я ничего не скрываю, можете пользоваться подсказками:
Вот этот код, строка 824  ;)

Цитата
PoToLoK™_LastVersion написал:
К примеру, если бы я не появился на данной платформе в нужное время, то я вас уверяю, что даже вариант №1 до нового года бы не взломали на данной площадке и Вы бы предполагали, что взлом невозможен или трудно_реализуем!
Про дыры я и ранее знал, но вы меня подтолкнули к окончательному решению, за что и примите благодарность.

В итоге не используя дыры самого VBA, сам код можно хранить так же безопасно как в .rar или запароленном Excel-файле. Целесообразность будет определятся другими плюшками, которых нет в других инструментах. Если кому интересно будет обговорить эти плюшки - можем обсудить в этой же теме. Плюшка в виде выполнения кода без ввода пароля - не целесообразна в виду невозможности гарантировать конфиденциальность выполняемого VBA-кода.
Изменено: bedvit - 03.01.2024 11:55:46
«Бритва Оккама» или «Принцип Калашникова»?
XLL хранение и выполнение VBA кода, или защита VBA кода от просмотра?
 
Ну что, вскрываемся?
Цитата
PoToLoK™ написал:
По поводу GUID в 4 варианте... Я изучу матчасть ещё раз, попрактикуюсь и дам Вам знать, в случаи успеха!
ответа не было, да же в личку. Это прогнозируемо, потому как другой механизм, и в защите используется проверенная временем крипто-библа crypto++

Пароль:
Скрытый текст
«Бритва Оккама» или «Принцип Калашникова»?
Microsoft встроила Python в Excel
 
Думаю с ИИ будет так же как и с космосом, после полета Гагарина писали и планировали в 21 веке быть на луне, марсе, венере, с околоземными станциями и базами на планетах.
В итоге случилось не так, как думали. Всем стало просто не интересно и технологии не вышли на нужный уровень.
Изменено: bedvit - 20.12.2023 22:48:14
«Бритва Оккама» или «Принцип Калашникова»?
XLL хранение и выполнение VBA кода, или защита VBA кода от просмотра?
 
Цитата
PoToLoK™ написал:
Поделиться кодом для выполнения, а не для выполнения и просмотра!
Вы сами знаете, что на чистом VBA это сделать нельзя. Не знаю не одного адекватного решения, которое делает это и правильно обрабатывает разрядность, декларирование win api, события (листа, книги, приложения), классы, функции.
У меня были идеи, когда я эту тему начинал, но сейчас я решил не боротся с мельницами, ибо Microsoft заинтересованы, что бы мы этого как раз не делали, и вносят корректировки. Зачем мне с... против ветра?)
«Бритва Оккама» или «Принцип Калашникова»?
XLL хранение и выполнение VBA кода, или защита VBA кода от просмотра?
 
Цитата
PoToLoK™ написал:
Короче просто поделиться кодом для выполнения нельзя, нужно знать пароль!
Цитата
PoToLoK™ написал:
но тогда я смогу код просмотреть прямо из GUI XLL
Вы уже определитесь вы хотите поделится кодом или нет? У вас взаимоисключающие параметры)
«Бритва Оккама» или «Принцип Калашникова»?
XLL хранение и выполнение VBA кода, или защита VBA кода от просмотра?
 
Почему можно, не ставьте пароль на исходный код и все заработает без пароля.
«Бритва Оккама» или «Принцип Калашникова»?
XLL хранение и выполнение VBA кода, или защита VBA кода от просмотра?
 
Такая реализация уже есть, там код C/C++ скомпилирован в бинарный в самой xll. Им я делюсь, его можно запустить, а посмотреть его проблематично, особенно в подробностях.
Краткое описание функционала можно посмотреть здесь:
https://www.cyberforum.ru/blogs/829006/blog5958.html


Если про код VBA - эта схема не рабочая. Или нужно убить кучу времени, на парсинг VBA- кода и выполнение его в xll, а не в дырявом трансляторе/ ide vba
Изменено: bedvit - 20.12.2023 13:15:07
«Бритва Оккама» или «Принцип Калашникова»?
XLL хранение и выполнение VBA кода, или защита VBA кода от просмотра?
 
4 вариант с передачей пароля или не запароленного кода равносильно 3му варианту. Не вижу зачем нужен 3й вариант, и кого мы хотим в этом случае обмануть, себя или пользователя.

Жду guid по 4 варианту, потом выложу пароль.
Изменено: bedvit - 20.12.2023 12:59:40
«Бритва Оккама» или «Принцип Калашникова»?
XLL хранение и выполнение VBA кода, или защита VBA кода от просмотра?
 
PoToLoK™, Готов выслушать ваше предложение.
«Бритва Оккама» или «Принцип Калашникова»?
XLL хранение и выполнение VBA кода, или защита VBA кода от просмотра?
 
PoToLoK™, добрый день! Жаль, что у вас не получилось посмотреть GUID, я думал ваш способ это сможет решить, судя по мат.части - он 100% рабочий (может вы что-то не так делаете, не с той стороны подходите, не та тональность? Посмотрите внимательнее матчасть, где-то упускаете!)

А по концепции - текущая - считаю самая корректная, пользователь доверяя код надстройке, гарантированно сохранит этот код в тайне, если его запаролит. Если хочет поделится - может сохранить без пароля. Сохранность кода, в других схемах я гарантировать не могу, в силу принципиальной невозможности это сделать на уровне VBA. Парсить код и выполнять на С++ в библе, я не готов. И предлагать заведомо дурявый инструмент тоже.
Инструмент останется хранимкой, возможно добавлю еще каких-то плюшек, ибо хранение в запароленном файле Excel почти то-же самое по функционалу. Возможно добавлю хранение разных VBA-модулей с разным паролем, один пользователь сможет выполнять какой-то свой блок или несколько и т.д.
«Бритва Оккама» или «Принцип Калашникова»?
XLL хранение и выполнение VBA кода, или защита VBA кода от просмотра?
 
Думаю, последняя 4 версия. Стала похожа на ту, которая задумывалась изначально.
Изменено: bedvit - 20.12.2023 11:58:44
«Бритва Оккама» или «Принцип Калашникова»?
Microsoft встроила Python в Excel
 
Владимир, привет! Использования Питонятины в формулах спорное решение, что будет происходить при пересчете листа? VBA к сожалению активно не развивается, хотя мне нравится VB. Поживем, увидим)
«Бритва Оккама» или «Принцип Калашникова»?
ВПР внутри
 
Здесь писал самописную vlookup на чистом Си. Обогнать штатную не получилось, но отстал не сильно. Штатная функция хорошо оптимизирована, но к сожалению, код не удалось глянуть.
Кому интересно там же и замеры скорости других схожих функций.
Еще надо иметь ввиду, что ВПР() не ищет строку более 255 символов. Иногда это критично.

На VBA заведомо нельзя написать функцию быстрее штатной (это нужно что бы сидели Питонисты в разработчиках Excel, что пока не наблюдается. Хотя с функциями суммеслиМН() и другими ...МН есть вопросы). Да же на стоковом С API Excel это сложно. Хотя доступны все фишки: расспарраллеленный расчет как в самой функции, так и выполнение в потоках самого Excel, ассинхронность, прямое управление памятью, никакого сборщика мусора, исключению СОМ-буфера, работаешь напрямую с ячейками листа, язык Си на котором написаны и родные функции и т.д.
За скорость нужно платить, все ноги простреленные, и соседские рикошетом...

Цитата
Jack Famous написал:
искать подстроку с заданной позиции, НО и ОБРЕЗАЕТ строку до этой же позиции
Да это вообще прикол! )
Изменено: bedvit - 19.12.2023 22:33:48
«Бритва Оккама» или «Принцип Калашникова»?
XLL хранение и выполнение VBA кода, или защита VBA кода от просмотра?
 
Мне это не нужно, а просто из интереса - сейчас нет времени. Было бы обсуждения и хорошие идеи, можно было бы на интерес запилить.
Оставлю инструмент как хранилище кода, с возможности его запаролить. И выполнить или посмотреть код, только после ввода пароля, т.е. когда не нужно скрывать код во время выполнения. Как изначально и задумывалось.
Изменено: bedvit - 19.12.2023 16:23:31
«Бритва Оккама» или «Принцип Калашникова»?
XLL хранение и выполнение VBA кода, или защита VBA кода от просмотра?
 
PoToLoK™, думаю можно вскрывается. Судя по участникам, тема никому не интересная, заезженная, и все кому было надо уже как-то решили вопрос.
«Бритва Оккама» или «Принцип Калашникова»?
XLL хранение и выполнение VBA кода, или защита VBA кода от просмотра?
 
PoToLoK™, верно. Поздравляю.
«Бритва Оккама» или «Принцип Калашникова»?
Variant Serialization and Deserialization
 
Мое почтение, джентльмены!
Cериализация и десериализация типа данных Variant, используемый в COM, VB, VBA, C++ и т.д.
Поддерживаются базовые типы и массивы. Объекты не сериализуются.
В некоторой степени - аналог CComVariant::ReadFromStream и CComVariant::WriteToStream

Использование простое, как обычная функция (предварительно подключив или открыв надстройку по ссылке чуть ниже и COM в автоматическом/ручном режиме):
Код
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


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



Надстройка BedvitXLL64v4.11beta
Изменено: bedvit - 19.12.2023 13:14:22
«Бритва Оккама» или «Принцип Калашникова»?
Microsoft встроила Python в Excel
 
Python - это интересно. Вопрос насколько он будет обрезанный.
Да, и еще просвятите меня - чем Python будет лучше VBA в контексте использования в Excel? Больше библ для аналитики, красивее графики, ИИ?
«Бритва Оккама» или «Принцип Калашникова»?
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 88 След.
Наверх