EJEMPLO: XLCLIENT: cliente de automatización para Excel

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

En esta página

Resumen

XLCLIENT muestra cómo controlar Microsoft Excel utilizando automatización OLE. El directorio MFC contiene un ejemplo que utiliza MFC. El directorio SDK contiene un ejemplo que no utiliza MFC.

Más información

El archivo siguiente está disponible para descargarlo del Centro de descarga de Microsoft:
Xlclient.exe
Para obtener información adicional acerca de cómo descargar los archivos de soporte técnico de Microsoft, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
119591Cómo obtener Archivos de soporte técnico de Microsoft desde los servicios en línea
Microsoft exploró este archivo en busca de virus. con el software de detección de virus más reciente disponible en la fecha de publicación. Asimismo, el archivo se almacenó en servidores seguros que ayudan a impedir la realización de cambios no autorizados. Excel expone sus objetos, propiedades y métodos de modo que un cliente puede tener acceso a ellos a través de automatización. Este ejemplo muestra cómo escribir a un cliente de automatización que es equivalente al código de Visual Basic 4.0 siguiente que inserta valores en las celdas y crea un gráfico de esos valores.
Const xlWorkSheet =-4167
Const xl3DPie =-4102
Const xlRows = 1
Configurar aplicación = CreateObject
Application.Visible = True
Conjunto libro = application.Workbooks.Add(template:=xlWorkSheet)
Establecer la hoja de cálculo = workbook.Worksheets(1)
Worksheet.Range("A1:D1").Value = Array ("Norte", "Sur", "este", "Oeste")
Worksheet.Range("A2").Value = 5.2
Worksheet.Range("B2").Value = 10
Worksheet.Range("C2").Value = 8
Worksheet.Range("D2").Value = 20
Establecer intervalo = worksheet.Range("A1:D2")
Gráfico de conjunto = workbook.Charts.Add
Chart.ChartWizard origen: = intervalo, galería: = xl3DPie,
Formato: = 7, plotBy: = xlRows, categoryLabels: = 1, seriesLabels: = 0, hasLegend: = 2, título: = "Porcentaje de ventas" workbook.Saved = True
' Para que Excel no pregunta si desea guardar este documento al cerrar.

Cómo escribir a un cliente de automatización para Microsoft Excel

