Tutorial: Programación de Office (C# y Visual Basic)Walkthrough: Office Programming (C# and Visual Basic)

Visual Studio presenta características en C# y Visual Basic que mejoran la programación de Microsoft Office.Visual Studio offers features in C# and Visual Basic that improve Microsoft Office programming. Las características útiles de C# incluyen argumentos opcionales y con nombre, y devuelven valores de tipo dynamic.Helpful C# features include named and optional arguments and return values of type dynamic. En la programación COM, puede omitir la palabra clave ref y obtener acceso a las propiedades indexadas.In COM programming, you can omit the ref keyword and gain access to indexed properties. Las nuevas características de Visual Basic incluyen propiedades implementadas automáticamente, instrucciones de expresiones lambda e inicializadores de colección.Features in Visual Basic include auto-implemented properties, statements in lambda expressions, and collection initializers.

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.Both languages enable embedding of type information, which allows deployment of assemblies that interact with COM components without deploying primary interop assemblies (PIAs) to the user's computer. Para obtener más información, vea Tutorial: Insertar los tipos de los ensamblados administrados.For more information, see Walkthrough: Embedding Types from Managed Assemblies.

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.This walkthrough demonstrates these features in the context of Office programming, but many of these features are also useful in general programming. En el tutorial, usa una aplicación complemento de Excel para crear un libro de Excel.In the walkthrough, you use an Excel Add-in application to create an Excel workbook. Después, crea un documento de Word que contiene un vínculo al libro.Next, you create a Word document that contains a link to the workbook. Por último, ve cómo habilitar y deshabilitar la dependencia de un PIA.Finally, you see how to enable and disable the PIA dependency.

Requisitos previosPrerequisites

Debe tener Microsoft Office Excel y Microsoft Office Word instalados en su equipo para completar este tutorial.You must have Microsoft Office Excel and Microsoft Office Word installed on your computer to complete this walkthrough.

Nota

Es posible que el equipo muestre nombres o ubicaciones diferentes para algunos de los elementos de la interfaz de usuario de Visual Studio en las siguientes instrucciones.Your computer might show different names or locations for some of the Visual Studio user interface elements in the following instructions. La edición de Visual Studio que se tenga y la configuración que se utilice determinan estos elementos.The Visual Studio edition that you have and the settings that you use determine these elements. Para obtener más información, vea Personalizar el IDE.For more information, see Personalizing the IDE.

Para configurar una aplicación complemento de ExcelTo set up an Excel Add-in application

  1. Inicie Visual Studio.Start Visual Studio.

  2. En el menú Archivo , elija Nuevoy haga clic en Proyecto.On the File menu, point to New, and then click Project.

  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.In the Installed Templates pane, expand Visual Basic or Visual C#, expand Office, and then click the version year of the Office product.

  4. En el panel Plantillas, haga clic en Excel <version> Complemento.In the Templates pane, click Excel <version> Add-in.

  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.Look at the top of the Templates pane to make sure that .NET Framework 4, or a later version, appears in the Target Framework box.

  6. Si quiere, escriba un nombre para el proyecto en el cuadro Nombre.Type a name for your project in the Name box, if you want to.

  7. Haga clic en Aceptar.Click OK.

  8. El proyecto nuevo aparece en el Explorador de soluciones.The new project appears in Solution Explorer.

Para agregar referenciasTo add references

  1. En el Explorador de soluciones, haga clic con el botón derecho en el nombre del proyecto y seleccione Agregar referencia.In Solution Explorer, right-click your project's name and then click Add Reference. Aparecerá el cuadro de diálogo Agregar referencia.The Add Reference dialog box appears.

  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.On the Assemblies tab, select Microsoft.Office.Interop.Excel, version <version>.0.0.0 (for a key to the Office product version numbers, see Microsoft Versions), in the Component Name list, and then hold down the CTRL key and select 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: Instalación de ensamblados de interoperabilidad primarios de Office).If you do not see the assemblies, you may need to ensure they are installed and displayed (see How to: Install Office Primary Interop Assemblies).

  3. Haga clic en Aceptar.Click OK.

