Cómo usar MFC para automatizar Excel 2000 y Excel 2002 y obtener una matriz de un rango en Excel 2000 y Excel 2002

Seleccione idioma Seleccione idioma
Id. de artículo: 186122 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Resumen

En este artículo muestra cómo automatizar Microsoft Excel y devolver los valores de un rango de varias celdas a una matriz.

Más información

Para devolver los valores de un rango de varias celdas sin consultar las celdas uno a uno, debe utilizar la función de miembro de GetValue del objeto Range para devolver los valores a un VARIANT. A continuación, construir un SAFEARRAY según el VARIANT devuelto desde GetValue. Una vez que el SAFEARRAY, puede obtener acceso a los elementos mediante GetElement. Los pasos siguientes ilustran este proceso y demostración cómo puede obtener acceso a cadena y los elementos numéricos.

Notas para automatizar Microsoft Excel 2000 y 2002

El código de ejemplo en este artículo utiliza contenedores de clase generados a partir de la biblioteca de objeto Excel 97 (Excel 8.olb). Con pequeñas modificaciones, este código puede aplicarse a un cliente de automatización que utiliza contenedores de clase para Excel 2000 (Excel9.olb) o en Excel 2002 (Excel.olb). Para obtener información adicional acerca de cómo utilizar el código de ejemplo descrito en este artículo con Microsoft Excel 2000 o 2002 biblioteca de tipo, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
224925INFORMACIÓN: Bibliotecas de tipos para Office pueden cambiar con la nueva versión

Pasos para crear proyectos

  1. En Microsoft Excel, cree un libro nuevo. Rellenar celdas A1:C8 con una combinación de datos numéricos y de cadena. Guarde el libro como "c:\test.xls" y salga de Microsoft Excel.
  2. Siga los pasos 1 al 12 en el siguiente artículo en Microsoft Knowledge Base para crear un proyecto de ejemplo que utiliza la interfaz IDispatch interfaces y funciones miembro definidas en la biblioteca de tipo Excel8.olb:
    178749Cómo crear un proyecto de automatización mediante MFC y una biblioteca de tipos
  3. En la parte superior del archivo AutoProjectDlg.cpp, agregue la siguiente línea:
          #include "excel8.h"
    					
  4. Agregue el código siguiente a CAutoProjectDlg:: OnRun () en el archivo AutoProjectDlg.cpp:

    Código de ejemplo

          // OLE Variant for Optional.
          COleVariant VOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
    
          _Application objApp;
          _Workbook objBook;
          Workbooks objBooks;
          Worksheets objSheets;
          _Worksheet objSheet;
          Range objRange;
          VARIANT ret;
    
          // Instantiate Excel and open an existing workbook.
          objApp.CreateDispatch("Excel.Application");
          objBooks = objApp.GetWorkbooks();
          objBook = objBooks.Open("C:\\Test.xls",
                    VOptional, VOptional, VOptional, VOptional,
                    VOptional, VOptional, VOptional, VOptional,
                    VOptional, VOptional, VOptional, VOptional);
          objSheets = objBook.GetWorksheets();
          objSheet = objSheets.GetItem(COleVariant((short)1));
    
          //Get the range object for which you wish to retrieve the
          //data and then retrieve the data (as a variant array, ret).
          objRange = objSheet.GetRange(COleVariant("A1"), COleVariant("C8"));
          ret = objRange.GetValue();
    
          //Create the SAFEARRAY from the VARIANT ret.
          COleSafeArray sa(ret);
    
          //Determine the array's dimensions.
          long lNumRows;
          long lNumCols;
          sa.GetUBound(1, &lNumRows);
          sa.GetUBound(2, &lNumCols);
    
          //Display the elements in the SAFEARRAY.
          long index[2];
          VARIANT val;
          int r, c;
          TRACE("Contents of SafeArray\n");
          TRACE("=====================\n\t");
          for(c=1;c<=lNumCols;c++)
          {
             TRACE("\t\tCol %d", c);
          }
          TRACE("\n");
          for(r=1;r<=lNumRows;r++)
          {
             TRACE("Row %d", r);
             for(c=1;c<=lNumCols;c++)
             {
                index[0]=r;
                index[1]=c;
                sa.GetElement(index, &val);
                switch(val.vt)
                {
                case VT_R8:
                   {
                      TRACE("\t\t%1.2f", val.dblVal);
                      break;
                   }
                case VT_BSTR:
                   {
                      TRACE("\t\t%s",(CString)val.bstrVal);
                      break;
                   }
    
                case VT_EMPTY:
                   {
                      TRACE("\t\t<empty>");
                      break;
                   }
                }
             }
             TRACE("\n");
          }
    
          //Close the workbook without saving changes
          //and quit Microsoft Excel.
          objBook.Close(COleVariant((short)FALSE), VOptional, VOptional);
          objApp.Quit();
    					
  5. Compilar el proyecto y ejecútelo.
  6. Haga clic en ejecutar. Los valores de celdas A1:C8 se muestran en la ventana Resultados.

Referencias

Para obtener información adicional acerca de cómo automatizar Microsoft Excel mediante MFC, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:
186120Cómo usar MFC para automatizar Excel y rellenar un rango con una matriz
184663Cómo incrustar y automatizar una hoja de cálculo Microsoft Excel con MFC
179706Cómo usar MFC para automatizar Excel y crear/formato un nuevo libro
178781Cómo: Automatizar mediante MFC y funciones de hoja de cálculo de Excel
178783Cómo: Utilizar MFC para crear un gráfico de Microsoft Excel
167668Cómo pasar una matriz SafeArray de cadenas en una VARIANT *

Propiedades

Id. de artículo: 186122 - Última revisión: martes, 23 de enero de 2007 - Versión: 5.1
La información de este artículo se refiere a:
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 6.0 Enterprise
  • Microsoft Visual C++ 5.0 Professional
  • Microsoft Visual C++ 6.0 Professional
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 97 Standard Edition
Palabras clave: 
kbmt kbprogramming kbfunctions kbautomation kbhowto kbinterop KB186122 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 186122

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com