В порядке вызвать скомпилированные функции 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\MATLAB
Office_Installation_folder
является папкой, такой как C:\Program Files\Microsoft Office\OFFICE11
.
Установите MATLAB Runtime.
Укажите 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 и COM-компоненты
Обзор
Эта функция обеспечивает легкий интерфейс для того, чтобы легко получить доступ к данным 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.
Предоставьте информацию профиля времени выполнения для приложений Parallel Computing Toolbox
Следующее является полным примером того, как можно использовать Пользовательский Интерфейс Данных 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 Runtime и развертываемое архивное встраивание
развертываемые архивные данные автоматически встроены непосредственно в компонентах MATLAB Compiler по умолчанию и извлечены к временной папке.
Автоматическое встраивание включает использование функций Кэша Компонента MATLAB Runtime через переменные окружения.
Эти переменные позволяют вам задавать следующее:
Задайте местоположение по умолчанию, где вы хотите, чтобы развертываемый архив был автоматически извлечен
Добавьте диагностические ошибочные параметры печати, которые могут использоваться, автоматически извлекая развертываемое для поиска и устранения неисправностей целей
Настройка размера кэша компонента MATLAB Runtime по причинам производительности.
Используйте следующие переменные окружения, чтобы изменить эти настройки.
Переменная окружения Цель Примечания MCR_CACHE_ROOT Когда установлено в местоположение того, где вы хотите, чтобы развертываемый архив был извлечен, эта переменная заменяет местоположение кэша компонента в расчете на пользователя по умолчанию. Это верно для встроенных файлов .ctf
только. Не применяется 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-компонентом, компиляция с помощью опции -c
mcc
.
Можно также реализовать это переопределение путем добавления флага -c
в разделе Settings приложения компилятора.
Вы можете хотеть использовать эту опцию, чтобы диагностировать проблемы с развертываемым архивом, например, когда журнал и диагностические сообщения намного более видимы.
Для получения дополнительной информации
Для получения дополнительной информации о развертываемом архиве, смотрите Развертываемый Архив.
Опции MATLAB Runtime
Какие Опции MATLAB Runtime поддерживаются MATLAB Compiler
?
-logfile
— Создает именованный файл журнала.
Как задайте опции MATLAB Runtime?
Если Вы Скомпилировали Дополнение в MATLAB или использовали MCC. Если вы создаете свое дополнение с помощью Library Compiler MATLAB, выберите Create log file под Additional Runtime Settings.
Если вы создаете свое дополнение с помощью
mcc
, просто задаете -logfile
с командой -R
mcc
Если Вы Создали Функцию С нуля Используя Функциональный Мастер. Если бы вы создали функцию с нуля с помощью Функционального Мастера, и хотят задать опции MATLAB Runtime, необходимо вручную изменить код файла
.bas
.
Вы делаете это путем вызова следующих вызовов API
MWUtil
, детализированных с примерами в Классе MWUtil: