Partilhar via


Demonstra Passo a passo: A alteração de dados em uma pasta de trabalho em um servidor de cache

Esta explicação passo a passo demonstra como modificar um dataset que é armazenado em cache em uma pasta de trabalho do Excel de Microsoft Office sem iniciar o Excel usando o ServerDocument classe. Esta explicação passo a passo fornece instruções passo a passo para usar os exemplos de código são fornecidos no Como: Alterar dados em uma pasta de trabalho em um servidor de cache.

Aplicável a: As informações neste tópico se aplicam a projetos de nível de documento para Excel 2007 e Excel 2010. Para obter mais informações, consulte Recursos disponíveis pelo aplicativo do Office e o tipo de projeto.

This walkthrough illustrates the following tasks:

  • A definição de um dataset que contém os dados do banco de dados AdventureWorksLT.

  • A criação de instâncias do dataset em um projeto de pasta de trabalho do Excel e um projeto de aplicativo de console.

  • Criando um ListObject que é acoplada ao dataset na pasta de trabalho e o preenchimento de ListObject com dados quando a pasta de trabalho é aberta.

  • Adicionar o dataset na pasta de trabalho para o cache de dados.

  • A modificação de uma coluna de dados no dataset em cache executando o código no aplicativo de console, sem iniciar o Excel.

Embora este passo a passo presume que você está executando o código no seu computador de desenvolvimento, o código demonstrado por este passo a passo pode ser usado em um servidor que não tenha o Excel instalado.

ObservaçãoObservação

Your computer might show different names or locations for some of the Visual Studio user interface elements in the following instructions. The Visual Studio edition that you have and the settings that you use determine these elements. For more information, see Trabalhando com configurações.

Pré-requisitos

You need the following components to complete this walkthrough:

-

Uma edição do Visual Studio 2010 que inclua as ferramentas de desenvolvedor do Microsoft Office. Para obter mais informações, consulte [Configurando um computador para desenvolver soluções do Office](bb398242\(v=vs.100\).md).

Criando um projeto de biblioteca de classe que define um conjunto de dados.

Para usar o mesmo conjunto de dados em um projeto de pasta de trabalho do Excel e um aplicativo de console, você deve definir o dataset em um assembly separado que é referenciado por ambos esses projetos. Para esta explicação, definem o dataset em um projeto de biblioteca de classe.

Para criar o projeto de biblioteca de classe

  1. Start Visual Studio.

  2. On the File menu, point to New, and then click Project.

  3. No painel templates, expanda Visual C# ou Visual Basice em seguida, clique em Windows.

  4. Na lista de modelos de projeto, selecione Biblioteca de classe.

  5. No nome , digite AdventureWorksDataSet.

  6. Clique em Procurar, navegue até sua %USERPROFILE%\Meus documentos (para Windows XP e versões anteriores) ou a pasta de %UserProfile%\Documents (para Windows Vista) e, em seguida, clique em Selecionar a pasta.

  7. No Novo projeto caixa de diálogo caixa, certifique-se de que o Create directory for solution caixa de seleção não estiver selecionada.

  8. Click OK.

    Visual StudioAdiciona o AdventureWorksDataSet de projeto para Solution Explorer e abre o Class1. cs ou Class1. vb o arquivo de código.

  9. Em Solution Explorer, com o botão direito Class1. cs ou Class1. vbe em seguida, clique em Excluir. Este arquivo não é necessário para esta explicação passo a passo.

A definição de um Dataset no projeto de biblioteca de classe

Defina um dataset tipado que contém os dados do banco de dados AdventureWorksLT para o SQL Server 2005. Posteriormente neste passo a passo, você fará referência a este dataset a partir de um projeto de pasta de trabalho do Excel e um projeto de aplicativo de console.

O dataset é um digitado dataset que representa os dados na tabela do banco de dados AdventureWorksLT produto. Para obter mais informações sobre datasets tipados, consulte Trabalhando com conjuntos de dados Visual Studio.

Para definir um dataset tipado no projeto de biblioteca de classe

  1. Em Solution Explorer, clique na AdventureWorksDataSet project.

  2. On the Data menu, click Add New Data Source.

    The Data Source Configuration Wizard opens.

  3. Clique em banco de dadose em seguida, clique em próximo.

  4. Se você tiver uma conexão existente no banco de dados de AdventureWorksLT, escolher essa conexão e clique em próximo.

    Caso contrário, clique em Nova conexãoe usar o Add Connection caixa de diálogo Criar nova conexão. For more information, see Como: Conectar-se a Dados em um Banco de Dados.

  5. No Save the Connection String no arquivo de configuração do aplicativo página, clique em próximo.

  6. No Escolha seus objetos de banco de dados de página, expanda tabelas e selecione o produto (SalesLT).

  7. Click Finish.

    O arquivo de AdventureWorksLTDataSet.xsd é adicionado para o AdventureWorksDataSet project. Esse arquivo define os seguintes itens:

    • A typed dataset named AdventureWorksLTDataSet. Este dataset representa o conteúdo da tabela Produtos no banco de dados AdventureWorksLT.

    • A TableAdapter named ProductTableAdapter. Isso TableAdapter pode ser usado para ler e gravar dados na AdventureWorksLTDataSet. For more information, see Visão geral do TableAdapter.

    Você usará dois desses objetos posteriormente nesta explicação passo a passo.

  8. Em Solution Explorer, com o botão direito AdventureWorksDataSet e clique em Build.

    Verifique se o projeto é compilado sem erros.

Criando um projeto de pasta de trabalho do Excel

Crie um projeto de pasta de trabalho do Excel para a interface de dados. Posteriormente nesta explicação, você criará um ListObject que exibe os dados, e você irá adicionar uma instância do dataset para o cache de dados na pasta de trabalho.

Para criar o projeto de pasta de trabalho do Excel

  1. Em Solution Explorer, com o botão direito do AdventureWorksDataSet solução, aponte para Adde, em seguida, clique em Novo projeto.

  2. No painel templates, expanda Visual C# ou Visual Basice em seguida, expanda Office.

  3. Em expandida Office o nó, selecione o 2007 ou 2010 nó.

  4. Na lista de modelos de projeto, selecione o projeto de pasta de trabalho do Excel.

  5. No nome , digite AdventureWorksReport. Não modifique o local.

  6. Click OK.

    O Visual Studio Tools for Office Project Wizard abre.

  7. Certifique-se de que criar um novo documento está selecionado e, em seguida, clique em OK.

    Visual StudioAbre a AdventureWorksReport a pasta de trabalho no designer e adiciona a AdventureWorksReport de projeto para Solution Explorer.

Adicionar o Dataset para fontes de dados do projeto de pasta de trabalho do Excel

Antes de você poder exibir o conjunto de dados da pasta de trabalho do Excel, você deve primeiro adicionar o dataset a fontes de dados do projeto de pasta de trabalho do Excel.

Para adicionar o dataset para as fontes de dados do projeto de pasta de trabalho do Excel

  1. Em Solution Explorer, clique duas vezes em Sheet1.cs ou Sheet1.vb sob a AdventureWorksReport project.

    A pasta de trabalho abre no designer.

  2. On the Data menu, click Add New Data Source.

    The Data Source Configuration Wizard opens.

  3. Clique em objetoe em seguida, clique em próximo.

  4. No Selecionar o objeto que deseja vincular a página, clique em Adicionar referência de.

  5. Sobre o projetos , clique em AdventureWorksDataSet e, em seguida, clique em OK.

  6. Sob o AdventureWorksDataSet namespace da AdventureWorksDataSet assembly, clique em AdventureWorksLTDataSet e, em seguida, clique em Concluir.

    O Fontes de dados janela é aberta, e AdventureWorksLTDataSet é adicionado à lista de fontes de dados.

Criando um ListObject que está vinculado a uma instância do Dataset

Para exibir o conjunto de dados na pasta de trabalho, crie um ListObject que é vinculado a uma instância do dataset. Para obter mais informações sobre controles de vinculação de dados, consulte A ligação de dados a controles em soluções do Office.

Para criar um ListObject que esteja vinculado a uma instância do dataset

  1. No Fontes de dados janela, expanda o AdventureWorksLTDataSet nó em AdventureWorksDataSet.

  2. Selecione o produto o nó, clique na seta suspensa que aparece e, em seguida, selecione ListObject na lista drop-down.

    Se a seta suspensa não aparecer, confirme que a pasta de trabalho é aberta no designer.

  3. Arraste o produto tabela para a célula A1.

    A ListObject controle chamado productListObject é criado na planilha, começando na célula A1. At a mesma hora, um objeto dataset chamado adventureWorksLTDataSet e um BindingSource chamado productBindingSource são adicionados ao projeto. O ListObject está vinculado a BindingSource, que por sua vez é vinculado a objeto dataset.

Adicionar o Dataset para o Cache de dados

Para habilitar código fora do projeto de pasta de trabalho do Excel para acessar o conjunto de dados na pasta de trabalho, você deve adicionar o dataset para o cache de dados. Para obter mais informações sobre o cache de dados, consulte Dados armazenados em cache no nível do documento personalizações e Cache de dados.

Para adicionar o dataset para o cache de dados

  1. No designer, clique em adventureWorksLTDataSet.

  2. No Propriedades janela, defina a modificadores propriedade para pública.

  3. Definir o CacheInDocument propriedade para True.

Inicializando o Dataset na pasta de trabalho

Antes de recuperar os dados do conjunto de dados em cache, usando o aplicativo de console, você primeiro deve preencher o dataset com dados em cache.

Ao inicializar o conjunto de dados na pasta de trabalho

  1. Em Solution Explorer, com o botão direito do Sheet1.cs ou Sheet1.vb de arquivo e clique em Exibir código.

  2. Substituir o Sheet1_Startup o manipulador de eventos com o código a seguir. Esse código usa uma instância da ProductTableAdapter classe definida na AdventureWorksDataSet o projeto para preencher o dataset em cache com dados, se ele estiver vazio no momento.

    Private ProductTableAdapter As New  _
        AdventureWorksDataSet.AdventureWorksLTDataSetTableAdapters.ProductTableAdapter()
    
    Private Sub Sheet1_Startup(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Startup
        If Me.NeedsFill("AdventureWorksLTDataSet") Then
            Me.ProductTableAdapter.Fill(Me.AdventureWorksLTDataSet.Product)
        End If
    End Sub
    
    private AdventureWorksDataSet.AdventureWorksLTDataSetTableAdapters.ProductTableAdapter productTableAdapter =
        new AdventureWorksDataSet.AdventureWorksLTDataSetTableAdapters.ProductTableAdapter();
    
    private void Sheet1_Startup(object sender, System.EventArgs e)
    {
        if (this.NeedsFill("adventureWorksLTDataSet"))
        {
            this.productTableAdapter.Fill(this.adventureWorksLTDataSet.Product);
        }
    }
    

Checkpoint

Construir e executar o projeto de pasta de trabalho do Excel para garantir que compila e executa sem erros. Esta operação também preenche o dataset em cache e salva os dados na pasta de trabalho.

Para criar e executar o projeto.

  1. Em Solution Explorer, com o botão direito do AdventureWorksReport do projeto, escolha Debuge, em seguida, clique em Iniciar nova instância.

    O projeto é construído e a pasta de trabalho é aberta no Excel. Verifique o seguinte:

    • O ListObject preenche com dados.

    • O valor de ListPrice coluna para a primeira linha do ListObject é 1431.5. Posteriormente nesta explicação passo a passo, você usará um aplicativo de console para modificar os valores de ListPrice coluna.

  2. Salve a pasta de trabalho. Não modifique o nome de arquivo ou o local da pasta de trabalho.

  3. Feche o Excel.

Criando um projeto de aplicativo de Console

Crie um projeto de aplicativo de console para usar para modificar os dados no dataset em cache na pasta de trabalho.

Para criar o projeto de aplicativo de console

  1. Em Solution Explorer, com o botão direito do AdventureWorksDataSet solução, aponte para Adde, em seguida, clique em Novo projeto.

  2. No Tipos de projeto painel, expanda Visual C# ou Visual Basice em seguida, clique em Windows.

  3. No modelos de painel, selecione Aplicativo de Console.

  4. No nome , digite DataWriter. Não modifique o local.

  5. Click OK.

    Visual StudioAdiciona o DataWriter de projeto para Solution Explorer e abre o Program ou Module1 arquivo de código.

A alteração de dados no Dataset em cache usando o aplicativo de Console

Use o ServerDocument classe no aplicativo de console para ler os dados em um local AdventureWorksLTDataSet o objeto, modificar esses dados e salvá-lo de volta para o dataset em cache.

Para alterar os dados no dataset em cache

  1. Em Solution Explorer, com o botão direito do DataWriter de projeto e clique em Adicionar referência de.

  2. Sobre o .NET , selecione Microsoft.VisualStudio.Tools.Applications.ServerDocument (se a DataWriter destinos do projeto de .NET Framework 4) ou Microsoft.VisualStudio.Tools.Applications.ServerDocument.v10.0 (se a DataWriter destinos do projeto a.NET Framework 3.5).

  3. Click OK.

  4. Em Solution Explorer, com o botão direito do DataWriter de projeto e clique em Adicionar referência de.

  5. Sobre o projetos guia, selecione AdventureWorksDataSete clique em OK.

  6. Abra o arquivo Program. cs ou Module1. vb no Editor de código.

  7. Adicione o seguinte using (para C#) ou Imports (para Visual Basic) à parte superior do arquivo de código.

    Imports Microsoft.VisualStudio.Tools.Applications
    
    using Microsoft.VisualStudio.Tools.Applications;
    
  8. Add the following code to the Main method. Esse código declara os seguintes objetos:

    • Uma instância da AdventureWorksLTDataSet tipo é definido na AdventureWorksDataSet project.

    • O caminho para a pasta de trabalho na pasta build do AdventureWorksReport a AdventureWorksReport project.

    • A ServerDocument objeto para acessar o cache de dados na pasta de trabalho.

      ObservaçãoObservação

      O código a seguir pressupõe que você está usando uma pasta de trabalho que possui a extensão de arquivo. xlsx. Se a pasta de trabalho em seu projeto possui uma extensão de arquivo diferente, modifique o caminho conforme necessário.

    Dim productDataSet As New AdventureWorksDataSet.AdventureWorksLTDataSet()
    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();
    string workbookPath = System.Environment.GetFolderPath(
        Environment.SpecialFolder.MyDocuments) +
        @"\AdventureWorksReport\bin\Debug\AdventureWorksReport.xlsx";
    ServerDocument serverDocument1 = null;
    
  9. Adicione o seguinte código para o Main método, após o código adicionado na etapa anterior. Esse código realiza as seguintes tarefas:

    • Ele usa o CachedData propriedade da ServerDocument a classe para acessar o conjunto de dados em cache na pasta de trabalho.

    • Ele lê os dados do conjunto de dados em cache para o dataset local.

    • Ele altera o ListPrice o valor de cada produto na tabela de produto do dataset.

    • Ele salva as alterações para o dataset em cache na pasta de trabalho.

    Try
        serverDocument1 = New ServerDocument(workbookPath)
        Dim dataHostItem1 As CachedDataHostItem = _
            serverDocument1.CachedData.HostItems("AdventureWorksReport.Sheet1")
        Dim dataItem1 As CachedDataItem = dataHostItem1.CachedData("AdventureWorksLTDataSet")
    
        If dataItem1 IsNot Nothing Then
            Console.WriteLine("Before reading data from the cache dataset, the local dataset has " & _
                "{0} rows.", productDataSet.Product.Rows.Count.ToString())
    
            ' Read the cached data from the worksheet dataset into the local dataset.
            Dim schemaReader As New System.IO.StringReader(dataItem1.Schema)
            Dim xmlReader As New System.IO.StringReader(dataItem1.Xml)
            productDataSet.ReadXmlSchema(schemaReader)
            productDataSet.ReadXml(xmlReader)
    
            Console.WriteLine("After reading data from the cache dataset, the local dataset has " & _
                "{0} rows.", productDataSet.Product.Rows.Count.ToString())
    
            ' Modify the prices of each product in the local dataset.
            Dim row As AdventureWorksDataSet.AdventureWorksLTDataSet.ProductRow
            For Each row In productDataSet.Product.Rows
                If row.ProductCategoryID < 20 Then
                    row.ListPrice = row.ListPrice + row.ListPrice * 0.1
                Else
                    row.ListPrice = row.ListPrice - row.ListPrice * 0.1
                End If
            Next row
    
            ' Write the modified local dataset to the worksheet dataset using the DiffGram format.
            Dim stringIn As New System.Text.StringBuilder()
            Dim stringOut As New System.IO.StringWriter(stringIn)
            productDataSet.WriteXml(stringOut, System.Data.XmlWriteMode.DiffGram)
            dataItem1.Xml = stringIn.ToString()
    
            serverDocument1.Save()
            Console.WriteLine("The product prices have been modified.")
        Else
            Console.WriteLine("The data object is not found in the data cache.")
        End If
    Catch ex As System.IO.FileNotFoundException
        Console.WriteLine("The specified workbook does not exist.")
    Catch ex As System.Xml.XmlException
        Console.WriteLine("The data object has invalid XML information.")
    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
    {
        serverDocument1 = new ServerDocument(workbookPath);
        CachedDataHostItem dataHostItem1 =
            serverDocument1.CachedData.HostItems["AdventureWorksReport.Sheet1"];
        CachedDataItem dataItem1 = dataHostItem1.CachedData["adventureWorksLTDataSet"];
    
        if (dataItem1 != null)
        {
            Console.WriteLine("Before reading data from the cache dataset, the local dataset has " +
                "{0} rows.", productDataSet.Product.Rows.Count.ToString());
    
            // Read the cached data from the worksheet dataset into the local dataset.
            System.IO.StringReader schemaReader = new System.IO.StringReader(dataItem1.Schema);
            System.IO.StringReader xmlReader = new System.IO.StringReader(dataItem1.Xml);
            productDataSet.ReadXmlSchema(schemaReader);
            productDataSet.ReadXml(xmlReader);
    
            Console.WriteLine("After reading data from the cache dataset, the local dataset has " +
                "{0} rows.", productDataSet.Product.Rows.Count.ToString());
    
            // Modify the prices of each product in the local dataset.
            foreach (AdventureWorksDataSet.AdventureWorksLTDataSet.ProductRow row in 
                     productDataSet.Product.Rows)
            {
                if (row.ProductCategoryID < 20)
                {
                    row.ListPrice = row.ListPrice + (row.ListPrice * (Decimal).10);
                }
                else
                {
                    row.ListPrice = row.ListPrice - (row.ListPrice * (Decimal).10);
                }
            }
    
            // Write the modified local dataset to the worksheet dataset using the DiffGram format.
            System.Text.StringBuilder stringIn = new System.Text.StringBuilder();
            System.IO.StringWriter stringOut = new System.IO.StringWriter(stringIn);
            productDataSet.WriteXml(stringOut, System.Data.XmlWriteMode.DiffGram);
            dataItem1.Xml = stringIn.ToString();
    
            serverDocument1.Save();
            Console.WriteLine("The product prices have been modified.");
        }
        else
        {
            Console.WriteLine("The data object is not found in the data cache.");
        }
    }
    catch (System.IO.FileNotFoundException)
    {
        Console.WriteLine("The specified workbook does not exist.");
    }
    catch (System.Xml.XmlException)
    {
        Console.WriteLine("The data object has invalid XML information.");
    }
    finally
    {
        if (serverDocument1 != null)
        {
            serverDocument1.Close();
        }
    
        Console.WriteLine("\n\nPress Enter to close the application.");
        Console.ReadLine();
    }
    
  10. Em Solution Explorer, com o botão direito do DataWriter de projeto, aponte para Debuge, em seguida, clique em Iniciar nova instância.

    O aplicativo de console exibe mensagens enquanto lê o dataset em cache para o dataset de local, modifica os preços de produto no dataset local e salva os novos valores para o dataset em cache. Pressione ENTER para fechar o aplicativo.

A pasta de trabalho de teste.

Quando você abre a pasta de trabalho, o ListObject agora exibe as alterações feitas a ListPrice coluna de dados no dataset em cache.

Para testar a pasta de trabalho.

  1. Se ele ainda estiver aberto, feche a pasta de trabalho no criador de Visual Studio, AdventureWorksReport.

  2. Abra a pasta de trabalho do AdventureWorksReport está na pasta de compilação do AdventureWorksReport project. Por padrão, a pasta build é um dos seguintes locais:

    • %USERPROFILE%\Meus Documents\AdventureWorksReport\bin\Debug (para Windows XP e versões anteriores)

    • %USERPROFILE%\Documents\AdventureWorksReport\bin\Debug (para Windows Vista)

  3. Verifique o valor no ListPrice a primeira linha da coluna a ListObject agora é 1574.65.

  4. Feche a pasta de trabalho.

Próximas etapas

Você pode aprender mais sobre como trabalhar com dados em cache com estes tópicos:

Consulte também

Tarefas

Como: Inserir dados em uma pasta de trabalho em um servidor

Como: Recuperar dados em cache a partir de uma pasta de trabalho em um servidor

Demonstra Passo a passo: Inserindo dados em uma pasta de trabalho em um servidor

Como: Inserir dados em documentos sem gravar em disco

Conceitos

Conectando a dados em aplicativos Windows Forms