Этот пример показывает, как использовать Сервер автоматизации 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, чтобы извлечь и изменить части данных, чтобы использовать в интерфейсе и передать функции plot. Для предположений о данных смотрите Формат электронной таблицы 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. Если у вас есть разрешение доступа для записи в текущей папке, то опция Графика Сохранения создает временный файл PNG в той папке.
Следующее изображение показывает интерфейс с парой входного параметра/ответа, выбранной в поле списка и построенной график в осях.
Чтобы запустить этот пример, щелкните по этой ссылке.