Sunteți pe pagina 1din 11

Tutorial: Programación de Office (C# y

Visual Basic)
En este artículo
1. Requisitos previos
2. Vea también

Visual Studio presenta características en C# y Visual Basic que mejoran la


programación de Microsoft Office.Las características útiles de C# incluyen
argumentos opcionales y con nombre, y devuelven valores de tipo dynamic . En la
programación COM, puede omitir la palabra clave ref y obtener acceso a las
propiedades indexadas. Las nuevas características de Visual Basic incluyen
propiedades implementadas automáticamente, instrucciones de expresiones
lambda e inicializadores de colección.

En ambos lenguajes se puede insertar información de tipo, lo que permite la


implementación de ensamblados que interactúan con componentes COM sin
necesidad de implementar ensamblados de interoperabilidad primarios (PIA) en el
equipo del usuario. Para obtener más información, vea Tutorial: Incrustar los tipos
de los ensamblados administrados

En este tutorial se muestran estas características en el contexto de la programación


de Office, pero muchas de ellas también son útiles en la programación general. En
el tutorial, usa una aplicación complemento de Excel para crear un libro de
Excel. Después, crea un documento de Word que contiene un vínculo al libro. Por
último, ve cómo habilitar y deshabilitar la dependencia de un PIA.
Requisitos previos
Debe tener Microsoft Office Excel y Microsoft Office Word instalados en su equipo
para completar este tutorial.

Si usa un sistema operativo anterior a Windows Vista, asegúrese de que .NET


Framework 2.0 esté instalado.
Nota
Es posible que tu equipo muestre nombres o ubicaciones diferentes para algunos
de los elementos de la interfaz de usuario de Visual Studio en las siguientes
instrucciones. La edición de Visual Studio que se tenga y la configuración que se
utilice determinan estos elementos. Para obtener más información,
vea Personalizar el IDE.
Para configurar una aplicación complemento de Excel

1. Inicie Visual Studio.


2. En el menú Archivo , elija Nuevoy haga clic en Proyecto.
3. En el panel Plantillas instaladas, expanda Visual Basic o Visual C#,
expanda Office y, después, haga clic en el año de la versión del producto de
Office.
4. En el panel Plantillas, haga clic en versión de <Excel > Complemento.
5. En la parte superior del panel Plantillas, asegúrese de que .NET Framework
4 o una versión posterior aparece en el cuadro Plataforma de destino.
6. Si quiere, escriba un nombre para el proyecto en el cuadro Nombre.
7. Haga clic en Aceptar.
8. El proyecto nuevo aparece en el Explorador de soluciones.
Para agregar referencias

1. En el Explorador de soluciones, haga clic con el botón derecho en el nombre


del proyecto y luego haga clic en Agregar referencia. Aparecerá el cuadro de
diálogo Agregar referencia.
2. En la pestaña Ensamblados, seleccione Microsoft.Office.Interop.Excel,
versión <version>.0.0.0 (para obtener una clave de los números de versión
de productos de Office, vea Versiones de Microsoft), en la lista Nombre de
componente y, después, mantenga presionada la tecla CTRL y
seleccione Microsoft.Office.Interop.Word, version <version>.0.0.0 . Si no
ve los ensamblados, asegúrese de que están instalados y que se muestran
(vea Cómo: Instalar ensamblados de interoperabilidad primarios de Office).
3. Haga clic en Aceptar.
Para agregar las instrucciones Imports necesarias o las directivas
using

1. En el Explorador de soluciones, haga clic con el botón derecho en el


