В этом примере показано, как использовать COM-сервер автоматизации для доступа к другому приложению из MATLAB®. Он создает пользовательский интерфейс для доступа к данным в Microsoft® Excel® файл. Если вы не используете Объектной модели программных компонентов (COM) в приложениях, смотрите функции и примеры в электронных таблицах для альтернатив импорту данных электронных таблиц Excel в MATLAB.
Чтобы включить связь между MATLAB и программой электронных таблиц, этот пример создает объект на сервере автоматизации, на котором работает приложение Excel. MATLAB затем получает доступ к данным в электронной таблице через интерфейсы, предоставляемые сервером автоматизации Excel. Наконец, в примере создается пользовательский интерфейс для доступа к данным в файле Microsoft Excel.
Использование сервера автоматизации для доступа к другому приложению из MATLAB
Способы манипулировать данными Excel в типы, используемые в интерфейсе и графическом изображении
Следующие методы демонстрируют, как визуализировать и манипулировать данными электронных таблиц:
Реализация интерфейса, позволяющего создавать графики выбранных столбцов электронной таблицы Excel.
Вставка фигуры MATLAB в файл Excel.
Чтобы просмотреть полное описание кода, откройте actx_excel.m файла в редакторе.
Первым шагом в доступе к данным электронных таблиц из MATLAB является запуск приложения Excel в процессе сервера автоматизации с помощью actxserver функция и идентификатор программы, excel.application.
exl = actxserver('excel.application');The exl Объект предоставляет доступ к ряду интерфейсов, поддерживаемых программой Excel. Используйте Workbooks интерфейс для открытия файла Excel, содержащего данные.
exlWkbk = exl.Workbooks; exlFile = exlWkbk.Open([docroot '/techdoc/matlab_external/examples/input_resp_data.xls']);
Используйте рабочую книгу Sheets интерфейс для доступа к данным из Range объект, который хранит ссылку на область значений данных из заданного листа. Этот пример обращается ко всем данным из первой камеры в столбце A до последней камеры в столбце G.
exlSheet1 = exlFile.Sheets.Item('Sheet1');
robj = exlSheet1.Columns.End(4); % Find the end of the column
numrows = robj.row; % And determine what row it is
dat_range = ['A1:G' num2str(numrows)]; % Read to the last row
rngObj = exlSheet1.Range(dat_range);На данной точке весь набор данных из sheet1 файла Excel доступ осуществляется через интерфейс объекта области значений rngObj. Этот объект возвращает данные в массиве ячеек MATLAB exlData, который содержит как числовые, так и символьные данные:
exlData = rngObj.Value;
Теперь, когда данные находятся в массиве ячеек, можно использовать функции MATLAB, чтобы извлечь и изменить форму частей данных для использования в интерфейсе и перехода к функции построения графика. Для получения предположений о данных смотрите Формат электронной таблицы Excel.
Следующий код манипулирует данными:
for ii = 1:size(exlData,2)
matData(:,ii) = reshape([exlData{2:end,ii}],size(exlData(2:end,ii)));
lBoxList{ii} = [exlData{1,ii}];
endКод выполняет следующие операции:
Извлекает числовые данные из массива ячеек. Смотрите выражение индексации внутри фигурных скобок {}.
Конкатенирует отдельные двойки, возвращенные операцией индексации. Смотрите выражение внутри квадратных скобок [].
Изменяет форму результатов в массив, который упорядочивает данные в столбцах с помощью reshape функция.
Извлечение текста из первой камеры в каждом столбце exlData данные и сохраняет текст в массиве ячеек lBoxList. Эта переменная используется для генерации элементов в поле списка.
Этот пример принимает конкретную организацию электронной таблицы Excel, как показано на следующем рисунке.

