Compartilhar via


Passo a passo: Alterando dados armazenados em cache em uma pasta de trabalho em um servidor

Essa explicação passo a passo demonstra como alterar um dataset que é armazenado em cache em uma pasta de trabalho do Microsoft Office Excel sem iniciar o excel usando a classe de ServerDocument .

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

Essa explicação passo a passo mostra as seguintes tarefas:

  • Definindo um dataset que contém dados do banco de dados AdventureWorksLT.

  • Criar instâncias de dataset em um projeto de pasta de trabalho do Excel e em um projeto de aplicativo de console.

  • Criando ListObject que é associada ao conjunto de dados na pasta de trabalho, e preencher ListObject com os dados quando a pasta de trabalho é aberta.

  • Adicionando o conjunto de dados na pasta de trabalho para o cache de dados.

  • Modificando 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 assume que você está executando o código no seu computador de desenvolvimento, o código demonstrado por essa explicação passo a passo pode ser usado em um servidor que não tenha instalar o excel.

ObservaçãoObservação

Seu computador pode mostrar diferentes nomes ou localizações para alguns dos elementos de interface do usuário Visual Studio nas instruções a seguir.A edição Visual Studio que você possui e as configurações que você usa determinam esses elementos.Para obter mais informações, consulte Configurações de Visual Studio.

Pré-requisitos

Para completar este passo-a-passo, são necessários os seguintes componentes:

-

Uma edição do Visual Studio 2012 que inclui o Microsoft Office Developer Tools. Para obter mais informações, consulte [Configurando um computador para desenvolver soluções do Office](bb398242\(v=vs.110\).md).

Criando uma biblioteca Pack da classe que define um dataset

Para usar o mesmo dataset em um projeto de pasta de trabalho do Excel e em um aplicativo de console, você deve definir o conjunto de dados em um conjunto separado que é referenciado por ambos os projetos.Para essa explicação passo a passo, defina o dataset em um projeto de biblioteca de classes.

Para criar o projeto de biblioteca de classe

  1. Inicie o Visual Studio

  2. No menu File, aponte para New, e em seguida, clique em Project.

  3. No painel de modelos, expanda Visual C# ou Visual Basic, e clique em Janelas.

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

  5. Na caixa de Nome , digite AdventureWorksDataSet.

  6. Clique Procurar, navegue até o seu %UserProfile% \ my documents (para Windows XP e anteriormente) ou pasta de %UserProfile% \ documents (para Windows Vista), e clique em Selecionar Pasta.

  7. Na caixa de diálogo de Novo Projeto , certifique-se de que a caixa de seleção de Criar diretório para a solução não está marcada.

  8. Clique em OK.

    Visual Studio adiciona o projeto de AdventureWorksDataSet a Gerenciador de Soluções e abre o arquivo de código de Class1.cs ou de Class1.vb .

  9. Em Gerenciador de Soluções, clique com o botão direito do mouse ou Class1.vbClass1.cs , clique em Excluir.Você não precisa esse arquivo para essa explicação passo a passo.

Configurando um dataset na biblioteca de classe Project

Defina um dataset tipado que contém dados do banco de dados AdventureWorksLT para o SQL Server 2005.Posteriormente nesta explicação passo a passo, você fará referência a esse conjunto de dados de um projeto de pasta de trabalho do Excel e de um projeto de aplicativo de console.

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

Para definir um dataset tipado na biblioteca de classes projeto

  1. Em Gerenciador de Soluções, clique no projeto de AdventureWorksDataSet .

  2. Se a janela de Fontes de Dados não estiver visível, exibi-la por, na barra de menus, escolhendo Modo de Visualização, Outras Janelas, Fontes de Dados.

  3. Escolha Adicionar Nova Fonte de Dados para iniciar Assistente para Configuração de Fonte de Dados.

  4. Clique em Banco de Dados, e clique em Avançar.

  5. Se você tiver uma conexão existente para o banco de dados AdventureWorksLT, escolha esses conexão e clique Avançar.

    Se não, clique Nova Conexão, e use a caixa de diálogo de Adicionar Conexão para criar uma nova conexão.Para obter mais informações, consulte Como: conectar-se a dados em um banco de dados..

  6. Na página de Salvar a Cadeia de Conexão no Arquivo de Configuração do Aplicativo , clique Avançar.

  7. Na página de Escolher Objetos do Banco de Dados , expanda e selecione TabelasProduto (SalesLT).

  8. Clique em Concluir.

    O arquivo de AdventureWorksLTDataSet.xsd é adicionado ao projeto de AdventureWorksDataSet .Esse arquivo define os seguintes itens:

    • Um conjunto de dados tipado chamado AdventureWorksLTDataSet.Este dataset representa o conteúdo da tabela produtos do banco de dados AdventureWorksLT.

    • TableAdapterProductTableAdapterchamado.Este TableAdapter pode ser usado para ler e gravar dados em AdventureWorksLTDataSet.Para obter mais informações, consulte Visão geral do TableAdapter.

    Você usará ambos esses objetos posteriormente neste passo-a-passo.

  9. Em Gerenciador de Soluções, clique com o botão direito do mouse AdventureWorksDataSet e clique Compilar.

    Verifique se o projeto compila sem erros.

Criando uma pasta de trabalho de O Excel

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

Para criar o projeto de pasta de trabalho do Excel

  1. Em Gerenciador de Soluções, clique com o botão direito do mouse na solução de AdventureWorksDataSetAdicionar, aponte para, e clique em Novo Projeto.

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

  3. Sob o nó expandido de Office , selecione o nó de 2010 .

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

  5. Na caixa de Nome , digite AdventureWorksReport.Não altere o local.

  6. Clique em OK.

    Visual Studio Tools para Office Project Wizard abre.

  7. Certifique-se de que Criar um Novo Documento ser selecionado e, clicar-se OK.

    Visual Studio abra a pasta de trabalho de AdventureWorksReport no designer e adiciona o projeto de AdventureWorksReport a Gerenciador de Soluções.

Adicionar o dataset a fontes de dados na pasta de trabalho de O Excel

Antes que você possa exibir o conjunto de dados na pasta de trabalho do Excel, você deve primeiro adicionar o dataset a fontes de dados no projeto de pasta de trabalho do Excel.

Para adicionar o dataset a fontes de dados na pasta de trabalho do Excel projeto

  1. Em Gerenciador de Soluções, clique duas vezes Sheet1.cs ou Sheet1.vb no projeto de AdventureWorksReport .

    A pasta de trabalho abre no designer.

  2. No menu Data, clique em Add New Data Source.

    O Data Source Configuration Wizard é aberto.

  3. Clique em Objeto, e clique em Avançar.

  4. Na página de Selecione o Objeto que Deseja Ligar , clique Adicionar Referência.

  5. Na guia de Projetos , clique em AdventureWorksDataSet e clique em OK.

  6. Sob o namespace de AdventureWorksDataSet do conjunto de AdventureWorksDataSet , clique em AdventureWorksLTDataSet e clique em Concluir.

    A janela de Fontes de Dados abre, e AdventureWorksLTDataSet é adicionado à lista de fontes de dados.

Criando um ListObject que está associado a uma instância do dataset

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

Para criar um ListObject que está associado a uma instância do dataset

  1. Na janela de Fontes de Dados , expanda o nó de AdventureWorksLTDataSet em AdventureWorksDataSet.

  2. Selecione o nó de Produto , clique na seta suspensa que aparece, e ListObject selecione na lista suspensa.

    Se a seta suspensa não aparecer, verifique se a pasta de trabalho é aberto no designer.

  3. Arraste a tabela de Produto para a célula A1.

    Um controle de ListObject chamado productListObject é criado na planilha, começando a célula A1.Ao mesmo tempo, um objeto de dataset chamado adventureWorksLTDataSet e BindingSource chamado productBindingSource é adicionado ao projeto.ListObject é associado a BindingSource, que por sua vez é associado ao objeto de dataset.

Adicionar o dataset para o cache de dados

Para ativar código fora do projeto de pasta de trabalho do Excel 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 adventureWorksLTDataSet.

  2. Na janela de Propriedades , defina a propriedade de Modificadores a Público.

  3. Defina a propriedade da CacheInDocumentTrue.

Inicializando o conjunto de dados na pasta de trabalho

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

Para inicializar o conjunto de dados na pasta de trabalho

  1. Em Gerenciador de Soluções, clique com o botão direito do mouse no arquivo de Sheet1.cs ou de Sheet1.vb e clique Exibir Código.

  2. Substitua o manipulador de eventos de Sheet1_Startup com o código a seguir.Esse código usa uma instância da classe de ProductTableAdapter que está definida no projeto de AdventureWorksDataSet preencher o dataset em cache com dados, está atualmente vazia.

    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);
        }
    }
    

Ponto de Verificação

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

Para compilar e executar o projeto

  1. Em Gerenciador de Soluções, clique com o botão direito do mouse no projeto de AdventureWorksReport , escolha Depurar, clique em Iniciar nova instância.

    O projeto é compilado, e a pasta de trabalho abre o excel.Verifique o seguinte:

    • O preenche com dados de ListObject .

    • O valor na coluna de Custo de catálogo para a primeira linha de ListObject é 1431,5.Posteriormente nesta explicação passo a passo, você usará um aplicativo de console alterar os valores na coluna de Custo de catálogo .

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

  3. Feche o excel.

Criando um aplicativo de console Project

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

Para criar o projeto de aplicativo de console

  1. Em Gerenciador de Soluções, clique com o botão direito do mouse na solução de AdventureWorksDataSetAdicionar, aponte para, e clique em Novo Projeto.

  2. No painel Tipos de projeto, expanda Visual C# ou Visual Basic, e clique em Janelas.

  3. No painel de Modelos , Aplicativo de Consoleselecione.

  4. Na caixa de Nome , digite DataWriter.Não altere o local.

  5. Clique em OK.

    Visual Studio adiciona o projeto de DataWriter a Gerenciador de Soluções e abre o arquivo de código de Module.vb ou Module1.vb .

Modificando dados no dataset em cache usando o aplicativo de console

Use a classe de ServerDocument no aplicativo de console ler os dados em um objeto local de AdventureWorksLTDataSet , modifique esses dados, e então salve os de volta para o dataset em cache.

Para modificar dados no dataset em cache

  1. Em Gerenciador de Soluções, clique com o botão direito do mouse no projeto de DataWriter e clique em Adicionar Referência.

  2. Na guia do .NET , selecione Microsoft.VisualStudio.Tools.Applications.

  3. Clique em OK.

  4. Em Gerenciador de Soluções, clique com o botão direito do mouse no projeto de DataWriter e clique em Adicionar Referência.

  5. Na guia de Projetos , em AdventureWorksDataSetselecione, e clique em OK.

  6. Abra o arquivo Module1.vb de Module.vb ou no editor de códigos.

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

    Imports Microsoft.VisualStudio.Tools.Applications
    
    using Microsoft.VisualStudio.Tools.Applications;
    
  8. Adicione o seguinte código ao método Main.Esse código declara os seguintes objetos:

    • Uma instância do tipo de AdventureWorksLTDataSet que é definido no projeto de AdventureWorksDataSet .

    • O caminho para a pasta de trabalho de AdventureWorksReport na pasta de compilação do projeto de AdventureWorksReport .

    • Um objeto de ServerDocument para usar 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 do 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 ao método de Main , após o código que você adicionou na etapa anterior.Esse código executa as seguintes tarefas:

    • Usa a propriedade de CachedData da classe de ServerDocument para acessar o dataset em cache na pasta de trabalho.

    • Ler os dados do dataset em cache no conjunto de dados local.

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

    • Salva as alterações do 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 Gerenciador de Soluções, clique com o botão direito do mouse no projeto de DataWriter , aponte para Depurar, e então clique em Iniciar nova instância.

    O aplicativo de console exibe mensagens quando ler o dataset em cache no conjunto de dados local, altere os preços produtos do conjunto de dados local, e salvar os novos valores para o dataset em cache.Pressione ENTER de para fechar o aplicativo.

Testando a pasta de trabalho

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

Para testar a pasta de trabalho

  1. Feche a pasta de trabalho de AdventureWorksReport no designer do Visual Studio, se ainda está aberta.

  2. Abra a pasta de trabalho de AdventureWorksReport que está na pasta de compilação do projeto de AdventureWorksReport .Por padrão, a pasta de compilação estiver em um dos seguintes locais:

    • %UserProfile% \ my documents \ AdventureWorksReport \ bin \ debug (para Windows XP e anteriormente)

    • %UserProfile% \ documents \ AdventureWorksReport \ bin \ debug (para Windows Vista)

  3. Verifique se o valor na coluna de Custo de catálogo para a primeira linha de ListObject agora é 1574,65.

  4. Feche a pasta de trabalho.

Consulte também

Tarefas

Passo a passo: Inserção de dados em uma pasta de trabalho em um servidor

Conceitos

Conectando a dados em aplicativos Windows Forms