archivo ThisAddIn.vb o ThisAddIn.cs y luego haga clic en Ver código.
2. Agregue las siguientes instrucciones Imports (Visual Basic) o
directivas using (C#) en la parte superior del archivo de código si no están
presentes.

C#Copiar
using System.Collections.Generic;
using Excel = Microsoft.Office.Interop.Excel;
using Word = Microsoft.Office.Interop.Word;

Para crear una lista de las cuentas bancarias

1. En el Explorador de soluciones, haga clic con el botón derecho en el nombre


del proyecto, haga clic en Agregar y luego, en Clase. Denomine la clase
Account.vb si está utilizando Visual Basic o Account.cs si está utilizando
C#. Haga clic en Agregar.
2. Reemplace la definición de la clase Account por el código siguiente. Las
definiciones de clase usan propiedades implementadas automáticamente. Para
obtener más información, vea Propiedades implementadas automáticamente.

C#Copiar

class Account
{
public int ID { get; set; }
public double Balance { get; set; }
}

3. Para crear una lista bankAccounts que contenga dos cuentas, agregue el
código siguiente al
método ThisAddIn_Startup en ThisAddIn.vb o ThisAddIn.cs. Las
declaraciones de lista usan inicializadores de colección. Para obtener más
información, vea Inicializadores de colección.

C#Copiar

var bankAccounts = new List<Account>


{
new Account
{
ID = 345,
Balance = 541.27
},
new Account
{
ID = 123,
Balance = -127.44
}
};

Para exportar datos a Excel

1. En el mismo archivo, agregue el siguiente método a la clase ThisAddIn . El


método configura un libro de Excel, a donde exporta los datos.

C#Copiar

void DisplayInExcel(IEnumerable<Account> accounts,


Action<Account, Excel.Range> DisplayFunc)
{
var excelApp = this.Application;
// Add a new Excel workbook.
excelApp.Workbooks.Add();
excelApp.Visible = true;
excelApp.Range["A1"].Value = "ID";
excelApp.Range["B1"].Value = "Balance";
excelApp.Range["A2"].Select();

foreach (var ac in accounts)


{
DisplayFunc(ac, excelApp.ActiveCell);
excelApp.ActiveCell.Offset[1, 0].Select();
}
// Copy the results to the Clipboard.
excelApp.Range["A1:B3"].Copy();
}

En este método se utilizan dos características de C# nuevas. Ambas


características ya existen en Visual Basic.

 El método Add tiene un parámetro opcional para especificar una plantilla


determinada. Los parámetros opcionales introducidos en C# 4 permiten
omitir el argumento para ese parámetro si se desea utilizar el valor
predeterminado del parámetro. Dado que en el ejemplo anterior no se
envía ningún argumento, Add usa la plantilla predeterminada y crea un
libro nuevo. La instrucción equivalente en versiones anteriores de C#
requiere un argumento de marcador de
posición: excelApp.Workbooks.Add(Type.Missing) .

Para obtener más información, vea Argumentos opcionales y con


nombre.

 Las propiedades Range y Offset del objeto Range usan la


característica de propiedades indizadas. Esta característica permite
utilizar estas propiedades de los tipos COM mediante la siguiente
sintaxis típica de C#. Las propiedades indizadas también permiten
utilizar la propiedad Value del objeto Range , eliminando la necesidad
de utilizar la propiedad Value2 . La propiedad Value está indizada, pero
el índice es opcional. Los argumentos opcionales y las propiedades
indizadas funcionan conjuntamente en el ejemplo siguiente.

C#Copiar

// Visual C# 2010 provides indexed properties for COM


programming.
excelApp.Range["A1"].Value = "ID";
excelApp.ActiveCell.Offset[1, 0].Select();

En las versiones anteriores del lenguaje, se requiere la siguiente sintaxis


especial.

C#Copiar

// In Visual C# 2008, you cannot access the Range, Offset, and


Value
// properties directly.
excelApp.get_Range("A1").Value2 = "ID";
excelApp.ActiveCell.get_Offset(1, 0).Select();

No es posible crear propiedades indizadas propias. La característica solo


admite el uso de las propiedades indizadas existentes.
Para obtener más información, vea How to: Use Indexed Properties in
COM Interop Programming(Cómo: Usar propiedades indexadas en la
programación de interoperabilidad COM).

2. Agregue el código siguiente al final de DisplayInExcel para ajustar los


anchos de columna a fin de adaptarlos al contenido.

C#Copiar

excelApp.Columns[1].AutoFit();
excelApp.Columns[2].AutoFit();

Estas adiciones muestran otra característica de C#: el tratamiento de


valores Object devueltos por hosts COM, como Office, como si tuvieran un
tipo dynamic. Esto sucede automáticamente cuando Incrustar tipos de
interoperabilidad se establece en su valor predeterminado True o, de igual
modo, cuando la opción del compilador /link hace referencia al
ensamblado. El tipo dynamic permite el enlace en tiempo de ejecución, ya
disponible en Visual Basic, y evita la conversión explícita que se requiere en
Visual C# 2008 y versiones anteriores del lenguaje.

Por ejemplo, excelApp.Columns[1] devuelve Object y AutoFit es un


método Range de Excel. Sin dynamic , debe convertir el objeto devuelto
por excelApp.Columns[1] como una instancia de Range antes de llamar al
método AutoFit .

C#Copiar

// Casting is required in Visual C# 2008.


((Excel.Range)excelApp.Columns[1]).AutoFit();

// Casting is not required in Visual C# 2010.


excelApp.Columns[1].AutoFit();

Para obtener más información sobre cómo insertar tipos de interoperabilidad,


consulte los procedimientos “Para buscar la referencia a un PIA” y “Para
restaurar la dependencia de un PIA” más adelante en este tema. Para obtener
más información sobre dynamic , vea dynamic o Uso de tipo dinámico.
Para invocar DisplayInExcel

1. Agregue el código siguiente al final del método ThisAddIn_StartUp . La


llamada a DisplayInExcel contiene dos argumentos. El primer argumento es
el nombre de la lista de cuentas que se va a procesar.El segundo argumento
es una expresión lambda de varias líneas que define cómo se procesarán los
datos. Los valores ID y balance de cada cuenta se muestran en las celdas
adyacentes y la fila se muestra en rojo si el saldo es inferior a cero. Para
obtener más información, vea Expresiones lambda.

C#Copiar

DisplayInExcel(bankAccounts, (account, cell) =>


// This multiline lambda expression sets custom processing rules
// for the bankAccounts.
{
cell.Value = account.ID;
cell.Offset[0, 1].Value = account.Balance;
if (account.Balance < 0)
{
cell.Interior.Color = 255;
cell.Offset[0, 1].Interior.Color = 255;
}
});

2. Presione F5 para ejecutar el programa. Aparece una hoja de cálculo de Excel


que contiene los datos de las cuentas.
Para agregar un documento de Word

1. Agregue el código siguiente al final del método ThisAddIn_StartUp para


crear un documento de Word que contenga un vínculo al libro de Excel.

C#Copiar

var wordApp = new Word.Application();


wordApp.Visible = true;
wordApp.Documents.Add();
wordApp.Selection.PasteSpecial(Link: true, DisplayAsIcon: true);

Este código muestra algunas de las nuevas características de C#: capacidad


para omitir la palabra clave ref en programación COM, argumentos con
nombre y argumentos opcionales. Estas características ya existen en Visual
Basic. El método PasteSpecial tiene siete parámetros, y todos se definen como
parámetros de referencia opcionales. Los argumentos opcionales y con
nombre permiten designar los parámetros a los que se quiere tener acceso
por nombre, y enviar argumentos únicamente a esos parámetros. En este
ejemplo se envían argumentos para indicar que se debe crear un vínculo al
libro en el Portapapeles (parámetro Link ), y que el vínculo se mostrará en el
documento de Word como un icono (parámetro DisplayAsIcon ). Visual C#
también le permite omitir la palabra clave ref para estos argumentos.
Para ejecutar la aplicación

1. Presione F5 para ejecutar la aplicación. Excel se abre y muestra una tabla que
contiene la información de las dos cuentas de bankAccounts . Entonces
aparece un documento de Word que contiene un vínculo a la tabla de Excel.

Para limpiar el proyecto completado

1. En Visual Studio, haga clic en Limpiar solución en el menú Compilación. De


lo contrario, el complemento se ejecutará cada vez que abra Excel en el
equipo.

Para buscar la referencia a un PIA

1. Ejecute de nuevo la aplicación, pero no haga clic en Limpiar solución.


2. Seleccione Iniciar. Busque Microsoft Visual Studio <versión> y abra un
símbolo del sistema del desarrollador.
3. Escriba ildasm en la ventana del símbolo del sistema de Visual Studio y,
después, presione ENTRAR.Aparecerá la ventana IL DASM.
4. En el menú Archivo de la ventana de IL DASM,
seleccione Archivo > Abrir. Haga doble clic en Visual Studio <versión> y,
después, haga doble clic en Proyectos. Abra la carpeta de su proyecto y, en la
carpeta bin/Debug, busque su_proyecto.dll. Haga doble clic
en su_proyecto.dll. Una nueva ventana muestra los atributos del proyecto,
además de las referencias a otros módulos y ensamblados. Tenga en cuenta
que los espacios de
nombres Microsoft.Office.Interop.Excel y Microsoft.Office.Interop.W
ord se incluyen en el ensamblado. De manera predeterminada en Visual
Studio, el compilador importa los tipos necesarios desde un PIA con
referencia a su ensamblado.

Para obtener más información, vea Cómo: Ver el contenido de un


ensamblado.

5. Haga doble clic en el icono MANIFIESTO. Aparecerá una ventana con una
lista de ensamblados que contienen los elementos a los que hace referencia
el
proyecto. Microsoft.Office.Interop.Excel y Microsoft.Office.Interop.W
ord no están incluidos en la lista. Dado que los tipos que su proyecto
necesita se han importado en el ensamblado, las referencias a un PIA no son
necesarias. Esto facilita la implementación. Los PIA no tienen que estar
presentes en el equipo del usuario y, puesto que una aplicación no requiere la
implementación de una versión concreta de un PIA, se pueden diseñar
aplicaciones que trabajen con varias versiones de Office, siempre que las API
necesarias existan en todas las versiones.

Dado que la implementación de los PIA ya no es necesaria, puede crear una


aplicación en escenarios avanzados que funcione con varias versiones de
Office, incluidas versiones anteriores. Sin embargo, esto solo funciona si el
código no utiliza ninguna API que no esté disponible en la versión de Office
con la que está trabajando. No siempre está claro si una API concreta estaba
disponible en una versión anterior y por ese motivo no recomendamos
trabajar con versiones anteriores de Office.
Nota
Office no publicó ensamblados PIA antes de Office 2003. Por lo tanto, la única
manera de generar un ensamblado de interoperabilidad para Office 2002 o
versiones anteriores es mediante la importación de la referencia COM.

6. Cierre la ventana del manifiesto y la del ensamblado.


Para restaurar la dependencia de un PIA

1. En el Explorador de soluciones, haga clic en el botón Mostrar todos los


archivos. Expanda la carpeta Referencias y
seleccione Microsoft.Office.Interop.Excel. Pulse F4 para abrir la
ventana Propiedades.
2. En la ventana Propiedades, cambie la propiedad Incrustar tipos de
interoperabilidad de True a False.
3. Repita los pasos 1 y 2 de este procedimiento
para Microsoft.Office.Interop.Word .
4. En C#, marque como comentario las dos llamadas a Autofit al final del
método DisplayInExcel .
5. Presione F5 para comprobar que el proyecto sigue ejecutándose
correctamente.
6. Repita los pasos 1 a 3 del procedimiento anterior para abrir la ventana de
ensamblado. Observe
que Microsoft.Office.Interop.Word y Microsoft.Office.Interop.Excel y
a no están en la lista de ensamblados insertados.
7. Haga doble clic en el icono MANIFIESTO y desplácese por la lista de
ensamblados de
referencia. Tanto Microsoft.Office.Interop.Word como Microsoft.Office
.Interop.Excel están en la lista. Dado que la aplicación hace referencia a los
PIA de Excel y Word y la propiedad Incrustar tipos de interoperabilidadse
establece en False, ambos ensamblados deben existir en el equipo del
usuario final.
8. En Visual Studio, haga clic en Limpiar solución en el menú Compilación para
limpiar el proyecto completado.
Vea también
Propiedades implementadas automáticamente (Visual Basic)
Propiedades autoimplementadas (C#)
Inicializadores de colección
Inicializadores de objeto y colección
Parámetros opcionales
Paso de argumentos por posición o por nombre
Argumentos opcionales y con nombre
Enlace en tiempo de compilación y en tiempo de ejecución
dynamic
Uso de tipo dinámico
Expresiones lambda (Visual Basic)
Expresiones lambda (C#)
Cómo: Utilizar propiedades indizadas en la programación de interoperabilidad
COM
Tutorial: Incrustación de información de tipos de los ensamblados de Microsoft
Office
Tutorial: Incrustación de los tipos de los ensamblados administrados
Tutorial: Creación del primer complemento VSTO para Excel
Interoperabilidad COM
Interoperabilidad

S-ar putea să vă placă și