Un cliente de automatización utiliza la interfaz IDispatch para controlar Microsoft Excel. La siguiente información es aplicable al escribir a un cliente de automatización para Microsoft Excel:

  • Lea la documentación de las Microsoft Excel automatización métodos y propiedades que vaya a utilizar en el archivo Vba_xl.hlp suministrada con Excel.
  • Los valores de constantes de Microsoft Excel como xlWorkSheet xl3DPie, xlRows etc. puede obtenerse desde el siguiente artículo de knowledge base:
    112671OFF: "integradas constantes en Visual Basic para aplicaciones" (WC0993)
    Estos valores de constantes también pueden obtenerse desde tipo de biblioteca del Microsoft Excel mediante un explorador de la biblioteca de tipo como Ole2vw32.exe (en directorio \bin del compilador). Abrir biblioteca de tipo del Microsoft Excel (for example, Xl5en32.olb para la versión estadounidense de Microsoft Excel 95) mediante el menú archivo y ViewTypeLibrary de Ole2vw32.exe. Colocar el cuadro combinado typeinfos y seleccione "constantes". Las constantes de Microsoft Excel se mostrará en el cuadro de lista de variables o DataMembers.
  • Todos los argumentos y tipos devueltos de los métodos de automatización de Microsoft Excel y los tipos son de tipo VARIANT. Los tipos reales que deben rellenarse en y recuperan de un VARIANT no se ha indicado explícitamente en Vba_xl.hlp. Sin embargo los tipos pueden adivinarse fácilmente desde la documentación. Por ejemplo, se puede pasar un número como VT_I2, una cadena como VT_BSTR y un objeto como VT_DISPATCH. Microsoft Excel hará las conversiones adecuadas si es necesario. Valores devueltos por Microsoft Excel pueden adivinarse de forma similar. Si no se puede determinar el tipo exacto del valor devuelto Compruebe el campo VARIANT.vt o forzar el tipo devuelto mediante VariantChangeType. Como se menciona en "Detalles de Excel de Microsoft" sección del capítulo 7, en el Kit del programador de Microsoft Excel en el Kit del programador de Office en el CD de MSDN, Microsoft Excel nunca devolverá un VARIANT con un tipo de datos que no está en la siguiente lista:
       Data Type                               Variant Constant
       ---------                               ----------------
       Boolean                                 VT_BOOL
       Currency (scaled integer)               VT_CY
       Date                                    VT_DATE
       Error cell values (#N/A, #REF etc.)     VT_ERROR
       Integer                                 VT_I2
       Long (long integer)                     VT_I4
       Object                                  VT_DISPATCH
       Single (single-precision floating-point)VT_R4
       Double (double-precision floating-point)VT_R8
       String                                  VT_BSTR
    						
La siguiente información es aplicable a cualquier cliente de automatización:

  • OLE utiliza cadenas Unicode. La macro OLESTR puede utilizarse para convertir las constantes de cadena a cadenas Unicode. En MFC, se pueden convertir variables que contienen cadenas a y desde Unicode utilizando las macros T2OLE y OLE2T. Consulte El 59 Nota técnica de MFC para obtener más detalles. Código que no utiliza MFC encontrará información para la conversión ANSI y Unicode en el siguiente artículo de knowledge base:

    Cómo convertir de ANSI a Unicode y Unicode a ANSI para OLE ID:138813
  • El llamador de un método de API de OLE o una interfaz es responsable de liberar argumentos y valores devueltos.

Cómo escribir a un cliente de automatización de MFC para Microsoft Excel

  1. Se admite el uso AppWizard para crear una aplicación con automatización.
  2. Seleccione la ficha automatización en el Asistente para clases y seleccione AddClass / de TypeLibrary OLE. Seleccione la biblioteca de tipo de Excel (Xl5en32.olb para EE.UU. versión de Microsoft Excel 95) en el directorio de Microsoft Excel. Seleccione los objetos Microsoft Excel que se va a utilizar. Pero creará una clase de proxy derivada de COleDispatchDriver para cada objeto que seleccione. El ejemplo selecciona los objetos Application, Range, libro, libros, hoja de cálculo, gráficos y gráficos Excel y ClassWizard crea las nuevas clases en Xl5en32.h y Xl5en32.h. Modifique el nombre de la DialogBox método el intervalo de objeto para un nombre diferente (por ejemplo, cuadro de diálogo) porque los archivos de encabezado del sistema definen DialogBox como DialogBoxA o DialogBoxW.
  3. Incluya el archivo de encabezado generado en el paso 2 en el archivo .cpp que contendrá el código para controlar Microsoft Excel.
  4. Argumentos opcionales que no pasan pueden indicarse al pasar un VARIANT que contiene VT_ERROR/DISP_E_PARAMNOTFOUND.
  5. Algunos métodos de Microsoft Excel se pueden llamar mediante dos sintaxis, tal como se documenta en Vba_xl.hlp. Por ejemplo, el método de libros se documenta como sigue:
    Sintaxis 1
    Object.Workbooks(index)

    Sintaxis 2
    Object.Workbooks
    ClassWizard generará sólo un método. Por lo tanto, si necesita utilizar la sintaxis otra, modificar la .h generado y el archivo .cpp para agregar otro método para la sintaxis de otra. Por ejemplo en que este ejemplo agrega Workbooks2 a la clase Application como sigue, para corresponden a la sintaxis 2 del método WorkBooks:
       VARIANT Application::Workbooks2()
       {
       VARIANT result;
       InvokeHelper(0x23c, DISPATCH_METHOD, VT_VARIANT, (void*)&result, NULL);
       return result;
       }
    						
    Workbooks2 tiene el mismo DISPID (0x23c) como libros pero no tiene argumentos. Este problema no puede resolverse pasando DISP_E_PAMNOTFOUND/VT_ERROR. Todos los métodos marcan como tener dos sintaxis debe controlarse de esta manera.

    El ejemplo utiliza los métodos Range, libros y gráficos, todos los cuales tienen dos sintaxis. Por tanto agrega Range1 y Workbooks2 Charts2.
  6. Clase de COleDispatchDriver de MFC no admite argumentos con nombre. Se deben pasar argumentos por posición.
  7. Si Microsoft Excel provoca una excepción devolverá DISP_E_EXCEPTION de IDispatch:: Invoke y rellenará EXCEPINFO parámetro de este método. MFC producirá un COleDispatchException cuando esto sucede y el cliente puede obtener la información de error en la estructura EXCEPINFO detectar esta excepción.
  8. El código de Doc.cpp en el ejemplo muestra cómo controlar Microsoft Excel mediante las clases MFC.

Cómo escribir a un cliente de automatización no MFC de Microsoft Excel

  1. Las funciones auxiliares, CreateObject y Invoke en Invhelp.cpp y Invhelp.h del ejemplo BROWSE en el SDK de Win32 pueden utilizarse para escribir fácilmente un cliente de automatización no MFC. Otro enfoque es llamar directamente a IDispatch:: Invoke. Invocar utiliza enlace a un servidor de control. Se puede hacer más eficaz mediante la modificación para utilizar en el que se obtiene el DISPID del tipo de enlace id-biblioteca en lugar de hacerlo a través de IDispatch:: GetIDsOfNames.
  2. La función auxiliar de Invoke no admite argumentos con nombre. Se deben pasar argumentos por posición.
  3. La función auxiliar de Invoke permite una estructura EXCEPINFO se pasa como uno de los parámetros. Microsoft Excel rellenará esta estructura con información de error si produce una excepción y un EXCEPINFO estructura es proporcionado por el cliente. Invocar será devolver DISP_E_EXCEPTION cuando Microsoft Excel genera una excepción. Las cadenas en el EXCEPINFO estructura debe liberar el cliente. El ejemplo de código no pasa una estructura EXCEPINFO a Microsoft Excel.
  4. El código de Xlclient.cpp en el ejemplo muestra cómo controlar Microsoft Excel.

Propiedades

Id. de artículo: 141759 - Última revisión: viernes, 19 de enero de 2007 - Versión: 4.6
La información de este artículo se refiere a:
  • Microsoft Excel 2000 Service Pack 1
  • Microsoft Visual C++ 6.1
  • Microsoft OLE 4.0 sobre las siguientes plataformas
    • Microsoft Windows NT 3.51 Service Pack 5
    • Microsoft Windows 95
  • Microsoft Excel 2000 Standard Edition
Palabras clave: 
kbmt kbdownload kbautomation kbsample KB141759 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): 141759

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