Sie sind auf Seite 1von 10

Tutorial: Programacin de

Office (C# y Visual Basic)


Visual Studio 2013
Otras versiones

Personas que lo han encontrado til: 2 de 2 - Valorar este tema


Visual Studio 2010 incluye nuevas caractersticas de C# y Visual Basic que mejoran la
programacin de Microsoft Office. Cada lenguaje ha agregado caractersticas que ya
existen en el otro lenguaje.
Entre las nuevas caractersticas de C# se encuentran los argumentos opcionales y con
nombre, los valores devueltos que tienen el tipo dynamic, y, en la programacin COM,
la capacidad para omitir la palabra clave ref y obtener acceso a las propiedades
indizadas. Entre las nuevas caractersticas de Visual Basic se encuentran las
propiedades implementadas automticamente, las instrucciones en expresiones
lambda y los inicializadores de coleccin.
Ambos lenguajes habilitan la incrustacin de la informacin de tipos, lo que permite la
implementacin de ensamblados que interactan con componentes COM sin tener que
implementar los ensamblados de interoperabilidad primarios (PIA) en el equipo del
usuario. Para obtener ms informacin, vea Tutorial: Incrustar los tipos de los
ensamblados administrados (C# y Visual Basic).
En este tutorial, se muestran las nuevas caractersticas en el contexto de la
programacin de Office, si bien un gran nmero de ellas tambin resultan tiles en la
programacin en general. En el tutorial, usar primero un complemento de Excel para
crear un libro de Excel. A continuacin, crear un documento de Word con un vnculo al
libro. Por ltimo, ver cmo se puede activar y desactivar la dependencia de un PIA.

Requisitos previos
Para completar este tutorial debe tener Microsoft Office Excel 2010 o 2007 y Microsoft
Office Word 2010 o 2007 instalados en el equipo.
Si utiliza un sistema operativo anterior a Windows Vista, asegrese de que .NET
Framework 2.0 est instalado.

Nota

Es posible que su equipo muestre nombres o ubicaciones diferentes para algunos de los elementos de la inte
siguientes instrucciones. La edicin de Visual Studio que se tenga y la configuracin que se utilice determin
informacin, vea Valores de configuracin de Visual Studio.

Para instalar una aplicacin complementaria de Excel


1. Inicie Visual Studio.

2. En el men Archivo, elija Nuevo y haga clic en Proyecto.


3. En el panel Plantillas instaladas, expanda Visual Basic o Visual C#,
expanda Office y, a continuacin, haga clic en 2010 (o 2007 si usa Office
2007).
4. En el panel Plantillas, haga clic en Complemento de Excel
2010 (o Complemento de Excel 2007).
5. Compruebe la parte superior del panel Plantillas para asegurarse de que .NET
Framework 4 aparece en el cuadro Versin de .NET Framework de
destino.
6. En el cuadro Nombre, escriba un nombre para el proyecto si desea asignarle
uno.
7. Haga clic en Aceptar.
8. El nuevo proyecto aparecer en el Explorador de soluciones.

Para agregar referencias


1. En el Explorador de soluciones, haga clic con el botn secundario del mouse
en el nombre del proyecto y, a continuacin, haga clic en Agregar
referencia. Aparecer el cuadro de dilogo Agregar referencia.
2. En la pestaa .NET, seleccione Microsoft.Office.Interop.Excel, versin
14.0.0.0 (o versin 12.0.0.0 para Excel 2007), en la lista Nombre de
componente y, a continuacin, mantenga presionada la tecla CTRL y
seleccione Microsoft.Office.Interop.Word, versin 14.0.0.0 (o versin
12.0.0.0 para Word 2007).
3. Haga clic en Aceptar.

Para agregar las instrucciones Imports o las directivas using


necesarias

1. En el Explorador de soluciones, haga clic con el botn secundario del mouse


en el archivo ThisAddIn.vb o ThisAddIn.cs y, a continuacin, haga clic en Ver
cdigo.
2. Agregue las siguientes instrucciones Imports (Visual Basic) o
directivas using (C#) al principio del archivo de cdigo si an no figuran en
dicho archivo.
C#
VB

Imports Microsoft.Office.Interop

Para crear una lista de cuentas bancarias


1. En el Explorador de soluciones, haga clic con el botn secundario en el
nombre del proyecto, haga clic en Agregar y, a continuacin, haga clic
en Clase. Asigne a la clase el nombre Account.vb si usa Visual Basic o
Account.cs si usa C#. Haga clic en Agregar.
2. Reemplace la definicin de la clase Account con el cdigo siguiente. Las
definiciones de clase utilizan propiedades implementadas automticamente,

una nueva caracterstica de Visual Basic en Visual Studio 2010. Para obtener
ms informacin, vea Propiedades implementadas automticamente (Visual
Basic).
C#
VB

Public Class Account


Property ID As Integer = -1
Property Balance As Double
End Class

3. Para crear una lista de bankAccounts que contiene dos cuentas, agregue el
siguiente cdigo al mtodo ThisAddIn_Startup en ThisAddIn.vb o
ThisAddIn.cs. Las declaraciones de las listas utilizan inicializadores de coleccin,
una caracterstica nueva de Visual Basic en Visual Studio 2010. Para obtener
ms informacin, veaInicializadores de coleccin (Visual Basic).
C#
VB

Dim bankAccounts As New List(Of Account) From {


New Account With {
.ID = 345,
.Balance = 541.27
},
New Account With {
.ID = 123,
.Balance = -127.44
}
}

Para exportar datos a Excel


1. En el mismo archivo, agregue el siguiente mtodo a la clase ThisAddIn. El
mtodo configura un libro de Excel y exporta los datos a dicho libro.
C#
VB

Sub DisplayInExcel(ByVal accounts As IEnumerable(Of Account),


ByVal DisplayAction As Action(Of Account,
Excel.Range))
With Me.Application
' Add a new Excel workbook.
.Workbooks.Add()
.Visible = True
.Range("A1").Value = "ID"
.Range("B1").Value = "Balance"
.Range("A2").Select()
For Each ac In accounts
DisplayAction(ac, .ActiveCell)
.ActiveCell.Offset(1, 0).Select()
Next
' Copy the results to the Clipboard.
.Range("A1:B3").Copy()
End With
End Sub

En este mtodo, se usan dos caractersticas nuevas de C#. Ambas


caractersticas ya existen en Visual Basic.
o El mtodo Add tiene un parmetro opcional para especificar una plantilla
concreta. Los parmetros opcionales, nuevos en Visual C# 2010,
permiten omitir el argumento del parmetro si se desea utilizar su valor
predeterminado. Dado que no se enva ningn argumento en el ejemplo
anterior, Add utiliza la plantilla predeterminada y crea un nuevo libro. La
instruccin equivalente en versiones anteriores de C# requiere un
argumento de marcador de
posicin:excelApp.Workbooks.Add(Type.Missing) .
Para obtener ms informacin, vea Argumentos opcionales y con nombre
(Gua de programacin de C#).
o Las propiedades Range y Offset del objeto Range usan la caracterstica
de propiedades indizadas. Esta caracterstica permite utilizar estas
propiedades de los tipos COM con la siguiente sintaxis tpica de C#. Las
propiedades indizadas tambin permiten utilizar la propiedad Value del
objeto Range, por lo que no es necesario usar la propiedad Value2. La
propiedad Value est indizada, pero el ndice es opcional. En el siguiente
ejemplo, los argumentos opcionales y las propiedades indizadas
funcionan conjuntamente.
C#

// 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#

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

El usuario no puede crear propiedades indizadas. La caracterstica solo


admite el uso de propiedades indizadas existentes.
Para obtener ms informacin, vea Cmo: Utilizar propiedades indizadas
en la programacin de interoperabilidad COM (Gua de programacin de
C#).
2. Agregue el siguiente cdigo al final de DisplayInExcel para ajustar el ancho
de las columnas al contenido.
C#
VB

' Add the following two lines at the end of the With statement.
.Columns(1).AutoFit()
.Columns(2).AutoFit()

Estas adiciones muestran otra caracterstica nueva de C# 2010: los valores


de Object devueltos por los hosts COM, como Office, se tratan como si tuvieran
el tipodynamic. Esto sucede automticamente cuando la opcin Incrustar
tipos de interoperabilidad est establecida en su valor predeterminado
(True) o, lo que es lo mismo, cuando se hace referencia al ensamblado
mediante la opcin del compilador /link. El tipo dynamic permite el enlace en
tiempo de ejecucin, que ya est disponible en Visual Basic, y evita la
conversin explcita que se requiere en Visual C# 2008 y las versiones
anteriores del lenguaje.

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


mtodo Intervalo de Excel. Sin dynamic, es preciso convertir el objeto devuelto
porexcelApp.Columns[1] en una instancia de Range antes de llamar al
mtodo AutoFit.
C#

// 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 ms informacin sobre cmo incrustar los tipos de


interoperabilidad, vea los procedimientos "Para buscar la referencia a un PIA" y
"Restaurar la dependencia de un PIA" ms adelante en este tema. Para obtener
ms informacin sobre dynamic, vea dynamic (Referencia de C#) o Uso de tipo
dinmico (Gua de programacin de C#).

Para invocar DisplayInExcel

1. Agregue el siguiente cdigo al final del mtodo 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 expresin lambda de varias lneas que define cmo se van a procesar los
datos. Los valores debalance e ID de cada cuenta se muestran en celdas
adyacentes y la fila aparece en color rojo si el saldo es menor que cero. Las
expresiones lambda de varias lneas son una caracterstica nueva de Visual
Basic 2010. Para obtener ms informacin, vea Lambda (expresiones) (Visual
Basic).
C#
VB

DisplayInExcel(bankAccounts,
Sub(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 Then
cell.Interior.Color = RGB(255, 0, 0)
cell.Offset(0, 1).Interior.Color = RGB(255, 0, 0)
End If

End Sub)

2. Para ejecutar el programa, presione F5. Aparece una hoja de clculo de Excel
que contiene los datos de las cuentas.

Para agregar un documento de Word

Agregue el siguiente cdigo al final del mtodo ThisAddIn_StartUp para crear


un documento de Word que contiene un vnculo al libro de Excel.
C#
VB

Dim wordApp As New Word.Application


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

En este cdigo, se muestran algunas de las nuevas caractersticas de C#: la


capacidad para omitir la palabra clave ref en la programacin COM, los
argumentos con nombre y los argumentos opcionales. Estas caractersticas ya
existen en Visual Basic. PasteSpecial El mtodo tiene siete parmetros, que se
definen como parmetros de referencia opcional. Antes de Visual C# 2010,
haba que definir variables de objeto para utilizarlas como argumentos de los
siete parmetros, incluso cuando no se tena ningn valor significativo para
enviar. Los parmetros opcionales y con nombre permiten designar por su
nombre los parmetros a los que se desea obtener acceso y enviar argumentos
nicamente a esos parmetros. En este ejemplo, se envan argumentos para
indicar que debe crearse un vnculo al libro en el Portapapeles (parmetro Link)
y que dicho vnculo debe mostrarse como un icono en el documento de Word
(parmetro DisplayAsIcon). Visual C# 2010 tambin permite omitir la palabra
clave ref para estos argumentos. Compare el siguiente segmento de cdigo de
Visual C# 2008 con la nica lnea que se requiere en Visual C# 2010:
C#

// Call to PasteSpecial in Visual C# 2008.


object iconIndex = Type.Missing;
object link = true;
object placement = Type.Missing;
object displayAsIcon = true;
object dataType = Type.Missing;
object iconFileName = Type.Missing;
object iconLabel = Type.Missing;

wordApp.Selection.PasteSpecial(ref
ref
ref
ref
ref
ref
ref

iconIndex,
link,
placement,
displayAsIcon,
dataType,
iconFileName,
iconLabel);

// Call to PasteSpecial in Visual C# 2010.


wordApp.Selection.PasteSpecial(Link: true, DisplayAsIcon: true);

Para ejecutar la aplicacin

Presione F5 para ejecutar la aplicacin. Se abre Excel y se muestra una tabla


que contiene la informacin de las dos cuentas de bankAccounts. A
continuacin, aparece un documento de Word que contiene un vnculo a la tabla
de Excel.

Para limpiar el proyecto completado

En Visual Studio, en el men Compilar, haga clic en Limpiar solucin. De lo


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

Para buscar la referencia a un PIA


1. Ejecute la aplicacin de nuevo, pero no haga clic en Limpiar solucin.
2. En el men Inicio, haga clic en Todos los programas. A continuacin, haga
clic en Microsoft Visual Studio 2010, en Visual Studio Tools y, despus,
en Smbolo del sistema de Visual Studio (2010).
3. Escriba ildasm en la ventana Smbolo del sistema de Visual Studio (2010) y, a
continuacin, presione ENTRAR. Aparecer la ventana IL DASM.
4. En el men Archivo de la ventana IL DASM, haga clic en Abrir. Haga doble clic
en Visual Studio 2010 y, a continuacin, haga doble clic en Proyectos. Abra
la carpeta del proyecto y busque nombre del proyecto.dll en la carpeta
bin/Debug. Haga doble clic en nombre del proyecto.dll. Aparecer una nueva
ventana con los atributos del proyecto, adems de referencias a otros mdulos
y ensamblados. Observe que los espacios de
nombres Microsoft.Office.Interop.Excel yMicrosoft.Office.Interop.Word e
stn incluidos en el ensamblado. De forma predeterminada, en Visual Studio
2010, el compilador importa en el ensamblado los tipos requeridos de un PIA al
que se hace referencia.
Para obtener ms informacin, vea Cmo: Ver el contenido de un ensamblado.
5. Haga doble clic en el icono MANIFIESTO. Aparecer una ventana con una lista
de los ensamblados que contienen los elementos a los que hace referencia el
proyecto.La lista no
incluye Microsoft.Office.Interop.Excel ni Microsoft.Office.Interop.Word. D
ado que los tipos requeridos por el proyecto se han importado en el
ensamblado, no se necesita ninguna referencia a un PIA. Esto facilita la
implementacin. Los PIA no tienen que estar presentes en el equipo del usuario
y, dado que las aplicaciones no requieren la implementacin de una versin
concreta de un PIA, se pueden disear de modo que funcionen con varias

versiones de Office, siempre y cuando existan las API necesarias en todas las
versiones.
Dado que ya no es necesaria la implementacin de los PIA, se puede crear una
aplicacin en escenarios avanzados que funcione con varias versiones de Office,
incluidas versiones anteriores. No obstante, esto funciona nicamente si el
cdigo no utiliza ninguna API que no est disponible en la versin de Office que
se est usando. No siempre queda claro si una API concreta est disponible en
una versin anterior, por lo que no se recomienda usar versiones anteriores de
Office.

Nota

Office no publicaba ensamblados PIA antes de Office 2003. Por consiguiente, la nica manera de ge
Office 2002 o versiones anteriores consiste en importar la referencia COM.
6. Cierre la ventana del manifiesto y la ventana de ensamblados.

Para restaurar la dependencia de un PIA


1. En el Explorador de soluciones, haga clic en el botn Mostrar todos los
archivos. Expanda la carpeta Referencias y
seleccione Microsoft.Office.Interop.Excel.Presione F4 para que se muestre la
ventana Propiedades.
2. En la ventana Propiedades, cambie el valor de 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#, convierta en comentario las dos llamadas a Autofit al final del
mtodo DisplayInExcel.
5. Presione F5 para comprobar que el proyecto sigue ejecutndose correctamente.
6. Repita los pasos del 1 al 3 del procedimiento anterior para abrir la ventana de
ensamblados. Observe
que Microsoft.Office.Interop.Word yMicrosoft.Office.Interop.Excel ya no
figuran en la lista de ensamblados incrustados.
7. Haga doble clic en el icono MANIFIESTO y desplcese por la lista de
ensamblados a los que se hace referencia. La lista
incluye Microsoft.Office.Interop.Word yMicrosoft.Office.Interop.Excel. Da
do que la aplicacin hace referencia a los PIA Excel y Word y dado que el valor
de la propiedad Incrustar tipos de operabilidad esFalse, es preciso que
ambos ensamblados existan en el equipo del usuario final.
8. En Visual Studio, haga clic en Limpiar solucin en el men Compilacin para
limpiar el proyecto completado.

Vea tambin
Tareas
Cmo: Utilizar propiedades indizadas en la programacin de interoperabilidad COM
(Gua de programacin de C#)
Tutorial: Incrustar informacin de tipos de los ensamblados de Microsoft Office (C# y
Visual Basic)
Tutorial: Incrustar los tipos de los ensamblados administrados (C# y Visual Basic)

Tutorial: Crear el primer complemento en el nivel de la aplicacin para Excel

Referencia
Propiedades autoimplementadas (Gua de programacin de C#)
Inicializadores de objeto y de coleccin (Gua de programacin de C#)
dynamic (Referencia de C#)
Expresiones lambda (Gua de programacin de C#)
Interoperabilidad (Gua de programacin de C#)

Conceptos
Propiedades implementadas automticamente (Visual Basic)
Inicializadores de coleccin (Visual Basic)
Parmetros opcionales (Visual Basic)
Pasar argumentos por posicin o por nombre (Visual Basic)
Argumentos opcionales y con nombre (Gua de programacin de C#)
Enlace en tiempo de compilacin y en tiempo de ejecucin (Visual Basic)
Lambda (expresiones) (Visual Basic)

Otros recursos
Uso de tipo dinmico (Gua de programacin de C#)
Interoperabilidad COM (Visual Basic)