ID do artigo: 316934 - Última revisão: quarta-feira, 14 de julho de 2004 - Revisão: 7.3

Como usar o ADO.NET para recuperar e modificar registros em uma pasta de trabalho Excel com Visual Basic .NET

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.

Nesta página

Expandir tudo | Recolher tudo

Sumário

Este artigo descreve como você pode usar o ADO.NET para recuperar dados de uma pasta de trabalho do Microsoft Excel, modificar dados em uma pasta de trabalho existente ou adicionar dados a uma nova pasta de trabalho. Para acessar pastas de trabalho Excel com o ADO.NET, você pode usar o provedor do Jet OLE DB; este artigo fornece as informações que você precisa para que você possa usar o provedor do Jet OLE DB quando Excel é a fonte de dados de destino.

Como usar o Jet OLE DB Provider com pastas de trabalho Microsoft Excel

O mecanismo de banco de dados Microsoft Jet pode acessar dados em outros formatos de arquivo de banco de dados, como pastas de trabalho do Excel, por meio de drivers ISAM (método de acesso seqüencial indexado) instalável. Para abrir formatos externos suportados pelo Microsoft Jet 4.0 OLE DB Provider, especificar o tipo de banco de dados nas propriedades avançadas para a conexão. O Jet OLE DB Provider dá suporte aos seguintes tipos de banco de dados para pastas de trabalho do Microsoft Excel:
Excel 3.0
Excel 4.0
Excel 5.0
Excel 8.0
Observação : usar o tipo de banco de dados de origem do Excel 5.0 para pastas de trabalho do Microsoft Excel 5.0 e 7.0 (95) e usar o tipo de banco de dados de origem do Excel 8.0 para o Microsoft Excel 8.0 (97), 9.0 (2000) e 10.0 (2002) pastas de trabalho. Os exemplos neste artigo usam pastas de trabalho do Excel no formato do Excel 2000 e Excel 2002.

Seqüência de caracteres de conexão

Para acessar uma pasta de trabalho do Excel usando o Jet OLE DB Provider, use uma seqüência de conexão que tenha a seguinte sintaxe:
Propriedades de Source=C:\Book1.xls;Extended Provider=Microsoft.Jet.OLEDB.4.0;Data = "Excel 8.0; HDR = YES;"
Na seqüência de conexão, especifique o caminho e o nome completo para a pasta de trabalho no parâmetro de Fonte de dados . O parâmetro de Propriedades estendidas pode conter duas propriedades: uma propriedade para o ISAM versão e uma propriedade para indicar se ou não as tabelas incluem cabeçalhos.

Com pastas de trabalho do Excel, a primeira linha em um intervalo é a linha de cabeçalho (ou nomes de campo) por padrão. Se o primeiro intervalo não contiver cabeçalhos, você pode especificar HDR = nas propriedades estendidas sua seqüência de conexão. Se você especificar HDR = na seqüência de conexão, o provedor do Jet OLE DB automaticamente nomes de campos para você (F1 representa o primeiro campo, F2 representa o segundo campo e assim por diante).

Tipos de dados

Diferentemente de um banco de dados tradicional, não há nenhuma maneira direta para especificar os tipos de dados para colunas em tabelas do Excel. Em vez disso, o provedor OLE DB verifica oito linhas em uma coluna para adivinhar o tipo de dados para o campo. Você pode alterar o número de linhas a examinar especificando um valor entre um (1) e dezesseis (16) para o MAXSCANROWS definindo na propriedades estendidas de sua seqüência de conexão.

Convenções de nome de tabela

Há várias maneiras de você pode fazer referência a uma tabela (ou intervalo) em uma pasta de trabalho do Excel:
  • Usar o nome planilha seguido de um cifrão (por exemplo, [Sheet1 $] ou [My Worksheet $]). Uma tabela de pasta de trabalho que é referenciada dessa maneira inclui o intervalo totalmente usado da planilha.
    Selecione * from [Sheet1 $]
  • Use um intervalo com um nome definido (por exemplo, [MyNamedRange]):
    Selecione * de [MyNamedRange]
  • Usar um intervalo com um endereço específico (por exemplo, [Sheet1 $ A1: B10]):
    Selecione * de [Sheet1 $ A1: B10]
