Main Content

Leer datos de hoja de cálculo utilizando como Automation ServerExcel

En este ejemplo se muestra cómo utilizar un servidor de automatización COM para acceder a otra aplicación.MATLAB® Crea una interfaz de usuario para acceder a los datos en un Microsoft®Excel® Archivo. Si no utiliza el modelo de objetos componentes (COM) en sus aplicaciones, consulte las funciones y ejemplos de alternativas para importar datos de hojas de cálculo en.Hojas de cálculoExcelMATLAB

Para habilitar la comunicación entre y el programa de hoja de cálculo, en este ejemplo se crea unMATLAB MicrosoftActiveX® objeto en un servidor de Automation que ejecuta una aplicación. a continuación, accede a los datos de la hoja de cálculo a través de las interfaces proporcionadas por el servidor de Automation.ExcelMATLABExcel Por último, en el ejemplo se crea una interfaz de usuario para tener acceso a los datos de un MicrosoftExcel Archivo.

Técnicas demostradas

  • El uso de un servidor de Automation para acceder a otra aplicación desdeMATLAB

  • Formas de manipular los datos en tipos utilizados en la interfaz y el trazadoExcel

Las siguientes técnicas demuestran cómo visualizar y manipular los datos de la hoja de cálculo:

  • Implementación de una interfaz que permite trazar las columnas seleccionadas de la hoja de cálculo.Excel

  • Inserción de una figura en un archivo.MATLABExcel

Para ver la lista completa de códigos, abra el archivo en el editor.actx_excel. m

Cree el servidor de AutomationExcel

El primer paso para acceder a los datos de la hoja de cálculo es ejecutar la aplicación en un proceso de servidor de Automation mediante la función y el identificador del programa,.MATLABExcelactxserverexcel.application

exl = actxserver('excel.application');

El objeto proporciona acceso a una serie de interfaces admitidas por el programa.ActiveXexlExcel Utilice la interfaz para abrir el archivo que contiene los datos.WorkbooksExcel

exlWkbk = exl.Workbooks;
exlFile = exlWkbk.Open([docroot '/techdoc/matlab_external/examples/input_resp_data.xls']);

Utilice la interfaz del libro de trabajo para tener acceso a los datos de un objeto, que almacena una referencia a un rango de datos de la hoja especificada.SheetsRange Este ejemplo tiene acceso a todos los datos de la primera celda de la columna a la última celda de la columna.AG

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);

En este punto, se accede a todo el conjunto de datos desde el archivo a través de la interfaz de objeto de rango.Excelsheet1rngObj Este objeto devuelve los datos de una matriz de celdas, que contiene datos numéricos y de caracteres:MATLABexlData

exlData = rngObj.Value;

Manipular datos en WorkspaceMATLAB

Ahora que los datos están en una matriz de celdas, puede utilizar funciones para extraer y remodelar partes de los datos que se usarán en la interfaz y pasar a la función de trazado.MATLAB Para las suposiciones sobre los datos, consulte.Formato de hoja de cálculoExcel

El código siguiente manipula los datos:

for ii = 1:size(exlData,2)
   matData(:,ii) = reshape([exlData{2:end,ii}],size(exlData(2:end,ii)));
   lBoxList{ii} = [exlData{1,ii}];
end

El código realiza las siguientes operaciones:

  • Extrae datos numéricos de la matriz de celdas. Vea la expresión de indexación dentro de las llaves.{}

  • Conmemora los dobles individuales devueltos por la operación de indexación. Vea la expresión dentro de los corchetes.[]

  • Transforma los resultados en una matriz que organiza los datos en columnas mediante la función.reshape

  • Extrae el texto de la primera celda de cada columna de datos y almacena el texto en una matriz de celdas.exlDatalBoxList Esta variable se utiliza para generar los elementos en el cuadro de lista.

Formato de hoja de cálculoExcel

En este ejemplo se asume una organización determinada de la hoja de cálculo, como se muestra en la siguiente imagen.Excel

El formato del archivo es el siguiente:Excel

  • El primer elemento de cada columna es el texto que identifica los datos contenidos en la columna. Estos valores se extraen y se utilizan para rellenar el cuadro de lista.

  • La primera columna se utiliza para el eje de todos los trazados de los datos restantes.Timex

  • Se leen todas las filas de cada columna.MATLAB

Crear interfaz de trazador

