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