В этом примере показано, как использовать 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 создает временный файл в этой папке.
На следующем изображении показан интерфейс с парой ввода/отклика, выбранной в списке и нанесенной на оси.
Чтобы запустить этот пример, щелкните эту ссылку.