Формат файла Excel следующий:
Первый элемент в каждом столбце является текстом, который идентифицирует данные, содержащиеся в столбце. Эти значения извлекаются и используются для заполнения поля списка.
Первый столбец Time используется для оси X всех графиков остальных данных.
Все строки в каждом столбце считываются в MATLAB.
Этот пример использует интерфейс, который позволяет вам выбрать из списка входных и ответных данных. Все данные построены как функция времени, и вы можете продолжать добавлять больше данных к графику. Каждый график данных, добавленный к графику, заставляет легенду расширяться.
Интерфейс включает следующие детали:
Легенда, которая обновляется при добавлении данных к графику
Кнопка удаления, которая позволяет вам удалить все графики из осей
Кнопка сохранения, которая сохраняет график в виде файла PNG и добавляет его в другой файл Excel
Кнопка-переключатель, который показывает или скрывает доступ к файлу Excel
Функция удаления фигуры для завершения работы сервера автоматизации
При нажатии кнопки Create Plot ее функция обратного вызова запрашивает окно списка, чтобы определить, какие элементы выбраны, и строит графики данных в зависимости от времени. MATLAB обновляет легенду, отображая новые данные с сохранением легенды для существующих данных.
function plotButtonCallback(src,evnt)
iSelected = get(listBox,'Value');
grid(a,'on');hold all
for p = 1:length(iSelected)
switch iSelected(p)
case 1
plot(a,tme,matData(:,2))
case 2
plot(a,tme,matData(:,3))
case 3
plot(a,tme,matData(:,4))
case 4
plot(a,tme,matData(:,5))
case 5
plot(a,tme,matData(:,6))
case 6
plot(a,tme,matData(:,7))
otherwise
disp('Select data to plot')
end
end
[b,c,g,lbs] = legend([lbs lBoxList(iSelected+1)]);
end % plotButtonCallbackПлоттер предназначен для постоянного добавления графиков, когда пользователь выбирает данные из списка. Кнопка Clear Graph очищает и сбрасывает оси и очищает переменную, используемую для хранения меток данных графика (используемых легендой).
%% Callback for clear button function clearButtonCallback(src,evt) cla(a,'reset') lbs = ''; end % clearButtonCallback
Программа MATLAB имеет доступ к свойствам приложения Excel, работающего на сервере автоматизации. Путем установки Visible свойство к 1 или 0, этот коллбэк управляет видимостью файла Excel.
%% Display or hide Excel file function dispButtonCallback(src,evt) exl.visible = get(src,'Value'); end % dispButtonCallback
Поскольку сервер автоматизации Excel запускается в отдельном процессе от MATLAB, необходимо явным образом завершить этот процесс. Нет причин, чтобы сохранить этот процесс запущенным после закрытия интерфейса, поэтому в этом примере используются delete рисунка функция для завершения процесса Excel с Quit способ. Вы также должны прекратить процесс Excel, используемый для сохранения графика. Для получения информации о завершении этого процесса см. раздел «Вставка графиков MATLAB в электронную таблицу Excel».
%% Terminate Excel processes function deleteFig(src,evt) exlWkbk.Close exlWkbk2.Close exl.Quit exl2.Quit end % deleteFig
Можно сохранить график, созданный с помощью этого интерфейса, в файле Excel. Этот пример использует отдельный процесс сервера автоматизации Excel для этой цели. Коллбэк для кнопки Save Graph создает изображение и добавляет его в файл Excel:
И оси, и легенда копируются в невидимую фигуру, сконфигурированную для печати графика, как вы видите его на экране (рисунок PaperPositionMode для свойства задано значение auto).
print команда создает изображение PNG.
Используйте Shapes интерфейс для вставки изображения в книгу Excel.
Сервер и интерфейсы создаются на фазе инициализации:
exl2 = actxserver('excel.application');
exlWkbk2 = exl2.Workbooks;
wb = invoke(exlWkbk2,'Add');
graphSheet = invoke(wb.Sheets,'Add');
Shapes = graphSheet.Shapes;Используйте этот код для реализации коллбэка кнопки Save Graph:
function saveButtonCallback(src,evt)
tempfig = figure('Visible','off','PaperPositionMode','auto');
tempfigfile = [tempname '.png'];
ah = findobj(f,'type','axes');
copyobj(ah,tempfig) % Copy both graph axes and legend axes
print(tempfig,'-dpng',tempfigfile);
Shapes.AddPicture(tempfigfile,0,1,50,18,300,235);
exl2.visible = 1;
endЧтобы запустить пример, выберите любые элементы в списке и нажмите кнопку Create Plot. Выборочные данные, предоставленная в этом примере, содержат три входных и три связанных набора данных отклика. Все эти наборы данных построены по сравнению с первым столбцом в файле Excel, который является временными данными.
Просмотрите файл данных Excel, нажав кнопку Show Excel Data File. Чтобы сохранить изображение графика в другом файле Excel, нажмите кнопку Save Graph. Если у вас есть разрешение доступа на запись в текущей папке, то опция Save Graph создает временный файл в этой папке.
На следующем изображении показан интерфейс с парой ввода/отклика, выбранной в списке и нанесенной на оси.

Чтобы запустить этот пример, щелкните эту ссылку.