Para agregar las instrucciones Imports necesarias o las directivas usingTo add necessary Imports statements or using directives

  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.In Solution Explorer, right-click the ThisAddIn.vb or ThisAddIn.cs file and then click View Code.

  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.Add the following Imports statements (Visual Basic) or using directives (C#) to the top of the code file if they are not already present.

    using System.Collections.Generic;
    using Excel = Microsoft.Office.Interop.Excel;
    using Word = Microsoft.Office.Interop.Word;
    
    Imports Microsoft.Office.Interop
    

Para crear una lista de las cuentas bancariasTo create a list of bank accounts

  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.In Solution Explorer, right-click your project's name, click Add, and then click Class. Denomine la clase Account.vb si está utilizando Visual Basic o Account.cs si está utilizando C#.Name the class Account.vb if you are using Visual Basic or Account.cs if you are using C#. Haga clic en Agregar.Click Add.

  2. Reemplace la definición de la clase Account por el código siguiente.Replace the definition of the Account class with the following code. Las definiciones de clase usan propiedades implementadas automáticamente.The class definitions use auto-implemented properties. Para obtener más información, vea Propiedades implementadas automáticamente.For more information, see Auto-Implemented Properties.

    class Account
    {
        public int ID { get; set; }
        public double Balance { get; set; }
    }
    
    Public Class Account
        Property ID As Integer = -1
        Property Balance As Double
    End Class
    
  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.To create a bankAccounts list that contains two accounts, add the following code to the ThisAddIn_Startup method in ThisAddIn.vb or ThisAddIn.cs. Las declaraciones de lista usan inicializadores de colección.The list declarations use collection initializers. Para obtener más información, vea Inicializadores de colección.For more information, see Collection Initializers.

    var bankAccounts = new List<Account>
    {
        new Account
        {
            ID = 345,
            Balance = 541.27
        },
        new Account
        {
            ID = 123,
            Balance = -127.44
        }
    };
    
    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 ExcelTo export data to Excel

  1. En el mismo archivo, agregue el siguiente método a la clase ThisAddIn.In the same file, add the following method to the ThisAddIn class. El método configura un libro de Excel, a donde exporta los datos.The method sets up an Excel workbook and exports data to it.

    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();
    }
    
    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 método se utilizan dos características de C# nuevas.Two new C# features are used in this method. Ambas características ya existen en Visual Basic.Both of these features already exist in Visual Basic.

    • El método Add tiene un parámetro opcional para especificar una plantilla determinada.Method Add has an optional parameter for specifying a particular template. 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.Optional parameters, new in C# 4, enable you to omit the argument for that parameter if you want to use the parameter's default value. Dado que en el ejemplo anterior no se envía ningún argumento, Add usa la plantilla predeterminada y crea un libro nuevo.Because no argument is sent in the previous example, Add uses the default template and creates a new workbook. La instrucción equivalente en versiones anteriores de C# requiere un argumento de marcador de posición: excelApp.Workbooks.Add(Type.Missing).The equivalent statement in earlier versions of C# requires a placeholder argument: excelApp.Workbooks.Add(Type.Missing).

      Para obtener más información, vea Argumentos opcionales y con nombre.For more information, see Named and Optional Arguments.

    • Las propiedades Range y Offset del objeto Range usan la característica de propiedades indizadas.The Range and Offset properties of the Range object use the indexed properties feature. Esta característica permite utilizar estas propiedades de los tipos COM mediante la siguiente sintaxis típica de C#.This feature enables you to consume these properties from COM types by using the following typical C# syntax. Las propiedades indizadas también permiten utilizar la propiedad Value del objeto Range, eliminando la necesidad de utilizar la propiedad Value2.Indexed properties also enable you to use the Value property of the Range object, eliminating the need to use the Value2 property. La propiedad Value está indizada, pero el índice es opcional.The Value property is indexed, but the index is optional. Los argumentos opcionales y las propiedades indizadas funcionan conjuntamente en el ejemplo siguiente.Optional arguments and indexed properties work together in the following example.

      // 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.In earlier versions of the language, the following special syntax is required.

      // 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.You cannot create indexed properties of your own. La característica solo admite el uso de las propiedades indizadas existentes.The feature only supports consumption of existing indexed properties.

      Para más información, consulte Procedimiento para usar propiedades indizadas en la programación de interoperabilidad COM.For more information, see How to use indexed properties in COM interop programming.

  2. Agregue el código siguiente al final de DisplayInExcel para ajustar los anchos de columna a fin de adaptarlos al contenido.Add the following code at the end of DisplayInExcel to adjust the column widths to fit the content.

    excelApp.Columns[1].AutoFit();
    excelApp.Columns[2].AutoFit();
    
    ' Add the following two lines at the end of the With statement.
    .Columns(1).AutoFit()
    .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.These additions demonstrate another feature in C#: treating Object values returned from COM hosts such as Office as if they have type 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.This happens automatically when Embed Interop Types is set to its default value, True, or, equivalently, when the assembly is referenced by the -link compiler option. 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 C# 3.0 y versiones anteriores del lenguaje.Type dynamic allows late binding, already available in Visual Basic, and avoids the explicit casting required in C# 3.0 and earlier versions of the language.

    Por ejemplo, excelApp.Columns[1] devuelve Object y AutoFit es un método Range de Excel.For example, excelApp.Columns[1] returns an Object, and AutoFit is an Excel Range method. Sin dynamic, debe convertir el objeto devuelto por excelApp.Columns[1] como una instancia de Range antes de llamar al método AutoFit.Without dynamic, you must cast the object returned by excelApp.Columns[1] as an instance of Range before calling method AutoFit.

    // 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.For more information about embedding interop types, see procedures "To find the PIA reference" and "To restore the PIA dependency" later in this topic. Para obtener más información sobre dynamic, vea dynamic o Uso de tipo dinámico.For more information about dynamic, see dynamic or Using Type dynamic.

Para invocar DisplayInExcelTo invoke DisplayInExcel

  1. Agregue el código siguiente al final del método ThisAddIn_StartUp.Add the following code at the end of the ThisAddIn_StartUp method. La llamada a DisplayInExcel contiene dos argumentos.The call to DisplayInExcel contains two arguments. El primer argumento es el nombre de la lista de cuentas que se va a procesar.The first argument is the name of the list of accounts to be processed. El segundo argumento es una expresión lambda de varias líneas que define cómo se procesarán los datos.The second argument is a multiline lambda expression that defines how the data is to be processed. 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.The ID and balance values for each account are displayed in adjacent cells, and the row is displayed in red if the balance is less than zero. Para obtener más información, vea Expresiones lambda.For more information, see Lambda Expressions.

    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;
        }
    });
    
    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. Presione F5 para ejecutar el programa.To run the program, press F5. Aparece una hoja de cálculo de Excel que contiene los datos de las cuentas.An Excel worksheet appears that contains the data from the accounts.

Para agregar un documento de WordTo add a Word document

  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.Add the following code at the end of the ThisAddIn_StartUp method to create a Word document that contains a link to the Excel workbook.

    var wordApp = new Word.Application();
    wordApp.Visible = true;
    wordApp.Documents.Add();
    wordApp.Selection.PasteSpecial(Link: true, DisplayAsIcon: true);
    
    Dim wordApp As 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.This code demonstrates several of the new features in C#: the ability to omit the ref keyword in COM programming, named arguments, and optional arguments. Estas características ya existen en Visual Basic.These features already exist in Visual Basic. El método PasteSpecial tiene siete parámetros, y todos se definen como parámetros de referencia opcionales.The PasteSpecial method has seven parameters, all of which are defined as optional reference parameters. 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.Named and optional arguments enable you to designate the parameters you want to access by name and to send arguments to only those parameters. 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).In this example, arguments are sent to indicate that a link to the workbook on the Clipboard should be created (parameter Link) and that the link is to be displayed in the Word document as an icon (parameter DisplayAsIcon). Visual C# también le permite omitir la palabra clave ref para estos argumentos.Visual C# also enables you to omit the ref keyword for these arguments.

Para ejecutar la aplicaciónTo run the application

  1. Presione F5 para ejecutar la aplicación.Press F5 to run the application. Excel se abre y muestra una tabla que contiene la información de las dos cuentas de bankAccounts.Excel starts and displays a table that contains the information from the two accounts in bankAccounts. Entonces aparece un documento de Word que contiene un vínculo a la tabla de Excel.Then a Word document appears that contains a link to the Excel table.

Para limpiar el proyecto completadoTo clean up the completed project

  1. En Visual Studio, haga clic en Limpiar solución en el menú Compilación.In Visual Studio, click Clean Solution on the Build menu. De lo contrario, el complemento se ejecutará cada vez que abra Excel en el equipo.Otherwise, the add-in will run every time that you open Excel on your computer.

Para buscar la referencia a un PIATo find the PIA reference

  1. Ejecute de nuevo la aplicación, pero no haga clic en Limpiar solución.Run the application again, but do not click Clean Solution.

  2. Seleccione Iniciar.Select the Start. Busque Microsoft Visual Studio <version> y abra un símbolo del sistema de desarrollador.Locate Microsoft Visual Studio <version> and open a developer command prompt.

  3. Escriba ildasm en la ventana Símbolo del sistema para desarrolladores de Visual Studio y, luego, presione ENTRAR.Type ildasm in the Developer Command Prompt for Visual Studio window, and then press ENTER. Aparecerá la ventana IL DASM.The IL DASM window appears.

  4. En el menú Archivo de la ventana de IL DASM, seleccione Archivo > Abrir.On the File menu in the IL DASM window, select File > Open. Haga doble clic en Visual Studio <version> y, de nuevo, en Proyectos.Double-click Visual Studio <version>, and then double-click Projects. Abra la carpeta de su proyecto y, en la carpeta bin/Debug, busque su_proyecto.dll.Open the folder for your project, and look in the bin/Debug folder for your project name.dll. Haga doble clic en su_proyecto.dll.Double-click your project name.dll. Una nueva ventana muestra los atributos del proyecto, además de las referencias a otros módulos y ensamblados.A new window displays your project's attributes, in addition to references to other modules and assemblies. Tenga en cuenta que los espacios de nombres Microsoft.Office.Interop.Excel y Microsoft.Office.Interop.Word se incluyen en el ensamblado.Note that namespaces Microsoft.Office.Interop.Excel and Microsoft.Office.Interop.Word are included in the assembly. De manera predeterminada en Visual Studio, el compilador importa los tipos necesarios desde un PIA con referencia a su ensamblado.By default in Visual Studio, the compiler imports the types you need from a referenced PIA into your assembly.

    Para obtener más información, vea Cómo: Consulta del contenido de un ensamblado.For more information, see How to: View Assembly Contents.

  5. Haga doble clic en el icono MANIFIESTO.Double-click the MANIFEST icon. Aparecerá una ventana con una lista de ensamblados que contienen los elementos a los que hace referencia el proyecto.A window appears that contains a list of assemblies that contain items referenced by the project. Microsoft.Office.Interop.Excel y Microsoft.Office.Interop.Word no están incluidos en la lista.Microsoft.Office.Interop.Excel and Microsoft.Office.Interop.Word are not included in the list. Dado que los tipos que su proyecto necesita se han importado en el ensamblado, las referencias a un PIA no son necesarias.Because the types your project needs have been imported into your assembly, references to a PIA are not required. Esto facilita la implementación.This makes deployment easier. 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.The PIAs do not have to be present on the user's computer, and because an application does not require deployment of a specific version of a PIA, applications can be designed to work with multiple versions of Office, provided that the necessary APIs exist in all versions.

    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.Because deployment of PIAs is no longer necessary, you can create an application in advanced scenarios that works with multiple versions of Office, including earlier versions. 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.However, this works only if your code does not use any APIs that are not available in the version of Office you are working with. 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.It is not always clear whether a particular API was available in an earlier version, and for that reason working with earlier versions of Office is not recommended.

    Nota

    Office no publicó ensamblados PIA antes de Office 2003.Office did not publish PIAs before 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.Therefore, the only way to generate an interop assembly for Office 2002 or earlier versions is by importing the COM reference.

  6. Cierre la ventana del manifiesto y la del ensamblado.Close the manifest window and the assembly window.

Para restaurar la dependencia de un PIATo restore the PIA dependency

  1. En el Explorador de soluciones, haga clic en el botón Mostrar todos los archivos.In Solution Explorer, click the Show All Files button. Expanda la carpeta Referencias y seleccione Microsoft.Office.Interop.Excel.Expand the References folder and select Microsoft.Office.Interop.Excel. Pulse F4 para abrir la ventana Propiedades.Press F4 to display the Properties window.

  2. En la ventana Propiedades, cambie la propiedad Incrustar tipos de interoperabilidad de True a False.In the Properties window, change the Embed Interop Types property from True to False.

  3. Repita los pasos 1 y 2 de este procedimiento para Microsoft.Office.Interop.Word.Repeat steps 1 and 2 in this procedure for Microsoft.Office.Interop.Word.

  4. En C#, marque como comentario las dos llamadas a Autofit al final del método DisplayInExcel.In C#, comment out the two calls to Autofit at the end of the DisplayInExcel method.

  5. Presione F5 para comprobar que el proyecto sigue ejecutándose correctamente.Press F5 to verify that the project still runs correctly.

  6. Repita los pasos 1 a 3 del procedimiento anterior para abrir la ventana de ensamblado.Repeat steps 1-3 from the previous procedure to open the assembly window. Observe que Microsoft.Office.Interop.Word y Microsoft.Office.Interop.Excel ya no están en la lista de ensamblados insertados.Notice that Microsoft.Office.Interop.Word and Microsoft.Office.Interop.Excel are no longer in the list of embedded assemblies.

  7. Haga doble clic en el icono MANIFIESTO y desplácese por la lista de ensamblados de referencia.Double-click the MANIFEST icon and scroll through the list of referenced assemblies. Tanto Microsoft.Office.Interop.Word como Microsoft.Office.Interop.Excel están en la lista.Both Microsoft.Office.Interop.Word and Microsoft.Office.Interop.Excel are in the list. Dado que la aplicación hace referencia a los PIA de Excel y Word y la propiedad Incrustar tipos de interoperabilidad se establece en False, ambos ensamblados deben existir en el equipo del usuario final.Because the application references the Excel and Word PIAs, and the Embed Interop Types property is set to False, both assemblies must exist on the end user's computer.

  8. En Visual Studio, haga clic en Limpiar solución en el menú Compilación para limpiar el proyecto completado.In Visual Studio, click Clean Solution on the Build menu to clean up the completed project.

Consulte tambiénSee also