Observação : O sinal de cifrão após o nome da planilha é uma indicação de que a tabela existe. Se você estiver criando uma nova tabela, conforme discutido na Create New Workbooks and Tables de seção deste artigo, não use o símbolo de cifrão.

Como pastas de trabalho Excel usar como fontes de dados ADO.NET

Recuperar registros

Você pode recuperar registros de um banco de dados usando uma das duas abordagens no ADO.NET: com um DataSet ou com um DataReader .

Um DataSet é um cache de registros recuperados de uma fonte de dados. Os dados no DataSet normalmente são uma versão reduzida muito do que está no banco de dados. No entanto, você pode trabalhar com ele da mesma maneira que você trabalhe com os dados reais e permanece desconectado do banco de dados real. Além de recuperação de dados, você também pode usar um DataSet para executar operações de atualização no banco de dados subjacente.

Como alternativa, você pode usar um DataReader para recuperar um fluxo somente leitura, somente de encaminhamento de dados de um banco de dados. Quando você usar o programa de DataReader , aumento de desempenho e sobrecarga do sistema é diminui porque apenas uma linha por vez já está na memória. Se você tiver uma grande quantidade de dados para recuperar e pretende fazer alterações no banco de dados subjacente, um DataReader é uma opção melhor que um DataSet .

Adicionar e atualizar registros