Este ejemplo utiliza una interfaz que le permite seleccionar de una lista de datos de entrada y respuesta. Todos los datos se trazan en función del tiempo y puede seguir añadiendo más datos al gráfico. Cada gráfica de datos agregada al gráfico hace que la leyenda se expanda.

La interfaz incluye estos detalles:

  • Leyenda que se actualiza a medida que agrega datos a un gráfico

  • Botón Clear que le permite borrar todos los gráficos de los ejes

  • Guardar el botón que guarda el gráfico como un archivo PNG y lo agrega a otro archivoExcel

  • Botón de alternancia que muestra u oculta el archivo al que se accedeExcel

  • La función Delete de la figura para terminar el servidor de Automation

Seleccionar y trazar datos

Al hacer clic en el botón, su función de devolución de llamada consulta el cuadro de lista para determinar qué elementos se seleccionan y traza cada dato en comparación con el tiempo. actualiza la leyenda para mostrar nuevos datos sin dejar de mantener la leyenda de los datos existentes.Create PlotMATLAB

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

Desactive los ejes

El trazador está diseñado para añadir gráficos continuamente a medida que el usuario selecciona los datos del cuadro de lista. El botón borra y restablece los ejes y borra la variable utilizada para almacenar las etiquetas de los datos de trazado (utilizados por la leyenda).Clear Graph

%% Callback for clear button
function clearButtonCallback(src,evt)
   cla(a,'reset')
   lbs = '';
end % clearButtonCallback

Mostrar u ocultar archivoExcel

El programa tiene acceso a las propiedades de la aplicación que se ejecuta en el servidor de Automation.MATLABExcel Al establecer la propiedad en o, esta devolución de llamada controla la visibilidad del archivo.Visible10Excel

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

Cierre la figura y finalice el proceso de automatizaciónExcel

Dado que el servidor de Automation se ejecuta en un proceso independiente, debe terminar este proceso explícitamente.ExcelMATLAB No hay ninguna razón para mantener este proceso en ejecución después de cerrar la interfaz, por lo que este ejemplo utiliza la función de la figura para terminar el proceso con el método.deleteExcelQuit También debe finalizar el proceso utilizado para guardar el gráfico.Excel Para obtener información sobre la terminación de este proceso, consulte.Insertar gráficos en SpreadsheetMATLABExcel

%% Terminate Excel processes
function deleteFig(src,evt)
   exlWkbk.Close
   exlWkbk2.Close
   exl.Quit
   exl2.Quit
end % deleteFig

Insertar gráficos en SpreadsheetMATLABExcel

Puede guardar el gráfico creado con esta interfaz en un archivo.Excel En este ejemplo se utiliza un proceso de servidor de Automation independiente para este propósito.Excel La devolución de llamada para el botón de inserción crea la imagen y la agrega a un archivo:Save GraphExcel

  • Tanto los ejes como la leyenda se copian en una figura invisible configurada para imprimir el gráfico tal y como se ve en la pantalla (la propiedad de la figura está establecida en).PaperPositionModeauto

  • El comando crea la imagen PNG.print

  • Utilice la interfaz para insertar la imagen en el libro.ShapesExcel

El servidor y las interfaces se instancian durante la fase de inicialización:

exl2 = actxserver('excel.application');
exlWkbk2 = exl2.Workbooks;
wb = invoke(exlWkbk2,'Add');
graphSheet = invoke(wb.Sheets,'Add');
Shapes = graphSheet.Shapes;

Utilice este código para implementar la devolución de llamada de botón: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

Ejecute example

Para ejecutar el ejemplo, seleccione cualquier elemento en el cuadro de lista y haga clic en el botón.Create Plot Los datos de ejemplo proporcionados con este ejemplo contienen tres conjuntos de datos de entrada y tres de respuesta asociados. Todos estos conjuntos de datos se trazan en comparación con la primera columna del archivo, que son los datos de tiempo.Excel

Para ver el archivo de datos, haga clic en el botón.ExcelShow Excel Data File Para guardar una imagen del gráfico en un archivo diferente, haga clic en el botón.ExcelSave Graph Si tiene permiso de acceso de escritura en la carpeta actual, la opción crea un archivo PNG temporal en esa carpeta.Save Graph

La siguiente imagen muestra la interfaz con un par de entrada/respuesta seleccionado en el cuadro de lista y trazado en los ejes.

Para ejecutar este ejemplo, haga clic en este.Enlace

Consulte también

Temas relacionados