Чтение Data Using электронной таблицы Excel как сервер автоматизации

Этот пример показывает, как использовать Сервер автоматизации COM, чтобы получить доступ к другому приложению от MATLAB®. Это создает пользовательский интерфейс, чтобы получить доступ к данным в файле Microsoft® Excel®. Если вы не используете Объектную модель программных компонентов (COM) в своих приложениях, то смотрите функции и примеры в электронных таблицах для альтернатив импортированию данных об электронной таблице Excel в MATLAB.

Чтобы включить связь между MATLAB и программой электронной таблицы, этот пример создает объект Microsoft ActiveX® в Сервере автоматизации, запускающем приложение Excel. MATLAB затем получает доступ к данным в электронной таблице через интерфейсы, обеспеченные Сервером автоматизации Excel. Наконец, пример создает пользовательский интерфейс, чтобы получить доступ к данным в файле Microsoft Excel.

Методы, продемонстрированные

  • Использование Сервера автоматизации, чтобы получить доступ к другому приложению из MATLAB

  • Способы управлять данными Excel в типы, используемые в интерфейсе и графическом выводе

Следующие методы демонстрируют, как визуализировать и управлять данными об электронной таблице:

  • Реализация интерфейса, который позволяет строить выбранных столбцов электронной таблицы Excel.

  • Вставка фигуры MATLAB в файл Excel.

Чтобы просмотреть полный листинг кода, откройте файл actx_excel.m в редакторе.

Создайте Excel Automation Server

Первый шаг в доступе к данным об электронной таблице 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

Теперь, когда данные находятся в массиве ячеек, можно использовать функции 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, как показано в следующем изображении.

Формат файла Excel следующие:

  • Первый элемент в каждом столбце является текстом, который идентифицирует данные, содержавшиеся в столбце. Эти значения извлекаются и используются, чтобы заполнить поле списка.

  • Первый столбец Time используется для оси X всех графиков остающихся данных.

  • Все строки в каждом столбце читаются в MATLAB.

Создайте интерфейс Plotter

Этот пример использует интерфейс, который позволяет вам выбрать из списка данных об ответе и входа. Все данные отображены на графике как функция времени, и можно продолжить добавлять больше данных в график. Каждый график данных, добавленный к графику, заставляет легенду расширяться.

Интерфейс включает эти детали:

  • Легенда, которая обновляет, когда вы добавляете данные в график

  • Кнопка 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

Отображение или Hide файл Excel

Программа MATLAB имеет доступ к свойствам приложения Excel, запускающегося в Сервере автоматизации. Путем установки свойства Visible на 1 или 0, этот коллбэк управляет видимостью файла Excel.

%% Display or hide Excel file
function dispButtonCallback(src,evt)
   exl.visible = get(src,'Value');
end % dispButtonCallback

Закрытие Figure и Terminate процесс автоматизации Excel

Поскольку Сервер автоматизации 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

Вставьте графики MATLAB в электронную таблицу Excel

Можно сохранить график, созданный с этим интерфейсом в файле 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 в той папке.

Следующее изображение показывает интерфейс с парой входа/ответа, выбранной в поле списка и построенной в осях.

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

Смотрите также

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте