Чтение данных электронных таблиц с использованием Excel в качестве сервера автоматизации

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

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

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

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

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

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

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

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

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

Создайте сервер автоматизации Excel

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

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

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

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

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

  • Кнопка удаления, которая позволяет вам удалить все графики из осей

  • Кнопка сохранения, которая сохраняет график в виде файла 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

Отображение или скрытие файла Excel

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

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

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

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

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

См. также

Похожие темы