Для вызова скомпилированных функций 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);
Запустите компилятор библиотеки.
При работе с этим примером с помощью инструкций в разделе Создание надстройки Excel из MATLAB используйте следующую информацию:
| Имя приложения | myexcelfunctions |
| Имя класса | 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 выберите Инструменты > Редактор Visual Basic. Запускается редактор Microsoft Visual Basic ®.
В редакторе Microsoft Visual Basic выберите «Файл» > «Импортировать файл».
Перейти к myexcelfunctions.bas и нажмите «Открыть». В обозревателе проектов Module1 отображается в узле «Модули» под VBAProject (Book1).
В редакторе Microsoft Visual Basic выберите Просмотр > 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 выполните следующие действия.
Выберите «Файл» > «Сохранить как».
Измените параметр Сохранить как тип на .xlt (Шаблон).
Перейдите к папка.Office_Installation_folder\XLSTART
Сохранить файл как .Office_Installation_folder\XLSTART\Book.xlt
Примечание
Для сохранения этого шаблона необходимо установить средний или низкий уровень безопасности макросов Microsoft Excel.
Дополнительные сведения о доступе к коду примера из продукта см. в разделе Копирование файла примера.
Эта функция обеспечивает легкий интерфейс для простого доступа к данным среды выполнения MATLAB. Это позволяет совместно использовать данные экземпляра среды выполнения MATLAB, кода MATLAB, выполняющегося в этой среде выполнения MATLAB, и кода оболочки, создавшего среду выполнения MATLAB. С помощью вызовов API интерфейса пользовательских данных среды выполнения MATLAB осуществляется доступ к данным среды выполнения MATLAB путем создания ассоциативного массива экземпляра среды выполнения для каждого MATLAB. mxArrays, состоящий из отображения из строковых ключей в mxArray значения. Причины для этого включают, но не ограничиваются:
Необходимо предоставить информацию о профиле времени выполнения клиенту, выполняющему приложение, созданное с помощью Toolbox™ параллельных вычислений. Информация профиля может предоставляться (и изменяться) на основе выполнения. Например, два экземпляра одного и того же приложения могут выполняться одновременно с разными профилями.
Необходимо инициализировать среду выполнения MATLAB с постоянными значениями, которые доступны для всех приложений MATLAB.
Необходимо настроить глобальную рабочую область - глобальную переменную или переменные, к которым MATLAB и клиент могут получить доступ.
Необходимо сохранить состояние любой переменной или группы переменных.
MATLAB Compiler™ поддерживает доступ к состоянию экземпляра MATLAB Runtime через объектно-ориентированный API. В отличие от компилятора MATLAB, доступ по состоянию экземпляра среды выполнения MATLAB является необязательным, а не включенным по умолчанию. Вы можете получить доступ к этому состоянию, добавив setmcruserdata.m и getmcruserdata.m в проект развертывания или путем их указания в командной строке. Кроме того, для вызова этих методов используется вспомогательная функция, как показано в разделе Предоставление информации о профиле времени выполнения для приложений панели инструментов параллельных вычислений.
Дополнительные сведения см. в Руководстве пользователя компилятора MATLAB.
Ниже приведен полный пример использования интерфейса пользовательских данных среды выполнения MATLAB в качестве механизма определения профиля для приложений Parallel Computing Toolbox.
Примечание
Автономные исполняемые файлы и общие библиотеки, созданные из MATLAB Compiler или MATLAB Compiler SDK™ для параллельных приложений, теперь могут запускать до двенадцати локальных сотрудников без MATLAB Parallel Server™.
Шаг 1: Напишите код набора инструментов для параллельных вычислений
Собрать 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: Настройка профиля панели инструментов параллельных вычислений. Для компиляции кода MATLAB в COM-компонент и использования панели инструментов параллельных вычислений, mcruserdata должен быть установлен непосредственно из MATLAB. Нет API для доступа к MCRUserdata как и для приложений C и C++, построенных с помощью компилятора MATLAB.
Для установки mcruserdata из MATLAB создайте init функция в классе COM. Это отдельная функция MATLAB, которая использует setmcruserdata для однократной установки профиля панели инструментов параллельных вычислений. Затем вы вызываете другие свои функции, чтобы использовать функции 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. Скомпилировать функцию с помощью инструмента развертывания или командной строки. Можно скомпилировать функцию из командной строки, введя следующее:
mcc -B 'cexcel:exPctComp,exPctClass,1.0' init_sample_pct.m sample_pct.m
В качестве альтернативы можно использовать средство развертывания следующим образом:
Для компиляции приложения выполните действия, описанные в разделе Создание надстройки Excel из MATLAB.
По завершении компиляции создается новая папка (с тем же именем, что и у проекта).
| Название проекта | exPctComp |
| Имя класса | exPctClass |
| Файл для компиляции | sample_pct.m и init_sample_pct.m |
Примечание
При использовании функции графического процессора панели инструментов Parallel Computing Toolbox необходимо вручную добавить файлы PTX и CU.
При использовании приложения компилятора библиотеки щелкните Добавить файлы/каталоги на вкладке Сборка.
При использовании mcc используйте команду -a вариант.
Чтобы развернуть скомпилированное приложение, скопируйте for_redistribution_files_only , которая содержит следующее, для конечных пользователей.
exPctComp.dll
Модуль VBA (.bas файл)
Программа установки среды выполнения MATLAB
Профиль кластера
Примечание
Конечный компьютер конечного пользователя должен иметь доступ к кластеру.
Шаг 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 с помощью переменных среды.
Эти переменные позволяют указать следующее:
Укажите расположение по умолчанию, в котором необходимо автоматически извлекать развертываемый архив
Добавление параметров печати диагностических ошибок, которые можно использовать при автоматическом извлечении развертываемого файла в целях устранения неполадок
Настройка размера кэша компонента среды выполнения MATLAB по причинам производительности.
Для изменения этих параметров используйте следующие переменные среды.
| Переменная среды | Цель | Примечания |
|---|---|---|
| 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 в командной строке.
Внимание
Не извлекайте файлы в пределах.ctf и поместить их по отдельности под управление версиями. С момента .ctf файл содержит взаимозависимые функции MATLAB и данные, доступ к файлам в нем должен осуществляться только путем доступа к .ctf файл. Для достижения наилучших результатов разместите все .ctf под управлением версии.
Чтобы извлечь развертываемый архив способом до R2008b вместе с компилируемым COM-компонентом, выполните компиляцию с помощью mcc -c вариант.
Вы также можете реализовать это переопределение, добавив -c в разделе Настройки приложения компилятора.
Этот параметр можно использовать для устранения неполадок с развертываемым архивом, например, поскольку журнал и диагностические сообщения гораздо более заметны.
Дополнительные сведения о развертываемом архиве см. в разделе Развертываемый архив.
-logfile - Создает именованный файл журнала.
Если вы скомпилировали надстройку в MATLAB или использовали mcc. При создании надстройки с помощью компилятора библиотеки MATLAB выберите Создать файл журнала в разделе Дополнительные параметры среды выполнения.
При создании надстройки с помощью mcc, просто укажите -logfile с mcc -R команда
Если функция создана с нуля с помощью мастера функций. Если функция была создана с нуля с помощью мастера функций и требуется указать параметры среды выполнения MATLAB, необходимо вручную изменить .bas код файла.
Для этого выполните следующие действия. MWUtil Вызовы API, подробно описанные в примерах класса MWUtil: