Compartir a través de


Tutorial: Insertar datos en un libro de trabajo de un servidor

Actualización: noviembre 2007

Se aplica a

La información de este tema sólo se aplica a los proyectos de Visual Studio Tools para Office y versiones de Microsoft Office especificados.

Tipo de proyecto

  • Proyectos de nivel de documento

Versión de Microsoft Office

  • Excel 2007

  • Excel 2003

Para obtener más información, vea Características disponibles por aplicación y tipo de proyecto.

Este tutorial muestra cómo insertar datos en un conjunto de datos que está almacenado en memoria caché en un libro de Microsoft Office Excel sin iniciar Excel, mediante la clase ServerDocument. Este tutorial proporciona instrucciones paso a paso para utilizar el ejemplo de código que se proporciona en Cómo: Insertar datos en un libro ubicado en un servidor.

Este tutorial ilustra las tareas siguientes:

  • Definir un conjunto de datos que contenga datos de la base de datos AdventureWorksLT para Microsoft SQL Server 2005.

  • Crear instancias del conjunto de datos en un proyecto de libro de Excel y un proyecto de aplicación de consola.

  • Crear un objeto ListObject que se enlaza al conjunto de datos del libro.

  • Agregar el conjunto de datos del libro a la memoria caché de datos.

  • Insertar los datos en el conjunto de datos almacenado en memoria caché ejecutando el código en la aplicación de consola, sin iniciar Excel.

Si bien en este tutorial se supone que el código se ejecuta en un equipo de desarrollo, el código que se muestra en este tutorial puede utilizarse en un servidor que no tenga instalado Excel.

Nota:

Es posible que su 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 tenga y la configuración que esté usando determinan estos elementos. Para obtener más información, vea Valores de configuración de Visual Studio.

Requisitos previos

Necesita los componentes siguientes para completar este tutorial:

  • Visual Studio Tools para Office (componente opcional de Visual Studio 2008 Professional y Visual Studio Team System).

    Visual Studio Tools para Office se instala de forma predeterminada con las versiones mostradas de Visual Studio. Para comprobar si está instalado, consulte Instalar Visual Studio Tools para Office.

  • Excel 2007 o Excel 2003.

  • Acceso a una instancia en ejecución de SQL Server 2005 o SQL Server 2005 Express que tenga asociada la base de datos de ejemplo AdventureWorksLT. La base de datos AdventureWorksLT se puede descargar desde el sitio web de CodePlex. Para obtener más información sobre cómo asociar una base de datos, vea los siguientes temas:

Crear un proyecto de biblioteca de clases que defina un conjunto de datos

Para utilizar el mismo conjunto de datos en un libro de Excel y en una aplicación de consola, debe definirlo en un ensamblado independiente al que ambos proyectos hagan referencia. Para este tutorial, defina el conjunto de datos en un proyecto de biblioteca de clases.

Para crear el proyecto de bibliotecas de clase

  1. Inicie Visual Studio.

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

  3. En el panel Tipos de proyecto, expanda Visual C# o Visual Basic y, a continuación, haga clic en Windows.

  4. En el panel Plantillas, seleccione Biblioteca de clases.

  5. En el cuadro Nombre, escriba AdventureWorksDataSet.

  6. Haga clic en Examinar, vaya a la carpeta %UserProfile%\Mis documentos (para Windows XP y versiones anteriores) o la carpeta %UserProfile%\Documentos (para Windows Vista) y, a continuación, haga clic en Seleccionar carpeta.

  7. En el cuadro de diálogo Nuevo proyecto, asegúrese de que no esté activada la casilla Crear directorio para la solución.

  8. Haga clic en Aceptar.

    Visual Studio agrega el proyecto AdventureWorksDataSet al Explorador de soluciones y abre el archivo de código Class1.cs o Class1.vb.

  9. En el Explorador de soluciones, haga clic con el botón secundario en Class1.cs o Class1.vb y, a continuación, haga clic en Eliminar. No necesita este archivo para este tutorial.

Definir un conjunto de datos en el proyecto de biblioteca de clases

Defina un conjunto de datos con tipo que contenga datos de la base de datos AdventureWorksLT para SQL Server 2005. Más adelante en este tutorial, va a hacer referencia a esta base de datos en un proyecto de libro de Excel y un proyecto de aplicación de consola.

El conjunto de datos es un conjunto de datos con tipo que representa los datos de la tabla Product en la base de datos AdventureWorksLT. Para obtener más información sobre los conjuntos de datos con tipo, vea Información general sobre conjuntos de datos en Visual Studio.

Para definir un conjunto de datos con tipo en el proyecto de biblioteca de clases

  1. En el Explorador de soluciones, haga clic en el proyecto AdventureWorksDataSet.

  2. En el menú Datos, haga clic en Agregar nuevo elemento.

    Se abrirá el Asistente para la configuración de orígenes de datos.

  3. Haga clic en Base de datos y, a continuación, haga clic en Siguiente.

  4. Si ya existe una conexión con la base de datos AdventureWorksLT, elija esta conexión y, a continuación, haga clic en Siguiente.

    De lo contrario, haga clic en Nueva conexión y utilice el cuadro de diálogo Agregar conexión para crear la nueva conexión. Para obtener más información, vea Cómo: Crear conexiones a bases de datos de SQL Server.

  5. En la página Save the Connection String to the Application Configuration File, haga clic en Next.

  6. En la página Elija los objetos de base de datos, expanda Tablas y, a continuación, seleccione Product (SalesLT).

  7. Haga clic en Finalizar.

    Se agrega el archivo AdventureWorksLTDataSet.xsd al proyecto AdventureWorksDataSet. Este archivo define los siguientes elementos:

    • Un conjunto de datos con tipo denominado AdventureWorksLTDataSet. Este conjunto de datos representa el contenido de la tabla Product en la base de datos AdventureWorksLT.

    • Objeto TableAdapter denominado ProductTableAdapter. Este TableAdapter puede usarse para leer y escribir datos en AdventureWorksLTDataSet. Para obtener más información, vea Información general sobre TableAdapter.

    Estos dos objetos se utilizarán más adelante en este tutorial.

  8. En el Explorador de soluciones, haga clic con el botón secundario en AdventureWorksDataSet y, a continuación, haga clic en Generar.

    Compruebe si el proyecto se genera sin errores.

Crear un proyecto de libro de Excel

Cree un proyecto de libro de Excel para la interfaz a los datos. Más adelante en este tutorial, va a crear un control ListObject que muestre los datos y va a agregar una instancia del conjunto de datos a la memoria caché de datos del libro.

Para crear un proyecto de libro de Excel

  1. En el Explorador de soluciones, haga clic con el botón secundario en la solución AdventureWorksDataSet, elija Agregar y, a continuación, haga clic en Nuevo proyecto.

  2. En el panel Tipos de proyecto, expanda Visual C# o Visual Basic y, a continuación, expanda Office.

  3. Seleccione la carpeta 2007 si utiliza Excel 2007 en el equipo de desarrollo, o bien, seleccione la carpeta 2003 si utiliza Excel 2003.

  4. En el panel Plantillas, seleccione Libro de Excel.

  5. En el cuadro Nombre, escriba AdventureWorksReport. No modifique la ubicación.

  6. Haga clic en Aceptar.

    Se abre el Asistente para proyectos de Visual Studio Tools para Office.

  7. Asegúrese de que esté seleccionada la opción Crear un nuevo documento y, a continuación, haga clic en Aceptar

    Visual Studio abre el libro AdventureWorksReport en el diseñador y agrega el proyecto AdventureWorksReport al Explorador de soluciones.

Agregar el conjunto de datos a los orígenes de datos en el proyecto de libro de Excel

Para poder mostrar el conjunto de datos en el libro de Excel, es preciso agregarlo primero a los orígenes de datos en el proyecto de libro de Excel.

Para agregar el conjunto de datos a los orígenes de datos en el proyecto de libro de Excel

  1. En el Explorador de soluciones, haga doble clic en Sheet1.cs o Sheet1.vb debajo del proyecto AdventureWorksReport.

    El libro se abre en el diseñador.

  2. En el menú Datos, haga clic en Agregar nuevo elemento.

    Se abrirá el Asistente para la configuración de orígenes de datos.

  3. Haga clic en Objeto y, a continuación, haga clic en Siguiente.

  4. En la página Seleccione el objeto que desee enlazar a, haga clic en Agregar referencia.

  5. En la ficha Proyectos, haga clic en AdventureWorksDataSet y, a continuación, haga clic en Aceptar.

  6. Debajo del espacio de nombres AdventureWorksDataSet del ensamblado AdventureWorksDataSet, haga clic en AdventureWorksLTDataSet y, a continuación, haga clic en Finalizar.

    Se abre la ventana Orígenes de datos y se agrega AdventureWorksLTDataSet a la lista de orígenes de datos.

Crear un control ListObject enlazado a una instancia del conjunto de datos

Para mostrar el conjunto de datos en el libro, cree un control ListObject que esté enlazado a una instancia del conjunto de datos. Para obtener más información sobre cómo enlazar controles a datos, vea Enlazar datos a controles.

Para crear un control ListObject enlazado a una instancia del conjunto de datos

  1. En la ventana Orígenes de datos, expanda el nodo AdventureWorksLTDataSet debajo de AdventureWorksDataSet.

  2. Seleccione el nodo Producto, haga clic en la flecha desplegable que aparece y, a continuación, seleccione ListObject en la lista desplegable.

    Si no aparece la flecha desplegable, confirme que el libro está abierto en el diseñador.

  3. Arrastre la tabla Product hasta la celda A1.

    Se crea un control ListObject denominado productListObject en la hoja de cálculo, a partir de la celda A1. Al mismo tiempo, se agregan al proyecto un objeto de conjunto de datos denominado adventureWorksLTDataSet y una clase BindingSource denominada productBindingSource. El control ListObject se enlaza al componente BindingSource, que a su vez se enlaza al objeto de base de datos.

Agregar el conjunto de datos a la memoria caché de datos

Para permitir que código fuera del proyecto de libro de Excel obtenga acceso al conjunto de datos del libro, debe agregar el conjunto de datos a la memoria caché de datos. Para obtener más información sobre la memoria caché de datos, vea Modelo de datos en las personalizaciones de nivel de documento y Almacenar datos en caché.

Para agregar el conjunto de datos a la memoria caché de datos

  1. En el diseñador, haga clic en adventureWorksLTDataSet.

  2. En la ventana Propiedades, establezca la propiedad Modifiers en Public.

  3. Establezca la propiedad CacheInDocument en True.

Punto de control

Genere y ejecute el proyecto de libro de Excel para asegurarse de que se compile y se ejecute sin errores.

Para generar y ejecutar el proyecto

  1. En el Explorador de soluciones, haga clic con el botón secundario en el proyecto AdventureWorksReport, elija Depurar y, a continuación, haga clic en Iniciar nueva instancia.

    Se genera el proyecto y se abre el libro en Excel. El objeto ListObject de Sheet1 está vacío, porque el objeto adventureWorksLTDataSet de la caché de datos todavía no contiene datos. En la sección siguiente, utilizará una aplicación de consola para rellenar el objeto adventureWorksLTDataSet con datos.

  2. Cierre Excel. No guarde los cambios.

Crear un proyecto de aplicación de consola

Cree un proyecto de aplicación de consola que utilizará para insertar en el libro los datos contenidos en el conjunto de datos almacenado en memoria caché.

Para crear un proyecto de aplicación de consola

  1. En el Explorador de soluciones, haga clic con el botón secundario en la solución AdventureWorksDataSet, elija Agregar y, a continuación, haga clic en Nuevo proyecto.

  2. En el panel Tipos de proyecto, expanda Visual C# o Visual Basic y, a continuación, haga clic en Windows.

  3. En el panel Plantillas, seleccione Aplicación de consola.

  4. En el cuadro Nombre, escriba DataWriter. No modifique la ubicación.

  5. Haga clic en Aceptar.

    Visual Studio agrega el proyecto DataWriter al Explorador de soluciones y abre el archivo de código Program.cs o Module1.vb.

Agregar datos al conjunto de datos almacenado en memoria caché utilizando la aplicación de consola

Utilice la clase ServerDocument en la aplicación de consola para rellenar el conjunto de datos almacenado en memoria caché del libro con datos.

Para agregar datos al conjunto de datos almacenado en la memoria caché

  1. En el Explorador de soluciones, haga clic con el botón secundario en el proyecto DataWriter y, a continuación, haga clic en Agregar referencia.

  2. En la ficha .NET, seleccione uno de los siguientes ensamblados:

    • Si utiliza Excel 2007 en el equipo de desarrollo, seleccione Microsoft.VisualStudio.Tools.Applications.ServerDocument.v9.0.

    • Si utiliza Excel 2003, seleccione Microsoft.VisualStudio.Tools.Applications.Runtime.

    Estos ensamblados definen diferentes versiones de la clase ServerDocument que se utilizan en los proyectos para 2007 Microsoft Office system y Microsoft Office 2003. Para obtener más información, vea Administrar documentos en un servidor mediante la clase ServerDocument.

  3. Haga clic en Aceptar.

  4. En el Explorador de soluciones, haga clic con el botón secundario en el proyecto DataWriter y, a continuación, haga clic en Agregar referencia.

  5. En la ficha Proyectos, seleccione AdventureWorksDataSet y, a continuación, haga clic en Aceptar.

  6. Abra el archivo Program.cs o Module1.vb en el Editor de código.

  7. Agregue la siguiente instrucción using (para C#) o Imports (para Visual Basic) al principio del archivo de código.

    Imports Microsoft.VisualStudio.Tools.Applications
    
    using Microsoft.VisualStudio.Tools.Applications;
    
  8. Agregue el código siguiente al método Main. Este código declara los siguientes objetos:

    • Instancias de los tipos ProductTableAdapter y AdventureWorksLTDataSet que se definen en el proyecto AdventureWorksDataSet.

    • La ruta de acceso al libro AdventureWorksReport en la carpeta de compilación del proyecto AdventureWorksReport.

    • Un objeto ServerDocument que se va a usar para obtener acceso a la memoria caché de datos en el libro.

      Nota:

      El código siguiente supone que está utilizando un libro de Excel 2007 con la extensión de archivo .xlsx. Si el libro del proyecto tiene una extensión de archivo diferente, modifique la ruta de acceso según proceda.

    Dim productDataSet As New AdventureWorksDataSet.AdventureWorksLTDataSet()
    Dim productTableAdapter As _
        New AdventureWorksDataSet.AdventureWorksLTDataSetTableAdapters.ProductTableAdapter()
    
    Dim workbookPath As String = System.Environment.GetFolderPath( _
        Environment.SpecialFolder.MyDocuments) & _
        "\AdventureWorksReport\bin\Debug\AdventureWorksReport.xlsx"
    Dim serverDocument1 As ServerDocument = Nothing
    
    AdventureWorksDataSet.AdventureWorksLTDataSet productDataSet = 
        new AdventureWorksDataSet.AdventureWorksLTDataSet();
    AdventureWorksDataSet.AdventureWorksLTDataSetTableAdapters.ProductTableAdapter productTableAdapter =
        new AdventureWorksDataSet.AdventureWorksLTDataSetTableAdapters.ProductTableAdapter();
    
    string workbookPath = System.Environment.GetFolderPath(
        Environment.SpecialFolder.MyDocuments) +
        @"\AdventureWorksReport\bin\Debug\AdventureWorksReport.xlsx";
    ServerDocument serverDocument1 = null;
    
  9. Agregue el siguiente código al método Main, después del código que agregó en el paso anterior. Este código realiza las tareas siguientes:

    • Rellena el objeto de conjunto de datos con tipo utilizando el adaptador de la tabla.

    • Utiliza la propiedad CachedData de la clase ServerDocument para obtener acceso al conjunto de datos almacenado en caché del libro.

    • Utiliza el método SerializeDataInstance para rellenar el conjunto de datos almacenado en memoria caché con datos del conjunto de datos con tipo local.

    Try
        productTableAdapter.Fill(productDataSet.Product)
        Console.WriteLine("The local dataset is filled.")
    
        serverDocument1 = New ServerDocument(workbookPath)
        Dim dataHostItem1 As CachedDataHostItem = _
            serverDocument1.CachedData.HostItems("AdventureWorksReport.Sheet1")
        Dim dataItem1 As CachedDataItem = dataHostItem1.CachedData("AdventureWorksLTDataSet")
    
        ' Initialize the worksheet dataset with the local dataset.
        If dataItem1 IsNot Nothing Then
            dataItem1.SerializeDataInstance(productDataSet)
            serverDocument1.Save()
            Console.WriteLine("The data is saved to the data cache.")
        Else
            Console.WriteLine("The data object is not found in the data cache.")
        End If
    Catch ex As System.Data.SqlClient.SqlException
        Console.WriteLine(ex.Message)
    Catch ex As System.IO.FileNotFoundException
        Console.WriteLine("The specified workbook does not exist.")
    Finally
        If Not (serverDocument1 Is Nothing) Then
            serverDocument1.Close()
        End If
        Console.WriteLine(vbLf & vbLf & "Press Enter to close the application.")
        Console.ReadLine()
    End Try
    
    try
    {
        productTableAdapter.Fill(productDataSet.Product);
        Console.WriteLine("The local dataset is filled.");
    
        serverDocument1 = new ServerDocument(workbookPath);
        CachedDataHostItem dataHostItem1 =
            serverDocument1.CachedData.HostItems["AdventureWorksReport.Sheet1"];
        CachedDataItem dataItem1 = dataHostItem1.CachedData["adventureWorksLTDataSet"];
    
        // Initialize the worksheet dataset with the local dataset.
        if (dataItem1 != null)
        {
            dataItem1.SerializeDataInstance(productDataSet);
            serverDocument1.Save();
            Console.WriteLine("The data is saved to the data cache.");
            Console.ReadLine();
        }
        else
        {
            Console.WriteLine("The data object is not found in the data cache.");
        }
    }
    catch (System.Data.SqlClient.SqlException ex)
    {
        Console.WriteLine(ex.Message);
    }
    catch (System.IO.FileNotFoundException)
    {
        Console.WriteLine("The specified workbook does not exist.");
    }
    finally
    {
        if (serverDocument1 != null)
        {
            serverDocument1.Close();
        }
    
        Console.WriteLine("\n\nPress Enter to close the application.");
        Console.ReadLine();
    }
    
  10. En el Explorador de soluciones, haga clic con el botón secundario en el proyecto DataWriter, elija Depurar y, a continuación, haga clic en Iniciar nueva instancia.

    El proyecto se genera y la aplicación de consola muestra varios mensajes de estado cuando se rellena el conjunto de datos local y cuando la aplicación guarda los datos en el conjunto de datos almacenado en memoria caché del libro. Presione ENTRAR para cerrar la aplicación.

Probar el libro

Al abrir el libro, ListObject muestra ahora los datos que se agregaron al conjunto de datos almacenado en memoria caché utilizando la aplicación de consola.

Para probar el libro

  1. Cierre el libro AdventureWorksReport en el diseñador de Visual Studio, si todavía está abierto.

  2. En el Explorador de Windows, abra la ruta de acceso al libro AdventureWorksReport que se encuentra en la carpeta de compilación del proyecto AdventureWorksReport. De forma predeterminada, la carpeta de compilación está en una de las ubicaciones siguientes:

    • %UserProfile%\Mis documentos\AdventureWorksReport\bin\Debug (para Windows XP y versiones anteriores)

    • %UserProfile%\Documentos\AdventureWorksReport\bin\Debug (para Windows Vista)

  3. Compruebe que ListObject se rellena con datos después de abrir el libro.

Pasos siguientes

Para obtener más información sobre cómo trabajar con datos almacenados en caché, vea estos temas:

Vea también

Tareas

Cómo: Insertar datos en un libro ubicado en un servidor

Tutorial: Cambiar los datos almacenados en caché de un libro de trabajo de un servidor

Cómo: Insertar datos en documentos sin escribir en el disco

Conceptos

Conectarse a datos en Información general de Visual Studio