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:
216400
(http://support.microsoft.com/kb/216400/
)
Processo 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:
301982
(http://support.microsoft.com/kb/301982/
)
Como 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:
301075
(http://support.microsoft.com/kb/301075/
)
Como ligar a uma base de dados e executar um comando utilizando o ADO.NET e Visual Basic .NET
301216
(http://support.microsoft.com/kb/301216/
)
Como preencher um objecto de DataSet a partir de uma base de dados utilizando o Visual Basic .NET
301248
(http://support.microsoft.com/kb/301248/
)
Como 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:
278973
(http://support.microsoft.com/kb/278973/
)
ExcelADO demonstra como utilizar ADO para ler e escrever dados nos livros do Excel
257819
(http://support.microsoft.com/kb/257819/
)
Como 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:
307021
(http://support.microsoft.com/kb/307021/
)
Como a transferência de dados XML para o Microsoft Excel 2002 utilizando o Visual Basic .NET
288215
(http://support.microsoft.com/kb/288215/
)
Microsoft Excel 2002 e XML
Criar o projecto de Visual Basic .NET de exemplo completa
- Crie uma nova pasta para guardar os livros do Excel que o exemplo irá para lhe criar e, em seguida, o nome C:\Exceldata\.
- Siga estes passos para criar um novo livro para o exemplo escrever:
- Inicie um novo livro no Excel.
- Na Folha1 do novo livro, escreva o nome na célula A1 e Apelido na célula A2.
- Guarde o livro como C:\Exceldata\Book7.xls.
- 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.
- Adicione uma referência à biblioteca de objectos do Excel. Para o fazer, siga estes passos:
- No menu projecto , clique em Add Reference .
- 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: 328912
(http://support.microsoft.com/kb/328912/
)
Microsoft Office XP principais interop assemblies (PIAs) estão disponíveis para transferência
- No separador COM , localize Microsoft ActiveX Data Objects Library 2.7 e, em seguida, clique em Seleccionar .
- 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 .
- Adicione um controlo de Caixa de combinação e um controlo de botão ao Form1.
- 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.
- Adicione o código seguinte à parte superior do Form1.VB.
Imports Microsoft.Office.Interop
- Prima F5 para compilar e executar o exemplo.