Escribir código en soluciones de Office

Hay algunos aspectos de la escritura de código en proyectos de Office que difieren de otros tipos de proyectos de Visual Studio. Muchas de estas diferencias están relacionadas con la forma en que los modelos de objetos de Office se exponen al código administrado. Otras diferencias están relacionadas con el diseño de los proyectos de Office.

Se aplica a: la información de este tema se aplica a proyectos de nivel de documento y proyectos de complementos de VSTO. Consulte Características disponibles por aplicación de Office lication y tipo de proyecto.

Programación de Office y código administrado

La tecnología clave que posibilita la creación de una solución integrada de Microsoft Office es la automatización, que forma parte de la tecnología del Modelo de objetos componentes (COM). La automatización permite utilizar código para crear y controlar los objetos de software que se exponen desde aplicaciones, DLL o controles ActiveX compatibles con las interfaces programáticas adecuadas.

Descripción de los ensamblados de interoperabilidad principales

Las aplicaciones de Microsoft Office exponen gran parte de su funcionalidad a la automatización. Sin embargo, no es posible utilizar código administrado (como Visual Basic o C#) directamente para automatizarlas. Para automatizar aplicaciones de Office mediante código administrado, debe utilizar los ensamblados de interoperabilidad primarios (PIA) de Office. Los ensamblados de interoperabilidad primarios permiten que el código administrado interactúe con el modelo de objetos basado en COM de las aplicaciones de Office.

Cada aplicación de Microsoft Office tiene un PIA. Al crear un proyecto de Office en Visual Studio, se agrega automáticamente al proyecto una referencia al PIA adecuado. Para automatizar las características de otras aplicaciones de Office desde el proyecto, debe agregar manualmente una referencia al PIA apropiado. Para obtener más información, vea How to: Target aplicación de Office lications through primary interop assemblies.

Uso de ensamblados de interoperabilidad primarios en tiempo de diseño y tiempo de ejecución

Para realizar la mayoría de las tareas de desarrollo, debe tener los PIA de Office instalados y registrados en la caché global de ensamblados del equipo de desarrollo. Para obtener más información, vea Configurar un equipo para desarrollar soluciones de Office.

Los PIA de Office no son necesarios en los equipos de usuario final para ejecutar soluciones de Office destinadas a .NET Framework 4 o posterior. Para obtener más información, consulte Diseño y creación de soluciones de Office.

Uso de tipos en ensamblados de interoperabilidad primarios

Los PIA de Office contienen una combinación de tipos que expone el modelo de objetos de las aplicaciones de Office y tipos de infraestructura adicionales que no se han diseñado para utilizarse directamente en el código. Para obtener información general sobre los tipos de los PIA de Office, vea Información general de las clases e interfaces en los ensamblados de interoperabilidad primarios de Office.

Puesto que los tipos de los PIA de Office se corresponden con los tipos de los modelos de objetos basados en COM, la manera de usar estos tipos suele diferir de la de otros tipos administrados. Por ejemplo, la forma de llamar a los métodos que tienen parámetros opcionales en un ensamblado de interoperabilidad primario de Office depende del lenguaje de programación que se utilice en el proyecto. Para obtener más información, consulte los temas siguientes:

Modelo de programa de proyectos de Office

Todos los proyectos de Office incluyen una o más clases generadas que proporcionan el punto de entrada para el código. Estas clases también proporcionan acceso al modelo de objetos de la aplicación host, y a características como los paneles de acciones y los paneles de tareas personalizados.

Descripción de las clases generadas

En los proyectos de nivel de documento de Excel y Word, la clase generada es similar a un objeto de nivel superior en el modelo de objetos de la aplicación. Por ejemplo, la clase ThisDocument generada en un proyecto de documento de Word proporciona los mismos miembros que la clase Document en el modelo de objetos de Word. Para obtener más información sobre las clases generadas en proyectos de nivel de documento, vea Personalizaciones de nivel de documento del programa.

Los proyectos de complementos de VSTO proporcionan una clase generada denominada ThisAddIn. Esta clase no se parece a una clase del modelo de objetos de la aplicación host. En su lugar, esta clase representa el complemento vsto y proporciona miembros que puede usar para tener acceso al modelo de objetos de la aplicación host y acceder a otras características disponibles para los complementos de VSTO. Para obtener más información, consulte Complementos de VSTO de programa.

Todas las clases generadas de los proyectos de Office incluyen controladores de eventos Startup y Shutdown . Para empezar a escribir código, se suele agregar código a estos controladores de eventos. Para inicializar el complemento de VSTO, puede agregar código al controlador de eventos Startup . Para limpiar los recursos que usa el complemento de VSTO, puede agregar código al controlador de eventos Shutdown . Para obtener más información, vea Eventos en proyectos de Office.

Acceso a las clases generadas en tiempo de ejecución

Cuando se carga una solución de Office, el Visual Studio Tools para Office tiempo de ejecución crea una instancia de cada una de las clases generadas en el proyecto. Se puede tener acceso a estos objetos desde cualquier código del proyecto mediante la clase Globals . Por ejemplo, puede usar la Globals clase para llamar al código de la ThisAddIn clase desde un controlador de eventos de un botón de cinta de opciones en un complemento de VSTO.

Para obtener más información, vea Acceso global a objetos en proyectos de Office.

Consideraciones sobre el espacio de nombres en las soluciones de Office

No se puede cambiar el espacio de nombres predeterminado (o el espacio de nombres raíz en Visual Basic) de un proyecto de Office después de crearlo. El espacio de nombres predeterminado siempre coincidirá con el nombre que se especifica para un proyecto cuando este se crea. Si cambia el nombre del proyecto, el espacio de nombres predeterminado no cambia. Para obtener más información sobre el espacio de nombres predeterminado en proyectos, vea Página de aplicación, Diseñador de proyectos (C#) y Página de aplicaciones, Diseñador de proyectos (Visual Basic) .

Cambiar el espacio de nombres de las clases de elementos host en proyectos de C#

Las clases de elementos host (por ejemplo, las clases ThisAddIn, ThisWorkbooko ThisDocument ) tienen sus propios espacios de nombres en los proyectos de Office de Visual C#. De forma predeterminada, el espacio de nombres de los elementos host del proyecto coincide con el nombre que se especifica para un proyecto cuando este se crea.

Para cambiar el espacio de nombres de los elementos host de un proyecto de Office de Visual C#, utilice la propiedad Espacio de nombres para el elemento host . Para obtener más información, vea Propiedades en proyectos de Office.

Lenguajes de programación admitidos en proyectos de Office

Las plantillas de proyecto de Office de Visual Studio solo admiten los lenguajes de programación Visual Basic y Visual C#. Por lo tanto, estas plantillas de proyecto solo están disponibles en los nodos de Visual Basic y Visual C# del cuadro de diálogo Nuevo proyecto en Visual Studio. Para obtener más información, vea Cómo: Crear proyectos de Office en Visual Studio.

Elección del lenguaje y programación de Office

Microsoft Office y Visual Basic para Aplicaciones (VBA) se desarrollaron para trabajar conjuntamente con el objetivo de optimizar el flujo de trabajo de personalización de las aplicaciones. Visual Basic ha heredado algunos de esos desarrollos. Por ejemplo, Visual Basic admite parámetros opcionales, lo que significa que puede escribir menos código al llamar a algunos métodos en los ensamblados de interoperabilidad primarios de Microsoft Office, que al utilizar Visual C#.

Programa con Visual Basic frente a Visual C# en soluciones de Office

Puede crear soluciones de Office mediante Visual Basic o Visual C#. Dado que los modelos de objetos de Microsoft Office se diseñaron para utilizarse con Microsoft Visual Basic para Aplicaciones (VBA), los desarrolladores de Visual Basic pueden trabajar cómodamente con los objetos que exponen las aplicaciones de Microsoft Office. Los desarrolladores de Visual C# pueden utilizar la mayoría de las características que los desarrolladores de Visual Basic, pero hay algunos casos en los que deben escribir código adicional para usar los modelos de objetos de Office. También hay algunas diferencias entre las características de programación básicas del desarrollo de Office y el código administrado que se escribe en Visual Basic y C#.

Diferencias clave entre Visual Basic y Visual C#

En la tabla siguiente se muestran las diferencias principales entre Visual Basic y Visual C# en el desarrollo de Office.

Característica Descripción Compatibilidad con Visual Basic Compatibilidad con Visual C#
Parámetros opcionales Muchos métodos de Microsoft Office tienen parámetros que no son necesarios cuando se les llama. Si no se pasa ningún valor para el parámetro, se utiliza un valor predeterminado. Visual Basic admite parámetros opcionales. Visual C# admite parámetros opcionales en la mayoría de los casos. Para obtener más información, vea Parámetros opcionales en soluciones de Office.
Pasar parámetros por referencia Los parámetros opcionales de la mayoría de los ensamblados de interoperabilidad primarios de Microsoft Office se pueden pasar por valor. Sin embargo, en algunos ensamblados de interoperabilidad primarios, los parámetros opcionales que aceptan tipos de referencia deben pasarse por referencia.

Para obtener más información sobre los parámetros de tipo de referencia y valor, vea Pasar argumentos por valor y por referencia (Visual Basic) (para Visual Basic) y Pasar parámetros (guía de programación de C#).
No es necesario realizar ningún trabajo adicional para pasar parámetros por referencia. El compilador de Visual Basic pasa automáticamente los parámetros por referencia cuando es necesario. En la mayoría de los casos, el compilador de Visual C# pasa automáticamente los parámetros por referencia cuando es necesario. Para obtener más información, vea Parámetros opcionales en soluciones de Office.
Propiedades parametrizadas Algunas propiedades aceptan parámetros y actúan como funciones de solo lectura. Visual Basic admite propiedades que aceptan parámetros. Visual C# admite propiedades que aceptan parámetros.
Enlace en tiempo de ejecución El enlace en tiempo de ejecución implica determinar las propiedades de objetos en tiempo de ejecución, en lugar de convertir variables al tipo de objeto en tiempo de diseño. Visual Basic realiza el enlace en tiempo de ejecución cuando Option Strict está desactivado. Cuando Option Strict está activado, debe convertir explícitamente los objetos y usar los tipos del espacio de nombres System.Reflection para tener acceso a los miembros enlazados en tiempo de ejecución. Para obtener más información, vea Enlace en tiempo de ejecución en soluciones de Office. Visual C# realiza un enlace en tiempo de ejecución en proyectos que tienen como destino .NET Framework 4. Para obtener más información, vea Enlace en tiempo de ejecución en soluciones de Office.

Diferencias clave entre el desarrollo de Office y el código administrado

En la tabla siguiente se muestran las diferencias principales entre el desarrollo para Office y el código administrado escrito en Visual Basic y Visual C#.

Característica Descripción Compatibilidad con Visual Basic y Visual C#
Índices de matriz El límite de matriz inferior de las colecciones de aplicaciones de Microsoft Office comienza por 1. Visual Basic y Visual C# usan matrices basadas en 0. Para obtener más información, vea Matrices (Guía de programación de C#) y Matrices en Visual Basic. Para obtener acceso al primer elemento de una colección en el modelo de objetos de una aplicación de Microsoft Office, utilice el índice 1 en lugar de 0.