Для того, чтобы вызвать скомпилированные функции MATLAB® из электронной таблицы Microsoft® Excel®, выполните следование из машин Разработки и Развертывания, как задано.
Примечание
Для функции, которая будет названа с помощью синтаксиса функций Microsoft Excel (=myfunction(input)
), функция MATLAB должна возвратить один скалярный выходной аргумент.
Выполните следующие шаги на машине Разработки:
Создайте следующие функции MATLAB в трех отдельных файлах с именем doubleit.m
, incrementit.m
, и powerit.m
, соответственно:
function output = doubleit(input) output = input * 2;
function output = incrementit(input1, input2) output = input1 + input2;
function output = powerit(input1, input2) output = power(input1, input2);
Запустите Library Compiler.
Используйте следующую информацию, когда вы работаете через этот пример с помощью инструкций в Create Дополнение Excel из MATLAB:
Имя приложения | myexcelfunctions |
ClassName | myexcelfunctionsclass |
Экспортируемые функции |
|
Выполните следующие шаги на машине Развертывания:
Скопируйте содержимое for_redistribution_files_only
к машине (машинам) развертывания. Скопируйте файл в стандартное место для использования с Microsoft Excel, таким как
где Office_Installation_folder
\Library\MATLABOffice_Installation_folder
папка, такая как C:\Program Files\Microsoft Office\OFFICE11
.
Укажите myexcelfunctions_1_0.dll
.
Внимание
Необходимо потворить регистрацию файла DLL, если вы перемещаете его после его создания. В отличие от файлов DLL, файлы Excel могут быть перемещены куда угодно в любое время.
Запустите Microsoft Excel. Электронная таблица Book1
должно быть открыто по умолчанию.
В Excel, select Tools > Visual Basic Editor. Редактор Microsoft Visual Basic® запускается.
В Редакторе Microsoft Visual Basic выберите File > Import File.
Просмотрите к myexcelfunctions.bas
и нажмите Open. В Проводнике Проекта Module1 появляется под узлом Modules ниже VBAProject (Book1).
В Редакторе Microsoft Visual Basic выберите View > Microsoft Excel. Можно теперь использовать doubleit
, incrementit
, и powerit
функции в вашей электронной таблице Book1.
Протестируйте функции путем выполнения следующего:
Введите =doubleit(2.5)
в ячейке A1.
Введите =incrementit(11,17)
в ячейке A2.
Введите =powerit(7,2)
в ячейке A3.
Необходимо видеть значения 5, 28 и 49 в ячейках A1, A2 и A3 соответственно.
Использовать doubleit
, powerit
, и incrementit
функции во всех ваших новых электронных таблицах Microsoft Excel, сделайте следующее:
Выберите File > Save As.
Измените опцию Save as type в .xlt (Template).
Просмотрите к
папка.Office_Installation_folder
\XLSTART
Сохраните файл как
.Office_Installation_folder
\XLSTART\Book.xlt
Примечание
Ваш уровень Безопасности макросов Microsoft Excel должен собираться в Medium или Low сохранить этот шаблон.
Для получения дополнительной информации о доступе к примеру кода из продукта, смотрите, что Файл В качестве примера Копирует.
Эта функция обеспечивает легкий интерфейс для того, чтобы легко получить доступ к данным MATLAB Runtime. Это позволяет данным быть совместно использованными экземпляром MATLAB Runtime, код MATLAB, работающий на этом MATLAB Runtime, и кодом обертки, который создал MATLAB Runtime. Через вызовы API интерфейса MATLAB Runtime User Data вы получаете доступ к данным MATLAB Runtime путем создания на ассоциативный массив экземпляра MATLAB Runtime mxArray
s, состоя из отображения от строковых ключей до mxArray
значения. Причины того, чтобы сделать это включают, но не ограничиваются:
Необходимо предоставить информацию профиля во время выполнения клиенту, запускающему приложение, созданное с Parallel Computing Toolbox™. Информация профиля может быть предоставлена (и изменение) на базисе на выполнение. Например, два экземпляра того же приложения могут запуститься одновременно с различными профилями.
Вы хотите инициализировать MATLAB Runtime постоянными значениями, к которым могут получить доступ все ваши приложения MATLAB.
Вы хотите настроить глобальную рабочую область — глобальная переменная или переменные, к которым могут получить доступ MATLAB и ваш клиент.
Вы хотите сохранить состояние любой переменной или группу переменных.
MATLAB Compiler™ поддерживает на доступ к состоянию экземпляра MATLAB Runtime через объектно-ориентированный API. В отличие от MATLAB Compiler, доступ к на состояние экземпляра MATLAB Runtime является дополнительным, а не на по умолчанию. Можно получить доступ к этому состоянию путем добавления setmcruserdata.m
и getmcruserdata.m
к вашему проекту развертывания или путем определения их на командной строке. Альтернативно, вы используете функцию помощника, чтобы вызвать эти методы, как показано в Предоставляют информацию Профиля Во время выполнения для Приложений Parallel Computing Toolbox.
Для получения дополнительной информации см. Руководство пользователя MATLAB Compiler.
Следующее является полным примером того, как можно использовать Пользовательский Интерфейс Данных MATLAB Runtime в качестве механизма, чтобы задать профиль для приложений Parallel Computing Toolbox.
Примечание
Независимые исполняемые файлы и совместно использованные библиотеки, сгенерированные от MATLAB Compiler или MATLAB Compiler SDK™ для параллельных приложений, могут теперь запустить до двенадцати локальных рабочих без MATLAB Parallel Server™.
Шаг 1: запишите свой код Parallel Computing Toolbox
Скомпилируйте sample_pct.m
в MATLAB.
Этот пример кода использует кластер, заданный в профиле по умолчанию.
Выход принимает, что профилем по умолчанию является local
.
function speedup = sample_pct (n) warning off all; tic if(ischar(n)) n=str2double(n); end for ii = 1:n (cov(sin(magic(n)+rand(n,n)))); end time1 =toc; parpool; tic parfor ii = 1:n (cov(sin(magic(n)+rand(n,n)))); end time2 =toc; disp(['Normal loop times: ' num2str(time1) ... ',parallel loop time: ' num2str(time2) ]); disp(['parallel speedup: ' num2str(1/(time2/time1)) ... ' times faster than normal']); delete(gcp); disp('done'); speedup = (time1/time2);
Запустите код можно следующим образом после изменения профиля по умолчанию к local
, в случае необходимости.
a = sample_pct(200)
Проверьте, что вы получаете следующие результаты:
Starting parallel pool (parpool) using the 'local' profile ... connected to 4 workers. Normal loop times: 0.7587,parallel loop time: 2.9988 parallel speedup: 0.253 times faster than normal Parallel pool using the 'local' profile is shutting down. done a = 0.2530
Шаг 2: Установите Профиль Parallel Computing Toolbox. Для того, чтобы скомпилировать код MATLAB к COM-компоненту и использовать Parallel Computing Toolbox, mcruserdata
должен быть установлен непосредственно из MATLAB. Нет никакого API, доступного, чтобы получить доступ к MCRUserdata
как существует для C и приложений C++, созданных с MATLAB Compiler.
Установить mcruserdata
из MATLAB создайте init
функционируйте в своем COM-классе. Это - отдельная функция MATLAB, которая использует setmcruserdata
установить профиль Parallel Computing Toolbox однажды. Вы затем вызываете свои другие функции, чтобы использовать функции Parallel Computing Toolbox.
Создайте следующий init
функция:
function init_sample_pct % Set the Parallel Profile: if(isdeployed) [profile] = uigetfile('*.settings'); % let the USER select file setmcruserdata('ParallelProfile',[profile]); end
Шаг 3: Скомпилируйте Свою Функцию с Deploytool или Командной строкой. Можно скомпилировать функцию из командной строки путем ввода следующего:
mcc -B 'cexcel:exPctComp,exPctClass,1.0' init_sample_pct.m sample_pct.m
Альтернативно, можно использовать deploytool можно следующим образом:
Выполните шаги в Create Дополнение Excel из MATLAB, чтобы скомпилировать ваше приложение.
Когда компиляция заканчивается, новая папка (с тем же именем как проект) создается.
Название проекта | exPctComp |
ClassName | exPctClass |
Файл, чтобы скомпилировать | sample_pct.m и init_sample_pct.m |
Примечание
Если вы используете функцию графического процессора Parallel Computing Toolbox, необходимо вручную добавить файлы CU и PTX.
Если вы используете приложение Library Compiler, нажмите Add files/directories на вкладке Build.
Если вы используете mcc
команда, используйте -a
опция.
Чтобы развернуть скомпилированное приложение, скопируйте for_redistribution_files_only
папка, которая содержит следующее вашим конечным пользователям.
exPctComp.dll
Модуль VBA (.bas
файл)
Инсталлятор MATLAB Runtime
Кластерный профиль
Примечание
Целевая машина конечного пользователя должна иметь доступ к кластеру.
Шаг 4: Измените сгенерированное Приложение Драйвера VBA (Файл BAS). После регистрации COM DLL на машине развертывания и импорте файла BAS в Excel, измените сгенерированный код файла BAS по мере необходимости.
Dim MCLUtil As Object Dim bModuleInitialized As Boolean Dim exPctClass As Object Private Sub InitModule() If Not bModuleInitialized Then On Error GoTo Handle_Error If MCLUtil Is Nothing Then Set MCLUtil = CreateObject("MWComUtil.MWUtil7.10") End If Call MCLUtil.MWInitApplication(Application) bModuleInitialized = True Exit Sub Handle_Error: bModuleInitialized = False End If End Sub Function init_sample_pct() As Variant On Error GoTo Handle_Error Call InitModule If exPctClass Is Nothing Then Set exPctClass = CreateObject("exPctComp.exPctClass.1_0") End If Call exPctClass.init_sample_pct init_sample_pct = Empty Exit Function Handle_Error: init_sample_pct = "Error in " & Err.Source & ": " & Err.Description End Function Function sample_pct(Optional pelle As Variant) As Variant Dim speedup As Variant On Error GoTo Handle_Error Call InitModule If exPctClass Is Nothing Then Set exPctClass = CreateObject("exPctComp.exPctClass.1_0") End If Call exPctClass.sample_pct(1, speedup, pelle) sample_pct = speedup Exit Function Handle_Error: sample_pct = "Error in " & Err.Source & ": " & Err.Description End Function
Выход следующие:
развертываемые архивные данные автоматически встроены непосредственно в компонентах MATLAB Compiler по умолчанию и извлечены к временной папке.
Автоматическое встраивание включает использование функций Кэша Компонента MATLAB Runtime через переменные окружения.
Эти переменные позволяют вам задавать следующее:
Задайте местоположение по умолчанию, где вы хотите, чтобы развертываемый архив был автоматически извлечен
Добавьте диагностические ошибочные параметры печати, которые могут использоваться, автоматически извлекая развертываемое для поиска и устранения неисправностей целей
Настройка размера кэша компонента MATLAB Runtime по причинам эффективности.
Используйте следующие переменные окружения, чтобы изменить эти настройки.
Переменная окружения | Цель | Примечания |
---|---|---|
MCR_CACHE_ROOT | Когда установлено в местоположение того, где вы хотите, чтобы развертываемый архив был извлечен, эта переменная заменяет местоположение кэша компонента в расчете на пользователя по умолчанию. Это верно для встроенного .ctf файлы только. | На macOS эта переменная проигнорирована в MATLAB R2020a и позже. Комплект приложений содержит файлы, необходимые для времени выполнения. |
MCR_CACHE_SIZE | Когда установлено, эта переменная заменяет размер кэша компонента по умолчанию. | Начальный предел для этой переменной 32M (мегабайты). Это может, однако, быть изменено после того, как вы установили переменную в первый раз. Отредактируйте файл .max_size , который находится в файле, определяемом путем выполнения mcrcachedir команда, с желаемым пределом размера кэша. |
Можно заменить это автоматическое встраивание и поведение экстракции путем компиляции с -C
опция. Смотрите Переопределяющее Поведение По умолчанию для деталей.
Примечание
Если при запуске mcc
задавая конфликтную обертку и целевые типы, развертываемый архив не будет встроен на сгенерированный компонент. Например, если вы запускаетесь:
mcc -W lib:myLib -T link:exe test.m test.c
test.exe
не будет иметь развертываемого архива встроенным в него, как будто вы задали -C
опция к командной строке.
Внимание
Не извлекайте файлы в the.ctf
файл и размещает их индивидуально под системой контроля версий. Начиная с .ctf
файл содержит взаимозависимые функции MATLAB и данные, к файлам в нем нужно получить доступ только путем доступа к .ctf
файл. Для лучших результатов поместите целый .ctf
файл под системой контроля версий.
Извлекать развертываемый архив способом до R2008b, вместе со скомпилированным COM-компонентом, компиляция с помощью mcc
-c
опция.
Можно также реализовать это переопределение путем добавления -c
отметьте в разделе Settings приложения компилятора.
Вы можете хотеть использовать эту опцию, чтобы диагностировать проблемы с развертываемым архивом, например, когда журнал и диагностические сообщения намного больше отображаются.
Для получения дополнительной информации о развертываемом архиве, смотрите Развертываемый Архив.
-logfile
— Создает именованный файл журнала.
Если Вы Скомпилировали Дополнение в MATLAB или использовали MCC. Если вы создаете свое дополнение с помощью Library Compiler MATLAB, выберите Create log file под Additional Runtime Settings.
Если вы создаете свое дополнение с помощью mcc
, просто задайте -logfile
с mcc
-R
команда
Если Вы Создали Функцию С нуля Используя Функциональный Мастер. Если бы вы создали функцию с нуля с помощью Функционального Мастера, и хотят задать опции MATLAB Runtime, необходимо вручную изменить .bas
код файла.
Вы делаете это путем вызова следующего MWUtil
Вызовы API, детализированные с примерами в Классе MWUtil: