exponenta event banner

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

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

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

Продемонстрированные методы

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

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

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

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

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

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

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

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

exl = actxserver('excel.application');

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.

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

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

Интерфейс содержит следующие сведения:

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

  • Кнопка «Очистить», позволяющая очистить все графики от осей

  • Кнопка «Сохранить», которая сохраняет график в виде 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 Automation работает в отдельном процессе от 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 Automation. Обратный вызов кнопки Сохранить график создает изображение и добавляет его в файл 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;

Используйте этот код для реализации обратного вызова кнопки «Сохранить график»:

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

Пример выполнения

Для выполнения примера выберите все элементы в списке и нажмите кнопку «Создать график». Образцы данных, представленные в этом примере, содержат три набора входных данных и три связанных с ними набора данных ответа. Все эти наборы данных печатаются в сравнении с первым столбцом в файле Excel, который является временными данными.

Просмотрите файл данных Excel, нажав кнопку «Показать файл данных Excel». Чтобы сохранить изображение графика в другом файле Excel, нажмите кнопку Сохранить график. Если у вас есть разрешение на доступ к записи в текущей папке, то опция Сохранить график (Save Graph) создает временный PNG-файл в этой папке.

На следующем рисунке показан интерфейс с парой «ввод-ответ», выбранной в списке и выведенной на печать в осях.

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

См. также

Связанные темы