Com o ADO.NET, você pode inserir e atualizar registros em uma pasta de trabalho de uma das três maneiras:
  • Executar um comando para inserir ou atualizar registros um por vez diretamente. Para fazer isso, você pode criar um objeto OLEDbCommand em sua conexão e defina sua propriedade CommandText para um comando válido para inserir registros

    INSERT INTO [Sheet1$] (F1, F2) values ('111', 'ABC')
    ou um comando para atualizar registros

    UPDATE [Sheet1$] SET F2 = 'XYZ' WHERE F1 = '111'
    e, em seguida, chame o método ExecuteNonQuery .
  • Fazer alterações em um DataSet que você tenha preenchido com uma tabela/consulta de uma pasta de trabalho do Excel e chamar o método Update do DataAdapter para resolver alterações do DataSet de volta para a pasta de trabalho. No entanto, para usar o método Update para alterar resolução você deve definir parametrizadas comandos para o DataAdapter do InsertCommand
    INSERT INTO [Sheet1$] (F1, F2) values (?, ?)
    e UpdateCommand :
    UPDATE [Sheet1$] SET F2 = ? WHERE F1 = ?
    comandos parametrizados INSERT e UPDATE são necessários porque o OleDbDataAdapter não fornece informações de chave/índice para pastas de trabalho do Excel; sem campos de chave/índice, o CommandBuilder não é possível gerar automaticamente os comandos para você.
  • Exportar dados de dados de outro fonte em uma pasta de trabalho do Excel desde que fonte de dados pode ser usado com o Jet OLE DB Provider. Dados de fontes que você pode usar com o Jet OLE DB Provider dessa maneira incluem arquivos de texto, bancos de dados do Microsoft Access e, claro, outras pastas de trabalho Excel. Com um único INSERT INTO comando, você pode exportar dados de outra tabela/consulta em sua pasta de trabalho:
    INSERT INTO [Sheet1$] IN 'C:\Book1.xls' 'Excel 8.0;' SELECT * FROM MyTable"
    INSERT INTO requer que a tabela de destino (ou planilha) já existe; os dados são acrescentados à tabela de destino.

    Você também pode usar SELECTINTO para exportar sua consulta (tabela para uma pasta de trabalho:
    SELECT * INTO [Excel 8.0;Database=C:\Book1.xls].[Sheet1] FROM [MyTable]
    quando você usar SELECTINTO, se a tabela de destino ou pasta de trabalho não existir, ela será criada para você. Se a tabela já existir antes do SELECTINTO comando é emitido, você receberá um erro.
O Sample Code seção mais adiante neste artigo ilustra cada uma dessas abordagens para adicionar e atualizar registros em uma pasta de trabalho.

Excluir registros

Embora o Jet OLE DB Provider permita que você inserir e atualizar registros em uma pasta de trabalho do Excel, ele não permite que as operações DELETE. Se você tentar executar uma operação DELETE em um ou mais registros, você receber a seguinte mensagem de erro:
Exclusão de dados em uma tabela vinculada não é suportada por este ISAM.
Essa limitação é inerente no tratamento de pastas de trabalho do Excel como bancos de dados.

Criar pastas de trabalho e tabelas

Para criar uma tabela em uma pasta de trabalho do Excel, execute o CREATE TABLE comando:
CREATE TABLE Sheet1 (F1 char(255), F2 char(255))
ao executar este comando, uma nova planilha é criada com o nome da tabela especificado no comando. Se a pasta de trabalho para a conexão não existir, ela também será criada.

A seção de Sample Code ilustra como você pode usar o comando CREATE TABLE para criar uma nova pasta de trabalho e a tabela.

Passo a passo

Código de exemplo

  1. Inicie um novo projeto Visual Basic.NET Windows Application .

    o Form1 é criado por padrão.
  2. Adicione controles RadioButton seis e um controle de botão ao Form1 .
  3. Selecione todos os controles RadioButton e defina a propriedade Size como 200,24 .
  4. No menu Exibir , clique em código .
  5. Adicione a seguinte linha ao bem no início do módulo de código:
    Imports System.Data.OleDb
  6. Insira o código a seguir na classe do formulário :
    Private m_sConn1 As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                   "Data Source=C:\ExcelData1.xls;" & _
                   "Extended Properties=""Excel 8.0;HDR=YES"""
    
    Private m_sConn2 As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                   "Data Source=C:\ExcelData2.xls;" & _
                   "Extended Properties=""Excel 8.0;HDR=YES"""
    
    Private m_sNorthwind = _
          "C:\Program Files\Microsoft Office\Office10\Samples\Northwind.mdb"
    
    Private m_sAction As String
    
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
          RadioButton1.Text = "Create_Workbook"
          RadioButton2.Text = "Retrieve_Records"
          RadioButton3.Text = "Add_Records"
          RadioButton4.Text = "Update_Records"
          RadioButton5.Text = "Update_Individual_Cells"
          RadioButton6.Text = "Use_External_Source"
          Button1.Text = "Go!"
    End Sub
    
    Private Sub RadioButtons_Click(ByVal sender As Object, ByVal e As System.EventArgs) _
          Handles RadioButton1.Click, RadioButton2.Click, RadioButton3.Click, _
          RadioButton4.Click, RadioButton5.Click, RadioButton6.Click
          m_sAction = sender.Text'Store the text for the selected radio button
    End Sub
    
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
          Try
             ' Call the associated routine to add/update/modify the workbook.
             Select Case m_sAction
                Case "Create_Workbook" : Create_Workbook()
                Case "Retrieve_Records" : Retrieve_Records()
                Case "Add_Records" : Add_Records()
                Case "Update_Records" : Update_Records()
                Case "Update_Individual_Cells" : Update_Individual_Cells()
                Case "Use_External_Source" : Use_External_Source()
             End Select
    
          Catch ex As OleDbException
             Dim er As OleDbError
             For Each er In ex.Errors
                MsgBox(er.Message)
             Next
          Catch ex2 As System.InvalidOperationException
             MsgBox(ex2.Message)
          End Try
    
    
    End Sub
    
    Public Sub Create_Workbook()
    
          ' If the workbooks already exist, prompt to delete.
          Dim answer As MsgBoxResult
          If Dir("C:\ExcelData1.xls") <> "" Or Dir("C:\ExcelData2.xls") <> "" Then
              answer = MsgBox("Delete existing workbooks (C:\ExcelData1.xls and " & _
                       "C:\ExcelData2.xls)?", MsgBoxStyle.YesNo)
              If answer = MsgBoxResult.Yes Then
                  If Dir("C:\ExcelData1.xls") <> "" Then Kill("C:\ExcelData1.xls")
                  If Dir("C:\ExcelData2.xls") <> "" Then Kill("C:\ExcelData2.xls")
              Else
                  Exit Sub
              End If
          End If
    
    '==========================================================================
          ' Create a workbook with a table named EmployeeData. The table has 3 
          ' fields: ID (char 255), Name (char 255) and Birthdate (date).  
    '==========================================================================
          Dim conn As New OleDbConnection()
          conn.ConnectionString = m_sConn1
          conn.Open()
          Dim cmd1 As New OleDbCommand()
          cmd1.Connection = conn
          cmd1.CommandText = "CREATE TABLE EmployeeData (Id char(255), Name char(255), BirthDate date)"
          cmd1.ExecuteNonQuery()
          cmd1.CommandText = "INSERT INTO EmployeeData (Id, Name, BirthDate) values ('AAA', 'Andrew', '12/4/1955')"
          cmd1.ExecuteNonQuery()
          conn.Close()
    
    '==========================================================================
          ' Create a workbook with a table named InventoryData. The table has 3 
          ' fields: Product (char 255), Qty (float) and Price (currency). 
    '==========================================================================
    
          conn.ConnectionString = m_sConn2
          conn.Open()
          Dim cmd2 As New OleDbCommand()
          cmd2.Connection = conn
          cmd2.CommandText = "CREATE TABLE InventoryData (Product char(255), Qty float, Price currency)"
          cmd2.ExecuteNonQuery()
          cmd2.CommandText = "INSERT INTO InventoryData (Product, Qty, Price) values ('Cola', 200, 1.35)"
          cmd2.ExecuteNonQuery()
          cmd2.CommandText = "INSERT INTO InventoryData (Product, Qty, Price) values ('Chips', 550, 0.89)"
          cmd2.ExecuteNonQuery()
          conn.Close()
    
          ' NOTE: You can ALTER and DROP tables in a similar fashion.
    
    End Sub
    
    Public Sub Retrieve_Records()
    
          '==========================================================
          'Use a DataReader to read data from the EmployeeData table.
          '==========================================================
    
          Dim conn1 As New System.Data.OleDb.OleDbConnection(m_sConn1)
          conn1.Open()
          Dim cmd1 As New System.Data.OleDb.OleDbCommand("Select * From [EmployeeData$]", conn1)
          Dim rdr As OleDbDataReader = cmd1.ExecuteReader
    
          Debug.WriteLine(vbCrLf & "EmployeeData:" & vbCrLf & "=============")
          Do While rdr.Read()
             Debug.WriteLine(System.String.Format("{0,-10}{1, -15}{2}", _
                rdr.GetString(0), rdr.GetString(1), _
                rdr.GetDateTime(2).ToString("d")))
          Loop
          rdr.Close()
          conn1.Close()
    
          '========================================================
          'Use a DataSet to read data from the InventoryData table.
          '========================================================
          Dim conn2 As New OleDbConnection(m_sConn2)
          Dim da As New OleDbDataAdapter("Select * From [InventoryData$]", conn2)
          Dim ds As DataSet = New DataSet()
          da.Fill(ds)
          Debug.WriteLine(vbCrLf & "InventoryData:" & vbCrLf & "==============")
          Dim dr As DataRow
          For Each dr In ds.Tables(0).Rows'Show results in output window
             Debug.WriteLine(System.String.Format("{0,-15}{1, -6}{2}", _
                dr("Product"), dr("Qty"), dr("Price")))
          Next
          conn2.Close()
    
    End Sub
    
    Public Sub Add_Records()
    
    '==========================================================================
          ' Run an INSERT INTO command to add new records to the workbook. 
    '==========================================================================
          Dim conn1 As New System.Data.OleDb.OleDbConnection(m_sConn1)
          conn1.Open()
          Dim cmd As New System.Data.OleDb.OleDbCommand()
          cmd.Connection = conn1
          cmd.CommandText = "INSERT INTO [EmployeeData$] (ID, Name, BirthDate) values ('CCC', 'Charlie', '10/14/48')"
          cmd.ExecuteNonQuery()
          cmd.CommandText = "INSERT INTO [EmployeeData$] (ID, Name, BirthDate) values ('DDD', 'Deloris', '7/19/98')"
          cmd.ExecuteNonQuery()
          conn1.Close()
    
          '====================================================================
          'Use the InsertCommand object to add new records to the InventoryData
          'table.
          '====================================================================
          Dim conn2 As New OleDbConnection(m_sConn2)
          Dim da As New OleDbDataAdapter("Select * From [InventoryData$]", conn2)
          Dim ds As DataSet = New DataSet()
          da.Fill(ds, "MyExcelTable")
    
          ' Generate the InsertCommand and add the parameters for the command.
          da.InsertCommand = New OleDbCommand( _
             "INSERT INTO [InventoryData$] (Product, Qty, Price) VALUES (?, ?, ?)", conn2)
          da.InsertCommand.Parameters.Add("@Product", OleDbType.VarChar, 255, "Product")
          da.InsertCommand.Parameters.Add("@Qty", OleDbType.Double).SourceColumn = "Qty"
          da.InsertCommand.Parameters.Add("@Price", OleDbType.Currency).SourceColumn = "Price"
    
          ' Add two new records to the dataset.
          Dim dr As DataRow
          dr = ds.Tables(0).NewRow
          dr("Product") = "Bread" : dr("Qty") = 390 : dr("Price") = 1.89 : ds.Tables(0).Rows.Add(dr)
          dr = ds.Tables(0).NewRow
          dr("Product") = "Milk" : dr("Qty") = 99 : dr("Price") = 2.59 : ds.Tables(0).Rows.Add(dr)
    
          ' Apply the dataset changes to the actual data source (the workbook).
          da.Update(ds, "MyExcelTable")
          conn2.Close()
    
    End Sub
    
    Public Sub Update_Records()
    
    '==========================================================================
          ' Run an UPDATE command to change a record in the EmployeeData
          ' table.
    '==========================================================================
          Dim conn1 As New System.Data.OleDb.OleDbConnection(m_sConn1)
          conn1.Open()
          Dim cmd As New System.Data.OleDb.OleDbCommand()
          cmd.Connection = conn1
          cmd.CommandText = "UPDATE [EmployeeData$] " & _
                        "SET NAME = 'Aaron', BirthDate = '5/4/1975' WHERE ID = 'AAA'"
          cmd.ExecuteNonQuery()
          conn1.Close()
    
          '====================================================================
          ' Use the UpdateCommand object to modify records in the InventoryData
          ' table.
          '====================================================================
          Dim conn2 As New OleDbConnection(m_sConn2)
          Dim da As New OleDbDataAdapter("Select * From [InventoryData$]", conn2)
          Dim ds As DataSet = New DataSet()
          da.Fill(ds, "MyInventoryTable")
    
          ' Generate the UpdateCommand and add the parameters for the command.
          da.UpdateCommand = New OleDbCommand( _
             "UPDATE [InventoryData$] SET Qty = ?, Price=? WHERE Product = ?", conn2)
          da.UpdateCommand.Parameters.Add("@Qty", OleDbType.Numeric).SourceColumn = "Qty"
          da.UpdateCommand.Parameters.Add("@Price", OleDbType.Currency).SourceColumn = "Price"
          da.UpdateCommand.Parameters.Add("@Product", OleDbType.VarChar, 255, "Product")
    
          ' Update the first two records.
          ds.Tables(0).Rows(0)("Qty") = 1000
          ds.Tables(0).Rows(0)("Price") = 10.1
          ds.Tables(0).Rows(1)("Qty") = 2000
          ds.Tables(0).Rows(1)("Price") = 20.2
    
          ' Apply the dataset changes to the actual data source (the workbook).
          da.Update(ds, "MyInventoryTable")
          conn2.Close()
    
    End Sub
    
    Public Sub Update_Individual_Cells()
    
    '==========================================================================
          ' Update individual cells on the EmployeeData worksheet; 
          ' specifically, cells F3, G3, and I4 are modified.
    '==========================================================================
    
          ' NOTE: The connection string indicates that the table does *NOT* 
          ' have a header row.
          Dim conn As New System.Data.OleDb.OleDbConnection(m_sConn1.Replace("HDR=YES", "HDR=NO"))
          conn.Open()
          Dim cmd As New System.Data.OleDb.OleDbCommand()
          cmd.Connection = conn
          cmd.CommandText = "UPDATE [EmployeeData$F3:G3] SET F1 = 'Cell F3', F2 = 'Cell G3'"
          cmd.ExecuteNonQuery()
          cmd.CommandText = "UPDATE [EmployeeData$I4:I4] SET F1 = 'Cell I4'"
          cmd.ExecuteNonQuery()
          conn.Close()
    
    End Sub
    
    Public Sub Use_External_Source()
    
          ' Open a connection to the sample Northwind Access database.
          Dim conn As New System.Data.OleDb.OleDbConnection( _
                "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & m_sNorthwind & ";")
          conn.Open()
          Dim cmd As New System.Data.OleDb.OleDbCommand()
          cmd.Connection = conn
    
    '=======================================================================
          ' Run an INSERT..INTO command on the Northwind database to append 
          ' the records from a table/query to an existing table in the Excel 
          ' workbook.
    '=======================================================================
          cmd.CommandText = "INSERT INTO [EmployeeData$] IN 'C:\ExcelData1.xls' 'Excel 8.0;'" & _
             "SELECT EmployeeID AS ID, FirstName AS Name, BirthDate FROM Employees"
          cmd.ExecuteNonQuery()
    
    '==========================================================================
          ' Run a SELECT..INTO command on the Northwind database to insert 
          ' all the records from a table/query into a new sheet in the Excel 
          ' workbook.
    '==========================================================================
          cmd.CommandText = "SELECT * INTO [Excel 8.0;Database=C:\ExcelData2.xls].[ProductSales]" & _
                          "FROM [Product Sales for 1997]"
          cmd.ExecuteNonQuery()
    
          conn.Close()
    
    End Sub
  7. Modifique o caminho para o banco de dados de Access de exemplo, Northwind, para o membro m_sNorthwind no código, se necessário.

Experimente IT

  1. No menu Exibir , aponte para Other Windows e, em seguida, clique em saída para exibir a janela de saída .
  2. Pressione F5 para compilar e executar o programa.
  3. Clique em Create_Workbook e clique em Ir . O procedimento Create_Workbook executa comandos CREATE TABLE para criar duas novas pastas de trabalho: C:\ExcelData1.xls e C:\ExcelData2.xls. ExcelData1.xls contém uma planilha (tabela) chamado EmployeeData e ExcelData2.xls contém uma planilha (tabela) chamada InventoryData. As tabelas são preenchidas com registros.

    Observação : em cada etapa restante nesse teste, abra as pastas de trabalho no Excel para examinar os resultados. Ou, clique em Retrieve_Records para exibir o conteúdo das tabelas na saída janela do Visual Studio .NET.
  4. Clique em Retrieve_Records e clique em Ir . O procedimento Retrieve_Records extrai os registros das tabelas e os exibe na janela Output , semelhante a este:
    EmployeeData:
    =============
    AAA       Andrew         12/4/1955
    
    InventoryData:
    ==============
    Cola           200   1.35
    Chips          550   0.89
  5. Clique em Add_Records e clique em Ir . A rotina Add_Records adiciona dois registros a cada tabela:
    EmployeeData:
    =============
    AAA       Andrew         12/4/1955
    CCC       Charlie        10/14/1948
    DDD       Deloris        7/19/1998
    
    InventoryData:
    ==============
    Cola           200   1.35
    Chips          550   0.89
    Bread          390   1.89
    Milk           99    2.59
  6. Clique em Update_Records e clique em Ir . A rotina Update_Records atualiza dois registros em cada pasta de trabalho:
    EmployeeData:
    =============
    AAA       Aaron          5/4/1975
    CCC       Charlie        10/14/1948
    DDD       Deloris        7/19/1998
    
    InventoryData:
    ==============
    Cola           1000  10.1
    Chips          2000  20.2
    Bread          390   1.89
    Milk           99    2.59
  7. Clique em Update_Individual_Cells e clique em Ir . A rotina Update_Individual_Cells modifica específicas células na planilha EmployeeData em ExcelData1.xls; especificamente, as células F3, G3 e I4 são atualizadas.
  8. Clique em Use_External_Source e clique em Ir . Quando você usa um INSERTINTO comando, a rotina Use_External_Source acrescenta registros da tabela Northwind 'Employees' para a planilha EmployeeData na ExcelData1.xls. E Use_External_Source usa um SELECTINTO comando para criar uma nova tabela (ou planilha) em ExcelData2.xls que contém todos os registros da tabela Northwind 'Produtos'.

    Observação : se você clicar em Use_External_Source mais de uma vez, a lista de funcionários será acrescentada várias vezes porque a chave primária não é reconhecida ou aplicada.

Formatação de célula

Se você estiver usando o ADO.NET para adicionar ou atualizar registros em uma pasta de trabalho existente, você pode aplicar formatação na pasta de trabalho que será usado com os registros novos ou atualizados de célula. Quando você atualiza um registro existente (ou linha) em uma pasta de trabalho, a formatação da célula é mantida. E quando você insere um novo registro (ou linha) em uma pasta de trabalho, o novo registro herda a formatação da linha acima dele.

O procedimento a seguir mostra como você pode usar a formatação em uma pasta de trabalho com o código de exemplo:
  1. Pressione F5 para criar e executar a amostra.
  2. No Form1, clique em Create_Workbook e clique em Ir .
  3. Inicie o Microsoft Excel e abra C:\ExcelData1.xls.
  4. Aplica um estilo de fonte em negrito para a célula A2.
  5. Aplicar um itálico, estilo, a célula B2 de sublinhado e Alinhar Centro.
  6. Aplicar um formato de data por extenso a célula C2.
  7. Salve e feche C:\ExcelData1.xls.
  8. No Form1, clique em Add_Records e clique em Ir .
  9. Abrir C:\ExcelData1.xls no Excel e observe que as duas novas linhas tem herdado a formatação da primeira linha.

Limitações

A seguir estão algumas limitações do provedor Jet OLE DB em relação ao fontes de dados do Excel:
  • Você não pode inserir fórmulas nas células usando o ADO.NET.
  • O Jet OLE DB Provider não consegue fornecer informações de chave/índice para tabelas em uma pasta de trabalho do Excel. Por esse motivo, você não pode usar o CommandBuilder para gerar automaticamente as atualizações e inserções para registros em uma pasta de trabalho do Excel.

Referências

Para obter informações adicionais, clique nos números abaixo para ler os artigos na Base de dados de Conhecimento da Microsoft:
316756  (http://support.microsoft.com/kb/316756/ ) PROBLEMA: Erro ocorre quando utiliza o ADO.NET OLEDbDataAdapter para modificar a pasta de trabalho do Excel
257819  (http://support.microsoft.com/kb/257819/EN-US/ ) Como usar o ADO com dados do Excel do Visual Basic ou VBA
306022  (http://support.microsoft.com/kb/306022/ ) Como transferir dados para uma pasta de trabalho do Excel usando o Visual Basic .NET
306023  (http://support.microsoft.com/kb/306023/ ) Como transferir dados para um Excel Workbook Using Visual translation from VPE for Csharp .NET
311731  (http://support.microsoft.com/kb/311731/ ) Como consulta e Excel exibir dados usando o ASP.NET, ADO.NET e Visual Basic .NET
306572  (http://support.microsoft.com/kb/306572/ ) Como consulta e exibir dados do Excel usando o ASP.NET, ADO.NET e Visual translation from VPE for Csharp .NET
278973  (http://support.microsoft.com/kb/278973/ ) EXEMPLO: ExcelADO demonstra como usar ADO para ler e gravar dados em pastas de trabalho do Excel


A informação contida neste artigo aplica-se a:
  • Microsoft ADO.NET (included with the .NET Framework)
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
Palavras-chave: 
kbmt kbhowtomaster KB316934 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 316934  (http://support.microsoft.com/kb/316934/en-us/ )