В этом примере показано, как использовать сервер COM Automation для доступа к другому приложению из MATLAB ®. Он создает пользовательский интерфейс для доступа к данным в файле Microsoft ® Excel ®. Если в приложениях не используется объектная модель компонента (COM), см. функции и примеры в электронных таблицах для поиска альтернатив импорту данных электронной таблицы Excel в MATLAB.
Чтобы включить связь между MATLAB и программой электронных таблиц, в этом примере создается объект на сервере автоматизации, на котором выполняется приложение Excel. Затем MATLAB получает доступ к данным в электронной таблице через интерфейсы, предоставляемые сервером Excel Automation. Наконец, в примере создается пользовательский интерфейс для доступа к данным в файле Microsoft Excel.
Использование сервера автоматизации для доступа к другому приложению из MATLAB
Способы преобразования данных Excel в типы, используемые в интерфейсе и печати
Следующие методы демонстрируют, как визуализировать данные электронной таблицы и манипулировать ими.
Реализация интерфейса, позволяющего выводить на печать выбранные столбцы электронной таблицы Excel.
Вставка фигуры MATLAB в файл Excel.
Чтобы просмотреть полный список кодов, откройте actx_excel.m файла в редакторе.
Первым шагом при обращении к данным электронной таблицы из MATLAB является запуск приложения Excel в серверном процессе автоматизации с помощью actxserver функция и идентификатор программы, excel.application.
exl = actxserver('excel.application'); 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);На этом этапе весь набор данных из файла Excel sheet1 доступ осуществляется через интерфейс объекта диапазона 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 Automation работает в отдельном процессе от 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 Automation. Обратный вызов кнопки Сохранить график создает изображение и добавляет его в файл 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;Используйте этот код для реализации обратного вызова кнопки «Сохранить график»:
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Для выполнения примера выберите все элементы в списке и нажмите кнопку «Создать график». Образцы данных, представленные в этом примере, содержат три набора входных данных и три связанных с ними набора данных ответа. Все эти наборы данных печатаются в сравнении с первым столбцом в файле Excel, который является временными данными.
Просмотрите файл данных Excel, нажав кнопку «Показать файл данных Excel». Чтобы сохранить изображение графика в другом файле Excel, нажмите кнопку Сохранить график. Если у вас есть разрешение на доступ к записи в текущей папке, то опция Сохранить график (Save Graph) создает временный PNG-файл в этой папке.
На следующем рисунке показан интерфейс с парой «ввод-ответ», выбранной в списке и выведенной на печать в осях.

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