Чтение 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 workspace

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

Формат файла 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

Отображение или 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. Если у вас есть разрешение доступа для записи в текущей папке, то опция Графика Сохранения создает временный файл PNG в той папке.

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

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

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

Похожие темы

Была ли эта тема полезной?