A transferir dados para um livro do Excel utilizando o Visual Basic .NET

Traduções de Artigos Traduções de Artigos
Artigo: 306022 - Ver produtos para os quais este artigo se aplica.
Para obter uma Microsoft Visual C# .NET versão deste artigo, consulte 306023.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Este artigo passo a passo descreve vários métodos para transferir dados para o Excel 2002 de um programa do Visual Basic. NET. Este artigo apresenta também as vantagens e desvantagens de cada método de modo a que pode seleccionar a solução mais adequado à sua situação.

Descrição geral

A técnica que seja mais frequentemente utilizada para transferir dados para um livro do Excel é a automatização . Com a automatização, é possível chamar métodos e propriedades que são específicas de tarefas do Excel. Automatização dá-lhe uma maior flexibilidade para especificar a localização dos dados no livro e a capacidade de formatar o livro e efectuar várias definições em tempo de execução.

Com a automatização, pode utilizar várias técnicas para transferir os dados:
  • Transferir dados célula a célula.
  • Transferir dados de uma matriz para um intervalo de células.
  • Transferir dados de um conjunto de registos ADO para um intervalo de células utilizando o método CopyFromRecordset .
  • Crie um objecto de tabela de consulta numa folha de cálculo Excel que contém o resultado de uma consulta numa origem de dados ODBC ou OLEDB.
  • Transferir dados para a área de transferência e, em seguida, cole o conteúdo da área de transferência para uma folha de cálculo do Excel.
Pode também utilizar vários métodos que não requerem necessariamente automatização transferir dados para o Excel. Se estiver a executar um programa do lado do servidor, este pode ser uma boa abordagem para tomar em massa do processamento de dados longe dos clientes.

Seguintes abordagens podem ser utilizadas para transferir os dados sem automatização:
  • Transferir os dados num ficheiro de texto delimitado por tabulações ou vírgulas que o Excel possa distribuir posteriormente em células numa folha de cálculo.
  • Transferir os dados para uma folha de cálculo a utilizar o ADO.NET.
  • Transferir dados XML para o Excel (versão 2002 só) para fornecer dados formatados e organizados em linhas e colunas.

Técnicas

Utilizar a automatização para transferir dados célula a célula

Com a automatização, pode transferir dados para uma célula de uma folha de cálculo num momento, da seguinte forma.
        Dim oExcel As Object
        Dim oBook As Object
        Dim oSheet As Object

        'Start a new workbook in Excel.
        oExcel = CreateObject("Excel.Application")
        oBook = oExcel.Workbooks.Add

        'Add data to cells of the first worksheet in the new workbook.
        oSheet = oBook.Worksheets(1)
        oSheet.Range("A1").Value = "Last Name"
        oSheet.Range("B1").Value = "First Name"
        oSheet.Range("A1:B1").Font.Bold = True
        oSheet.Range("A2").Value = "Doe"
        oSheet.Range("B2").Value = "John"

        'Save the Workbook and quit Excel.
        oBook.SaveAs(sSampleFolder & "Book1.xls")
        oSheet = Nothing
        oBook = Nothing
        oExcel.Quit()
        oExcel = Nothing
        GC.Collect()
				
transferir dados célula a célula pode ser uma abordagem aceitável se não existe quantidade de dados para transferir. Tem a flexibilidade para colocar dados em qualquer parte do livro e pode formatar as células condicionalmente em tempo de execução. No entanto, esta abordagem não é recomendada se tiver muitos dados transferidos para Excel para um livro. Cada objecto de intervalo que adquirir em tempo de execução resulta num pedido de interface. Por este motivo, a transferência de dados desta forma pode ser lenta.
Além disso, Microsoft Windows 95, Microsoft Windows 98 e Microsoft Windows Millennium Edition (Me) têm uma limitação de 64 KB pedidos de interface. Se tiver 64 KB ou mais dos pedidos de interface, o servidor de automatização (Excel) poderá deixar de responder ou poderá receber mensagens de erro indicando falta de memória. Para obter mais informações, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
216400Processo de acesso COM automatização podem deixar de responder aplicação cliente no Win95/98
Novamente, transferir dados célula a célula é aceitável apenas para pequenas quantidades de dados. Se tem de transferir grandes conjuntos de dados para o Excel, considere utilizar uma das abordagens são abordadas neste artigo para transferir dados em massa.

Para obter mais informações e para obter um exemplo de como automatizar o Excel com o Visual Basic. NET, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
301982Como automatizar o Microsoft Excel a partir do Visual Basic .NET

Utilizar a automatização para transferir uma matriz de dados para um intervalo numa folha de cálculo

Uma matriz de dados pode ser transferida para um intervalo de células múltiplas ao mesmo tempo, da seguinte forma.
        Dim oExcel As Object
        Dim oBook As Object
        Dim oSheet As Object

        'Start a new workbook in Excel.
        oExcel = CreateObject("Excel.Application")
        oBook = oExcel.Workbooks.Add

        'Create an array with 3 columns and 100 rows.
        Dim DataArray(99, 2) As Object
        Dim r As Integer
        For r = 0 To 99
            DataArray(r, 0) = "ORD" & Format(r + 1, "0000")
            DataArray(r, 1) = Rnd() * 1000
            DataArray(r, 2) = DataArray(r, 1) * 0.07
        Next

        'Add headers to the worksheet on row 1.
        oSheet = oBook.Worksheets(1)
        oSheet.Range("A1").Value = "Order ID"
        oSheet.Range("B1").Value = "Amount"
        oSheet.Range("C1").Value = "Tax"

        'Transfer the array to the worksheet starting at cell A2.
        oSheet.Range("A2").Resize(100, 3).Value = DataArray

        'Save the Workbook and quit Excel.
        oBook.SaveAs(sSampleFolder & "Book2.xls")
        oSheet = Nothing
        oBook = Nothing
        oExcel.Quit()
        oExcel = Nothing
        GC.Collect()
				
se transferir dados utilizando uma matriz em vez de célula a célula, pode reconhecer um ganho em desempenho enorme com uma grande quantidade de dados. Considere esta linha do código anterior, que transfere dados para 300 células na folha de cálculo.
        oSheet.Range("A2").Resize(100, 3).Value = DataArray
				
Esta linha representa dois pedidos de interface: uma para o objecto Range que devolve o método de intervalo e outra para o objecto Range que devolve o método de redimensionar . Em contrapartida, transferir dados célula a célula requer pedidos para 300 interfaces para objectos de intervalo . Sempre que possível, pode beneficiar de transferir os dados em massa e reduzir o número de pedidos de interface que fizer.

Utilizar a automatização para transferir um conjunto de registos ADO para um intervalo de folha de cálculo

Os modelos de objecto para o Excel 2000 e Excel 2002 fornecem o método CopyFromRecordset para transferir um conjunto de registos ADO para um intervalo numa folha de cálculo. O seguinte código ilustra como automatizar o Excel para transferir o conteúdo da tabela Encomendas na base de dados de exemplo Adamastor utilizando o método CopyFromRecordset .
        'Create a Recordset from all the records in the Orders table.
        Dim sNWind As String
        Dim conn As New ADODB.Connection()
        Dim rs As ADODB.Recordset
        conn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
            sNorthwind & ";")
        conn.CursorLocation = ADODB.CursorLocationEnum.adUseClient
        rs = conn.Execute("Orders", , ADODB.CommandTypeEnum.adCmdTable)

        'Create a new workbook in Excel.
        Dim oExcel As Object
        Dim oBook As Object
        Dim oSheet As Object
        oExcel = CreateObject("Excel.Application")
        oBook = oExcel.Workbooks.Add
        oSheet = oBook.Worksheets(1)

        'Transfer the field names to Row 1 of the worksheet:
        'Note: CopyFromRecordset copies only the data and not the field
        '      names, so you can transfer the fieldnames by traversing the
        '      fields collection.
        Dim n As Int32
        For n = 1 To rs.Fields.Count
            oSheet.Cells(1, n).Value = rs.Fields(n - 1).Name
        Next

        'Transfer the data to Excel.
        oSheet.Range("A2").CopyFromRecordset(rs)

        'Save the workbook and quit Excel.
        oBook.SaveAs(sSampleFolder & "Book3.xls")
        oSheet = Nothing
        oBook = Nothing
        oExcel.Quit()
        oExcel = Nothing
        GC.Collect()

        'Close the connection
        rs.Close()
        conn.Close()
				
Nota CopyFromRecordset só funciona com objectos de conjunto de registos do ADO. Não pode ser utilizado um DataSet que criar utilizando o ADO.NET com o método CopyFromRecordset . Vários exemplos nas secções que se seguem demonstram como transferir dados para o Excel com o ADO.NET.

Utilizar a automatização para criar um objecto de tabela de consulta numa folha de cálculo

Um objecto de tabela de consulta representa uma tabela baseia-se dos dados de que são devolvidos a partir de uma origem de dados externa. Enquanto automatizar o Excel, pode criar uma tabela de consulta , fornecendo uma cadeia de ligação para um OLEDB ou uma origem de dados ODBC e uma cadeia de SQL. O Excel gera o conjunto de registos e insere o conjunto de registos na folha de cálculo na localização que especificar. Utilizar objectos de tabela de consulta oferece as seguintes vantagens sobre o método CopyFromRecordset :
  • Excel processa a criação de conjunto de registos e respectivo posicionamento na folha de cálculo.
  • A consulta pode ser guardada com o objecto de tabela de consulta , de modo a que pode ser actualizado posteriormente para obter um conjunto de registos actualizado.
  • Quando uma nova tabela de consulta é adicionado à folha de cálculo, pode especificar que dados já existentes nas células da folha de cálculo ser deslocados para ajustar os novos dados (consulte a propriedade RefreshStyle para obter detalhes).
O seguinte código demonstra como automatizar o Excel 2000 ou 2002 para criar uma nova tabela de consulta numa folha de cálculo do Excel utilizando dados da base de dados de exemplo Adamastor.
        'Create a new workbook in Excel.
        Dim oExcel As Object
        Dim oBook As Object
        Dim oSheet As Object
        oExcel = CreateObject("Excel.Application")
        oBook = oExcel.Workbooks.Add
        oSheet = oBook.Worksheets(1)

        'Create the QueryTable object.
        Dim oQryTable As Object
        oQryTable = oSheet.QueryTables.Add( _
        "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
            sNorthwind & ";", oSheet.Range("A1"), _
            "Select * from Orders")
        oQryTable.RefreshStyle = 2 ' xlInsertEntireRows = 2
        oQryTable.Refresh(False)

        'Save the workbook and quit Excel.
        oBook.SaveAs(sSampleFolder & "Book4.xls")
        oQryTable = Nothing
        oSheet = Nothing
        oBook = Nothing
        oExcel.Quit()
        oExcel = Nothing
				

Utilizar a área de transferência

Pode utilizar a área de transferência para transferir dados para uma folha de cálculo. Para colar dados em várias células numa folha de cálculo, pode copiar uma cadeia na qual colunas estejam delimitadas por caracteres de tabulação e linhas estejam delimitadas por símbolos de retorno. O seguinte código ilustra como o Visual Basic .NET utiliza a área de transferência para transferir dados para o Excel.
        'Copy a string to the Clipboard.
        Dim sData As String
        sData = "FirstName" & vbTab & "LastName" & vbTab & "Birthdate" & vbCr _
            & "Bill" & vbTab & "Brown" & vbTab & "2/5/85" & vbCr _
            & "Joe" & vbTab & "Thomas" & vbTab & "1/1/91"
        System.Windows.Forms.Clipboard.SetDataObject(sData)

        'Create a workbook in Excel.
        Dim oExcel As Object
        Dim oBook As Object
        oExcel = CreateObject("Excel.Application")
        oBook = oExcel.Workbooks.Add

        'Paste the data.
        oBook.Worksheets(1).Range("A1").Select()
        oBook.Worksheets(1).Paste()

        'Save the workbook and quit Excel.
        oBook.SaveAs(sSampleFolder & "Book5.xls")
        oBook = Nothing
        oExcel.Quit()
        oExcel = Nothing
        GC.Collect()
				

Criar um ficheiro de texto delimitado que Excel possa distribuir em linhas e colunas

O Excel pode abrir ficheiros delimitados por tabulações ou ficheiros delimitados por vírgulas e analisar correctamente os dados nas células. Pode utilizar esta funcionalidade quando pretender transferir uma grande quantidade de dados para uma folha de cálculo durante a utilização pouco, caso exista, automatização. Isto pode ser uma boa abordagem para um programa cliente / servidor, uma vez que o ficheiro de texto pode ser gerado server-side. Em seguida, é possível abrir o ficheiro de texto no cliente, utilizando a automatização onde é apropriado.

O seguinte código ilustra como gerar um ficheiro de texto delimitado por tabulações a partir de dados lidos com o ADO.NET.
        'Connect to the data source.
        Dim objConn As New System.Data.OleDb.OleDbConnection( _
            "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sNorthwind & ";")
        objConn.Open()

        'Execute a command to retrieve all records from the Employees table.
        Dim objCmd As New System.Data.OleDb.OleDbCommand( _
            "Select * From Employees", objConn)
        Dim objReader As System.Data.OleDb.OleDbDataReader
        objReader = objCmd.ExecuteReader()

        'Read the records in the dataset and write select fields to the 
        'output file.
        FileOpen(1, sSampleFolder & "Book6.txt", OpenMode.Output)
        Dim i As Integer, s As String
        While objReader.Read()
            'Loop through first 6 fields and concatenate
            'each field, separated by a tab, into s variable.
            s = ""
            For i = 0 To 5
                If Not objReader.IsDBNull(i) Then
                    If i = 0 Then 'field 1 is EmployeeId
                        s = s & objReader.GetInt32(i).ToString
                    ElseIf i = 5 Then 'field 6 is BirthDate
                        s = s & objReader.GetDateTime(i)
                    Else 'field is a text field
                        s = s & objReader.GetString(i)
                    End If
                End If
                s = s & Microsoft.VisualBasic.ControlChars.Tab
            Next
            PrintLine(1, s)
        End While
        FileClose(1)

        'Close the reader and the connection.
        objReader.Close()
        objConn.Close()
				
automatização não foi utilizada no código anterior. No entanto, pode utilizar o mínimo de automatização para abrir o ficheiro de texto e guardar o ficheiro do Excel formato de livro, como se segue.
        'Create a new instance of Excel.
        Dim oExcel As Object
        oExcel = CreateObject("Excel.Application")

        'Open the text file and save it in the Excel workbook format.
        oExcel.Workbooks.OpenText(sSampleFolder & "Book6.txt", _
            , , , -4142, , True) 'xlTextQualifierNone=-4142

        oExcel.ActiveWorkbook.SaveAs(sSampleFolder & "Book6.xls", _
            -4143) 'xlWorkbookNormal = -4143

        'Quit Excel.
        oExcel.Quit()
        oExcel = Nothing
        GC.Collect()
				

Transferir dados para uma folha de cálculo utilizando ADO.NET

Pode utilizar o Microsoft Jet fornecedor de OLE DB para adicionar registos a uma tabela de um livro do Excel existente. Uma "tabela" no Excel é apenas um intervalo de células; o intervalo pode ter um nome definido. Normalmente, a primeira linha do intervalo contém os cabeçalhos (ou nomes de campos) e todas as linhas posteriores no intervalo de contêm os registos.

O seguinte código adiciona dois novos registos a uma tabela Book7.xls. Neste caso, a tabela é Folha1.
       'Establish a connection to the data source.
        Dim sConnectionString As String
        sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
            "Data Source=" & sSampleFolder & _
            "Book7.xls;Extended Properties=Excel 8.0;"
        Dim objConn As New System.Data.OleDb.OleDbConnection(sConnectionString)
        objConn.Open()

        'Add two records to the table.
        Dim objCmd As New System.Data.OleDb.OleDbCommand()
        objCmd.Connection = objConn
        objCmd.CommandText = "Insert into [Sheet1$] (FirstName, LastName)" & _
            " values ('Bill', 'Brown')"
        objCmd.ExecuteNonQuery()
        objCmd.CommandText = "Insert into [Sheet1$] (FirstName, LastName)" & _
            " values ('Joe', 'Thomas')"
        objCmd.ExecuteNonQuery()

        'Close the connection.
        objConn.Close()
				
quando adicionar registos com o ADO.NET tal como mostrado, a formatação no livro é mantida. Cada registo é adicionado a uma linha assume o formato da linha anterior. Por exemplo, os novos campos adicionados à coluna B são formatados com alinhamento à direita porque célula B1 está alinhado à direita.

Tenha em atenção que quando um registo é adicionado a uma célula ou células na folha de cálculo, substitui quaisquer dados anteriormente contidas nessas células. Por outras palavras, linhas na folha de cálculo não são "deslocadas para baixo" quando são adicionados novos registos. Tenha isto em consideração quando estruturar o esquema de dados das folhas de cálculo se pretender os inserir novos registos utilizando o ADO.NET.

Para obter mais informações sobre como utilizar ADO.NET, clique números de artigo que se seguem para visualizar os artigos na base de dados de conhecimento da Microsoft:
301075Como ligar a uma base de dados e executar um comando utilizando o ADO.NET e Visual Basic .NET
301216Como preencher um objecto de DataSet a partir de uma base de dados utilizando o Visual Basic .NET
301248Como actualizar uma base de dados de um objecto de DataSet utilizando o Visual Basic .NET
Para obter mais informações sobre como utilizar o fornecedor OLE DB Jet com origens de dados do Excel, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
278973ExcelADO demonstra como utilizar ADO para ler e escrever dados nos livros do Excel
257819Como utilizar ADO com dados do Excel a partir do Visual Basic ou VBA

Transferir dados XML (apenas no Excel 2002)

Excel 2002 podem abrir qualquer ficheiro XML que está correctamente formado. Ficheiros XML podem ser abertos directamente a partir do comando Abrir no menu ficheiro ou, programaticamente, utilizando métodos de Abrir ou OpenXML da colecção de livros . Se criar ficheiros XML para utilização no Excel, também pode criar folhas de estilos para formatar os dados.

Para obter mais informações sobre como utilizar XML no Excel 2002, clique números de artigo que se seguem para visualizar os artigos na base de dados de conhecimento da Microsoft:
307021Como a transferência de dados XML para o Microsoft Excel 2002 utilizando o Visual Basic .NET
288215Microsoft Excel 2002 e XML

Criar o projecto de Visual Basic .NET de exemplo completa

  1. Crie uma nova pasta para guardar os livros do Excel que o exemplo irá para lhe criar e, em seguida, o nome C:\Exceldata\.
  2. Siga estes passos para criar um novo livro para o exemplo escrever:
    1. Inicie um novo livro no Excel.
    2. Na Folha1 do novo livro, escreva o nome na célula A1 e Apelido na célula A2.
    3. Guarde o livro como C:\Exceldata\Book7.xls.
  3. Inicie o Visual Studio NET.. No menu ficheiro , clique em Novo e em seguida, clique em projecto . Em Projectos do Visual Basic , seleccione a Aplicação do Windows . Por predefinição, é criado o Form1.
  4. Adicione uma referência à biblioteca de objectos do Excel. Para o fazer, siga estes passos:
    1. No menu projecto , clique em Add Reference .
    2. No separador COM , localize o Microsoft Excel 10.0 Object Library e, em seguida, clique em Seleccionar .

      Nota Se que não o fez, a Microsoft recomenda que transferir e, em seguida, instale o Microsoft Office XP Primary Interop Assemblies (PIAs). Para obter mais informações sobre PIAs do Office XP, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
      328912Microsoft Office XP principais interop assemblies (PIAs) estão disponíveis para transferência
    3. No separador COM , localize Microsoft ActiveX Data Objects Library 2.7 e, em seguida, clique em Seleccionar .
    4. Clique em OK na caixa de diálogo Adicionar referências para aceitar as selecções. Se receber um pedido para gerar wrappers para as bibliotecas que seleccionou, clique em Sim .
  5. Adicione um controlo de Caixa de combinação e um controlo de botão ao Form1.
  6. Adicione o seguinte código ao Form1. sSampleFolder Const
        Const sSampleFolder = "C:\ExcelData\"
        Const sNorthwind = "C:\Program Files\Microsoft Office\Office10\Samples\Northwind.mdb"
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
          Handles MyBase.Load
            ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList
            Dim aList As String() = _
                {"Use Automation to Transfer Data Cell by Cell ", _
                 "Use Automation to Transfer an Array of Data to a Range on a Worksheet ", _
                 "Use Automation to Transfer an ADO Recordset to a Worksheet Range ", _
                 "Use Automation to Create a QueryTable on a Worksheet", _
                 "Use the Clipboard", _
                 "Create a Delimited Text File that Excel Can Parse into Rows and Columns", _
                 "Transfer Data to a Worksheet Using ADO.NET "}
            ComboBox1.Items.AddRange(aList)
            ComboBox1.SelectedIndex = 0
            Button1.Text = "Go!"
        End Sub
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
          Handles Button1.Click
            Select Case ComboBox1.SelectedIndex
                Case 0 : Automation_CellByCell()
                Case 1 : Automation_UseArray()
                Case 2 : Automation_ADORecordset()
                Case 3 : Automation_QueryTable()
                Case 4 : Use_Clipboard()
                Case 5 : Create_TextFile()
                Case 6 : Use_ADONET()
            End Select
            GC.Collect()
        End Sub
    
        Private Function Automation_CellByCell()
            Dim oExcel As Object
            Dim oBook As Object
            Dim oSheet As Object
    
            'Start a new workbook in Excel.
            oExcel = CreateObject("Excel.Application")
            oBook = oExcel.Workbooks.Add
    
            'Add data to cells of the first worksheet in the new workbook.
            oSheet = oBook.Worksheets(1)
            oSheet.Range("A1").Value = "Last Name"
            oSheet.Range("B1").Value = "First Name"
            oSheet.Range("A1:B1").Font.Bold = True
            oSheet.Range("A2").Value = "Doe"
            oSheet.Range("B2").Value = "John"
    
            'Save the workbook and quit Excel.
            oBook.SaveAs(sSampleFolder & "Book1.xls")
            oSheet = Nothing
            oBook = Nothing
            oExcel.Quit()
            oExcel = Nothing
            GC.Collect()
        End Function
    
        Private Function Automation_UseArray()
            Dim oExcel As Object
            Dim oBook As Object
            Dim oSheet As Object
    
            'Start a new workbook in Excel.
            oExcel = CreateObject("Excel.Application")
            oBook = oExcel.Workbooks.Add
    
            'Create an array with 3 columns and 100 rows.
            Dim DataArray(99, 2) As Object
            Dim r As Integer
            For r = 0 To 99
                DataArray(r, 0) = "ORD" & Format(r + 1, "0000")
                DataArray(r, 1) = Rnd() * 1000
                DataArray(r, 2) = DataArray(r, 1) * 0.07
            Next
    
            'Add headers to the worksheet on row 1.
            oSheet = oBook.Worksheets(1)
            oSheet.Range("A1").Value = "Order ID"
            oSheet.Range("B1").Value = "Amount"
            oSheet.Range("C1").Value = "Tax"
    
            'Transfer the array to the worksheet starting at cell A2.
            oSheet.Range("A2").Resize(100, 3).Value = DataArray
    
            'Save the workbook and quit Excel.
            oBook.SaveAs(sSampleFolder & "Book2.xls")
            oSheet = Nothing
            oBook = Nothing
            oExcel.Quit()
            oExcel = Nothing
            GC.Collect()
        End Function
    
        Private Function Automation_ADORecordset()
            'Create a Recordset from all the records in the Orders table.
            Dim sNWind As String
            Dim conn As New ADODB.Connection()
            Dim rs As ADODB.Recordset
            conn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
                sNorthwind & ";")
            conn.CursorLocation = ADODB.CursorLocationEnum.adUseClient
            rs = conn.Execute("Orders", , ADODB.CommandTypeEnum.adCmdTable)
    
            'Create a new workbook in Excel.
            Dim oExcel As Object
            Dim oBook As Object
            Dim oSheet As Object
            oExcel = CreateObject("Excel.Application")
            oBook = oExcel.Workbooks.Add
            oSheet = oBook.Worksheets(1)
    
            'Transfer the field names to Row 1 of the worksheet:
            'Note: CopyFromRecordset copies only the data and not the field
            '      names, so you can transfer the fieldnames by traversing the
            '      fields collection.
            Dim n As Int32
            For n = 1 To rs.Fields.Count
                oSheet.Cells(1, n).Value = rs.Fields(n - 1).Name
            Next
    
            'Transfer the data to Excel.
            oSheet.Range("A2").CopyFromRecordset(rs)
    
            'Save the workbook and quit Excel.
            oBook.SaveAs(sSampleFolder & "Book3.xls")
            oSheet = Nothing
            oBook = Nothing
            oExcel.Quit()
            oExcel = Nothing
            GC.Collect()
    
            'Close the connection.
            rs.Close()
            conn.Close()
        End Function
    
        Private Function Automation_QueryTable()
            'Create a new workbook in Excel.
            Dim oExcel As Object
            Dim oBook As Object
            Dim oSheet As Object
            oExcel = CreateObject("Excel.Application")
            oBook = oExcel.Workbooks.Add
            oSheet = oBook.Worksheets(1)
    
            'Create the QueryTable object.
            Dim oQryTable As Object
            oQryTable = oSheet.QueryTables.Add( _
            "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
                sNorthwind & ";", oSheet.Range("A1"), _
                "Select * from Orders")
            oQryTable.RefreshStyle = 2 ' xlInsertEntireRows = 2
            oQryTable.Refresh(False)
    
            'Save the workbook and quit Excel.
            oBook.SaveAs(sSampleFolder & "Book4.xls")
            oQryTable = Nothing
            oSheet = Nothing
            oBook = Nothing
            oExcel.Quit()
    
    
            oExcel = Nothing
    
        End Function
    
        Private Function Use_Clipboard()
            'Copy a string to the clipboard.
            Dim sData As String
            sData = "FirstName" & vbTab & "LastName" & vbTab & "Birthdate" & vbCr _
                & "Bill" & vbTab & "Brown" & vbTab & "2/5/85" & vbCr _
                & "Joe" & vbTab & "Thomas" & vbTab & "1/1/91"
            System.Windows.Forms.Clipboard.SetDataObject(sData)
    
            'Create a new workbook in Excel.
            Dim oExcel As Object
            Dim oBook As Object
            oExcel = CreateObject("Excel.Application")
            oBook = oExcel.Workbooks.Add
    
            'Paste the data.
            oBook.Worksheets(1).Range("A1").Select()
            oBook.Worksheets(1).Paste()
    
            'Save the workbook and quit Excel.
            oBook.SaveAs(sSampleFolder & "Book5.xls")
            oBook = Nothing
            oExcel.Quit()
            oExcel = Nothing
            GC.Collect()
        End Function
    
        Private Function Create_TextFile()
            'Connect to the data source.
            Dim objConn As New System.Data.OleDb.OleDbConnection( _
                "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sNorthwind & ";")
            objConn.Open()
    
            'Run a command to retrieve all records from the Employees table.
            Dim objCmd As New System.Data.OleDb.OleDbCommand( _
                "Select * From Employees", objConn)
            Dim objReader As System.Data.OleDb.OleDbDataReader
            objReader = objCmd.ExecuteReader()
    
            'Read the records in the dataset and write select fields to the 
            'output file.
            FileOpen(1, sSampleFolder & "Book6.txt", OpenMode.Output)
            Dim i As Integer, s As String
            While objReader.Read()
                'Loop through first 6 fields and concatenate
                'each field, separated by a tab, into s variable.
                s = ""
                For i = 0 To 5
                    If Not objReader.IsDBNull(i) Then
                        If i = 0 Then 'field 1 is EmployeeId
                            s = s & objReader.GetInt32(i).ToString
                        ElseIf i = 5 Then 'field 6 is BirthDate
                            s = s & objReader.GetDateTime(i)
                        Else 'field is a text field
                            s = s & objReader.GetString(i)
                        End If
                    End If
                    s = s & Microsoft.VisualBasic.ControlChars.Tab
                Next
                PrintLine(1, s)
            End While
            FileClose(1)
    
            'Close the reader and the connection.
            objReader.Close()
            objConn.Close()
    
            'Create a new instance of Excel.
            Dim oExcel As Object
            oExcel = CreateObject("Excel.Application")
    
            'Open the text file and save it in the Excel workbook format.
            oExcel.Workbooks.OpenText(sSampleFolder & "Book6.txt", _
                , , , -4142, , True) 'xlTextQualifierNone=-4142
    
            oExcel.ActiveWorkbook.SaveAs(sSampleFolder & "Book6.xls", _
                -4143) 'xlWorkbookNormal = -4143
    
            'Quit Excel.
            oExcel.Quit()
            oExcel = Nothing
            GC.Collect()
        End Function
    
        Private Function Use_ADONET()
    
            'Verify that the workbook to write to does exist.
            Dim sFile As String = sSampleFolder & "Book7.xls"
            If Dir(sFile) = "" Then
                MsgBox("Please create the workbook Book7.xls and try again.")
                Exit Function
            End If
    
            'Establish a connection to the data source.
            Dim sConnectionString As String
            sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                "Data Source=" & sSampleFolder & _
                "Book7.xls;Extended Properties=Excel 8.0;"
            Dim objConn As New System.Data.OleDb.OleDbConnection(sConnectionString)
            objConn.Open()
    
            'Add two records to the table named 'MyTable'.
            Dim objCmd As New System.Data.OleDb.OleDbCommand()
            objCmd.Connection = objConn
            objCmd.CommandText = "Insert into [Sheet1$] (FirstName, LastName)" & _
                " values ('Bill', 'Brown')"
            objCmd.ExecuteNonQuery()
            objCmd.CommandText = "Insert into [Sheet1$] (FirstName, LastName)" & _
                " values ('Joe', 'Thomas')"
            objCmd.ExecuteNonQuery()
    
            'Close the connection.
            objConn.Close()
        End Function
    					
    Nota Se não instalou o Office na pasta predefinida (C:\Program Files\Microsoft Office), altere a constante sNorthwind do código de exemplo para corresponder ao caminho de instalação para a base de dados Adamastor.mdb.

  7. Adicione o código seguinte à parte superior do Form1.VB.
    Imports Microsoft.Office.Interop
    					
  8. Prima F5 para compilar e executar o exemplo.

Referências

Para obter mais informações, visite o seguinte Microsoft Developer Network) Web site da MSDN:
http://msdn2.microsoft.com/en-us/library/aa188489(office.10).aspx
Para obter mais informações, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
247412Métodos para transferir dados para o Excel a partir do Visual Basic

Propriedades

Artigo: 306022 - Última revisão: 17 de janeiro de 2007 - Revisão: 6.3
A informação contida neste artigo aplica-se a:
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft ADO.NET (included with the .NET Framework)
Palavras-chave: 
kbmt kbautomation kbhowtomaster KB306022 KbMtpt
Traduçã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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 306022

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com