Cómo transferir datos a un libro de Excel utilizando Visual Basic .NET

Seleccione idioma Seleccione idioma
Id. de artículo: 306022 - Ver los productos a los que se aplica este artículo
Para obtener una versión de Microsoft Visual C# .NET de este artículo, consulte 306023.
Expandir todo | Contraer todo

En esta página

Resumen

En este artículo paso a paso se describen varios métodos para transferir datos a Excel 2002 desde un programa de Visual Basic .NET. También se presentan las ventajas y desventajas de cada método para que pueda seleccionar la solución que mejor funcione en su situación.

Información general

La técnica que más se utiliza para transferir datos a un libro de Excel es Automatización. Con Automatización, puede llamar a métodos y propiedades específicos de las tareas de Excel. Automatización le ofrece la máxima flexibilidad para especificar la ubicación de los datos en el libro, y la posibilidad de dar formato al libro y realizar varias configuraciones en tiempo de ejecución.

Con Automatización puede utilizar varias técnicas para transferir datos:
  • Transferir los datos celda por celda.
  • Transferir los datos de una matriz a un rango de celdas.
  • Transferir los datos de un conjunto de registros ADO a un rango de celdas utilizando el método CopyFromRecordset.
  • Crear un objeto QueryTable en una hoja de cálculo de Excel que contenga el resultado de una consulta en un origen de datos de ODBC u OLEDB.
  • Transferir los datos al Portapapeles y, a continuación, pegar el contenido del Portapapeles en una hoja de cálculo de Excel.
También puede utilizar varios métodos que no requieren necesariamente Automatización para transferir los datos a Excel. Si está ejecutando un programa de servidor, éste puede ser un buen enfoque para evitar que los clientes se ocupen del proceso de los datos.

Para transferir los datos sin Automatización se pueden utilizar las soluciones siguientes:
  • Transferir los datos a un archivo de texto delimitado por caracteres de tabulación o por comas que Excel puede analizar después en las celdas de una hoja de cálculo.
  • Transferir los datos a una hoja de cálculo utilizando ADO.NET.
  • Transferir los datos XML a Excel (sólo en la versión 2002) para proporcionar datos que tengan formato y estén organizados en filas y columnas.

Técnicas

Usar Automatización para transferir datos celda por celda

Con Automatización puede transferir los datos a una hoja de cálculo de celda en celda, de la forma siguiente.
 Dim oExcel As Object Dim oBook As Object Dim oSheet As Object

        'Iniciar un nuevo libro en Excel. oExcel = CreateObject("Excel.Application") oBook = oExcel.Workbooks.Add

        'Agregar datos a las celdas de la primera hoja de cálculo del libro nuevo. oSheet = oBook.Worksheets(1) oSheet.Range("A1").Value = "Apellidos" oSheet.Range("B1").Value = "Nombre" oSheet.Range("A1:B1").Font.Bold = True oSheet.Range("A2").Value = "Ortiz" oSheet.Range("B2").Value = "Juan"

        'Guardar el libro y cerrar Excel. oBook.SaveAs(sSampleFolder & "Book1.xls") oSheet = Nothing oBook = Nothing oExcel.Quit() oExcel = Nothing GC.Collect() 
Transferir los datos celda por celda puede ser una solución aceptable si no hay muchos datos que transferir. Tiene la flexibilidad de poner los datos en cualquier lugar del libro y puede dar formato a las celdas de forma condicional en tiempo de ejecución. Sin embargo, no se recomienda esta solución si tiene muchos datos que transferir a un libro de Excel. Cada objeto Range que adquiere en tiempo de ejecución provoca una solicitud de interfaz. Por tanto, puede ser lento transferir los datos de esta manera.
Además, Microsoft Windows 95, Microsoft Windows 98 y Microsoft Windows Millennium Edition (Me) tienen una limitación de 64 KB en las solicitudes de interfaz. Si tiene 64 KB o más de solicitudes de interfaz, el servidor de Automatización (Excel) puede dejar de responder o pueden aparecer mensajes de error que indican que hay poca memoria. Para obtener más información al respecto, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
216400 La automatización COM entre procesos puede bloquear la aplicación cliente en Windows 95 o Windows 98
De nuevo, transferir los datos celda por celda sólo es aceptable si hay pocos datos. Si debe transferir grandes conjuntos de datos a Excel, considere el uso de alguna de las soluciones que se explican en este artículo para transferir datos de forma masiva.

Para obtener más información y ver un ejemplo de cómo automatizar Excel con Visual Basic .NET, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
301982 Cómo automatizar Microsoft Excel desde Visual Basic .NET

Usar Automatización para transferir una matriz de datos a un rango en una hoja de cálculo

Una matriz de datos se puede transferir al mismo tiempo a un rango de varias celdas, de la forma siguiente.
 Dim oExcel As Object Dim oBook As Object Dim oSheet As Object

        'Iniciar un nuevo libro en Excel. oExcel = CreateObject("Excel.Application") oBook = oExcel.Workbooks.Add

        'Crear una matriz con 3 columnas y 100 filas. 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

        'Agregar encabezados a la hoja de cálculo en la fila 1. oSheet = oBook.Worksheets(1) oSheet.Range("A1").Value = "Id. de pedido" oSheet.Range("B1").Value = "Importe" oSheet.Range("C1").Value = "Impuesto"

        'Transferir la matriz a la hoja de cálculo comenzando en la celda A2. oSheet.Range("A2").Resize(100, 3).Value = DataArray

        'Guardar el libro y cerrar Excel. oBook.SaveAs(sSampleFolder & "Book2.xls") oSheet = Nothing oBook = Nothing oExcel.Quit() oExcel = Nothing GC.Collect() 
Si transfiere los datos con una matriz en lugar de hacerlo celda por celda, puede obtener una enorme mejora en el rendimiento con muchos datos. Considere esta línea del código anterior, que transfiere los datos a 300 celdas en la hoja de cálculo.
 oSheet.Range("A2").Resize(100, 3).Value = DataArray 
Esta línea representa dos solicitudes de interfaz: una para el objeto Range que devuelve el método Range y otra para el objeto Range que devuelve el método Resize. Por el contrario, para transferir los datos celda por celda se requieren solicitudes para 300 interfaces a los objetos Range. Siempre que sea posible, puede beneficiarse de transferir los datos de forma masiva y reducir el número de solicitudes de interfaz que realiza.

Usar Automatización para transferir un conjunto de registros ADO a un rango de una hoja de cálculo

Los modelos de objetos para Excel 2000 y Excel 2002 proporcionan el método CopyFromRecordset para transferir un conjunto de registros ADO a un rango en una hoja de cálculo. El código siguiente ilustra cómo automatizar Excel para transferir el contenido de la tabla Orders de la base de datos de ejemplo Northwind con el método CopyFromRecordset.
 'Crear un conjunto de registros a partir de todos los registros de la tabla Orders. 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)

        'Crear un libro en 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)

        'Transferir los nombres de campo a la fila 1 de la hoja de cálculo: 'Nota: CopyFromRecordset sólo copia los datos y no los nombres '      de campo, por lo que puede transferir los nombres de campo recorriendo la '      colección de campos. Dim n As Int32 For n = 1 To rs.Fields.Count oSheet.Cells(1, n).Value = rs.Fields(n - 1).Name Next

        'Transferir los datos a Excel. oSheet.Range("A2").CopyFromRecordset(rs)

        'Guardar el libro y cerrar Excel. oBook.SaveAs(sSampleFolder & "Book3.xls") oSheet = Nothing oBook = Nothing oExcel.Quit() oExcel = Nothing GC.Collect()

        'Cerrar la conexión rs.Close() conn.Close() 
Nota: CopyFromRecordset sólo funciona con los objetos Recordset de ADO. Un DataSet que se cree con ADO.NET no se puede utilizar con el método CopyFromRecordset. En las secciones siguientes hay varios ejemplos que demuestran cómo transferir datos a Excel con ADO.NET.

Usar Automatización para crear un objeto QueryTable en una hoja de cálculo

Un objeto QueryTable representa una tabla que se genera a partir de los datos devueltos por un origen de datos externo. Mientras automatiza Excel, puede crear un objeto QueryTable proporcionando una cadena de conexión a un origen de datos OLEDB u ODBC y una cadena SQL. Excel genera el conjunto de registros y lo inserta en la hoja de cálculo en la ubicación que especifique. El uso de objetos QueryTable proporciona las ventajas siguientes con respecto al método CopyFromRecordset:
  • Excel se ocupa de la creación del conjunto de registros y su ubicación en la hoja de cálculo.
  • La consulta se puede guardar con el objeto QueryTable, de forma que se pueda actualizar posteriormente con el fin de obtener un conjunto de registros actualizado.
  • Cuando se agrega un objeto QueryTable nuevo a la hoja de cálculo, puede especificar que los datos que ya existan en las celdas de la hoja de cálculo se desplacen para ajustarse a los datos nuevos (vea la propiedad RefreshStyle para obtener detalles).
El código siguiente demuestra cómo automatizar Excel 2000 o Excel 2002 para crear un nuevo objeto QueryTable en una hoja de cálculo de Excel utilizando datos de la base de datos de ejemplo Northwind.
 'Crear un libro en 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)

        'Crear el objeto QueryTable. 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)

        'Guardar el libro y cerrar Excel. oBook.SaveAs(sSampleFolder & "Book4.xls") oQryTable = Nothing oSheet = Nothing oBook = Nothing oExcel.Quit() oExcel = Nothing 

Usar el Portapapeles

Puede utilizar el Portapapeles de Windows para transferir datos a una hoja de cálculo. Para pegar datos en varias celdas de una hoja de cálculo, puede copiar una cadena en la que las columnas estén delimitadas mediante caracteres de tabulación y las filas mediante retornos de carro. El código siguiente ilustra cómo usa Visual Basic .NET el Portapapeles para transferir datos a Excel.
 'Copiar una cadena al Portapapeles. Dim sData As String sData = "Apellidos" & vbTab & "LastName" & vbTab & "Fecha de nacimiento" & vbCr _ & "David" & vbTab & "Ruiz" & vbTab & "2/5/85" & vbCr _ & "Elena" & vbTab & "Asensio" & vbTab & "1/1/91" System.Windows.Forms.Clipboard.SetDataObject(sData)

        'Crear un libro en Excel. Dim oExcel As Object Dim oBook As Object oExcel = CreateObject("Excel.Application") oBook = oExcel.Workbooks.Add

        'Pegar los datos. oBook.Worksheets(1).Range("A1").Select() oBook.Worksheets(1).Paste()

        'Guardar el libro y cerrar Excel. oBook.SaveAs(sSampleFolder & "Book5.xls") oBook = Nothing oExcel.Quit() oExcel = Nothing GC.Collect() 

Crear un archivo de texto delimitado que Excel pueda analizar en filas y columnas

Excel puede abrir los archivos delimitados por caracteres de tabulación o por comas y analizar correctamente los datos de las celdas. Puede utilizar esta característica cuando desee transferir muchos datos a una hoja de cálculo utilizando muy poco, o nada, Automatización. Ésta puede ser una buena solución para un programa cliente-servidor, ya que el archivo de texto se puede generar en el servidor. Puede abrir a continuación el archivo de texto en el cliente, utilizando Automatización donde corresponda.

El código siguiente ilustra cómo generar un archivo de texto delimitado por caracteres de tabulación a partir de datos que se leen con ADO.NET.
 'Conectar con el origen de datos. Dim objConn As New System.Data.OleDb.OleDbConnection( _ "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sNorthwind & ";") objConn.Open()

        'Ejecutar un comando para recuperar todos los registros de la tabla Employees. Dim objCmd As New System.Data.OleDb.OleDbCommand( _ "Select * From Employees", objConn) Dim objReader As System.Data.OleDb.OleDbDataReader objReader = objCmd.ExecuteReader()

        'Leer los registros del conjunto de datos y escribir los campos seleccionados en el 'archivo de resultados. FileOpen(1, sSampleFolder & "Book6.txt", OpenMode.Output) Dim i As Integer, s As String While objReader.Read() 'Recorrer los seis primeros campos y concatenar 'cada campo, separado por un carácter de tabulación, en la variable s. s = "" For i = 0 To 5 If Not objReader.IsDBNull(i) Then If i = 0 Then 'el campo 1 es EmployeeId s = s & objReader.GetInt32(i).ToString ElseIf i = 5 Then 'el campo 6 es BirthDate s = s & objReader.GetDateTime(i) Else 'se trata de un campo de texto s = s & objReader.GetString(i) End If End If s = s & Microsoft.VisualBasic.ControlChars.Tab Next PrintLine(1, s) End While FileClose(1)

        'Cerrar el lector y la conexión. objReader.Close() objConn.Close() 
En el código anterior no se usó Automatización. Sin embargo, puede utilizar lo mínimo posible Automatización para abrir el archivo de texto y guardarlo en formato de libro de Excel, de la forma siguiente.
 'Crear una nueva instancia de Excel. Dim oExcel As Object oExcel = CreateObject("Excel.Application")

        'Abrir el archivo de texto y guardarlo en formato de libro de Excel. oExcel.Workbooks.OpenText(sSampleFolder & "Book6.txt", _ , , , -4142, , True) 'xlTextQualifierNone=-4142

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

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

Transferir datos a una hoja de cálculo con ADO.NET

Puede utilizar el proveedor de Microsoft Jet OLE DB para agregar registros a una tabla en un libro de Excel existente. Una "tabla" en Excel es simplemente un rango de celdas; el rango puede tener un nombre definido. Normalmente, la primera fila del rango contiene los encabezados (o nombres de campo) y todas las filas posteriores del rango contienen los registros.

El código siguiente agrega dos registros nuevos a una tabla en Book7.xls. La tabla en este caso es Sheet1.
 'Establecer una conexión con el origen de datos. 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()

        'Agregar dos registros a la tabla. Dim objCmd As New System.Data.OleDb.OleDbCommand() objCmd.Connection = objConn objCmd.CommandText = "Insert into [Sheet1$] (FirstName, LastName)" & _ " values ('David', 'Ruiz')" objCmd.ExecuteNonQuery() objCmd.CommandText = "Insert into [Sheet1$] (FirstName, LastName)" & _ " values ('Elena', 'Asensio')" objCmd.ExecuteNonQuery()

        'Cerrar la conexión. objConn.Close() 
Al agregar registros con ADO.NET como se ha explicado, se mantiene el formato del libro. Cada registro agregado a una fila toma prestado el formato de la fila anterior a él. Por ejemplo, los campos nuevos que se agregan a la columna B están alineados a la derecha porque la celda B1 está alineada a la derecha.

Tenga en cuenta que cuando se agrega un registro a una celda o celdas de la hoja de cálculo, sobrescribe cualquier dato que las celdas contuvieran previamente. Es decir, las filas de la hoja de cálculo no "se empujan hacia abajo" cuando se agregan registros nuevos. Tenga presente esto cuando determine el diseño de los datos de las hojas de cálculo si piensa insertar nuevos registros con ADO.NET.

Para obtener más información acerca de cómo usar ADO.NET, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base.
301075 Cómo conectarse a una base de datos y ejecutar un comando mediante ADO.NET y Visual Basic .NET
301216 Cómo llenar un objeto DataSet desde una base de datos mediante Visual Basic .NET
301248 Cómo actualizar una base de datos a partir de un objeto DataSet mediante Visual Basic .NET
Para obtener más información acerca de cómo utilizar el proveedor de OLE DB Jet con orígenes de datos de Excel, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
278973 ExcelADO muestra cómo usar ADO para leer y escribir datos en libros de Excel
257819 Cómo usar ADO con datos de Excel desde Visual Basic o desde VBA

Transferir datos XML (sólo en Excel 2002)

Excel 2002 puede abrir cualquier archivo XML que tenga un formato adecuado. Los archivos XML se pueden abrir directamente desde el comando Abrir en el menú Archivo o mediante programación utilizando los métodos Open u OpenXML de la colección Workbooks. Si crea archivos XML para usarlos en Excel, también puede crear hojas de estilos para dar formato a los datos.

Para obtener más información acerca de cómo usar XML con Excel 2002, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:
307021 Cómo transferir datos XML a Microsoft Excel 2002 mediante Visual Basic .NET
288215 Microsoft Excel 2002 y XML

Crear el proyecto de ejemplo completo de Visual Basic .NET

  1. Cree una nueva carpeta para contener los libros de Excel que se crearán en el ejemplo y, a continuación, asigne a la carpeta el nombre C:\Exceldata\.
  2. Siga estos pasos para crear un libro nuevo para que se escriba en él en el ejemplo:
    1. Inicie un nuevo libro en Excel.
    2. En la hoja 1 del nuevo libro, escriba Nombre en la celda A1 y Apellidos en la celda A2.
    3. Guarde el libro como C:\Exceldata\Book7.xls.
  3. Inicie Visual Studio .NET En el menú Archivo, haga clic en Nuevo y, después, haga clic en Proyecto. En Proyectos de Visual Basic, seleccione Aplicación para Windows. De forma predeterminada, se crea Form1.
  4. Agregue una referencia a la biblioteca de objetos de Excel. Para ello, siga estos pasos:
    1. En el menú Proyecto, haga clic en Agregar referencia.
    2. En la ficha COM, busque Biblioteca de objetos de Microsoft Excel 10.0 y haga clic en Seleccionar.

      Nota: si aún no lo ha hecho, Microsoft recomienda que descargue e instale los ensamblados de interoperabilidad primaria (PIA) de Microsoft Office XP. Para obtener más información acerca de los PIA de Office XP, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
      328912 Hay disponibles ensamblados de interoperabilidad primarios (PIA) de Microsoft Office XP para descargar
    3. En la ficha COM, busque Biblioteca de Microsoft ActiveX Data Objects 2.7 y haga clic en Seleccionar.
    4. Haga clic en Aceptar en el cuadro de diálogo Agregar referencia para aceptar sus selecciones. Si recibe un mensaje para generar contenedores para las bibliotecas seleccionadas, haga clic en .
  5. Agregue un control Combo Box y un control Button a Form1.
  6. Agregue el código siguiente a Form1.
     Const sSampleFolder = "C:\ExcelData\" Const sNorthwind = "C:\Archivos de programa\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() = _ {"Usar Automatización para transferir datos celda por celda ", _ "Usar Automatización para transferir una matriz de datos a un rango en una hoja de cálculo ", _ "Usar Automatización para transferir un conjunto de registros ADO a un rango de una hoja de cálculo ", _ "Usar Automatización para crear un objeto QueryTable en una hoja de cálculo", _ "Usar el Portapapeles", _ "Crear un archivo de texto delimitado que Excel pueda analizar en filas y columnas", _ "Transferir datos a una hoja de cálculo utilizando ADO.NET "} ComboBox1.Items.AddRange(aList) ComboBox1.SelectedIndex = 0 Button1.Text = "Adelante" 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
    
            'Iniciar un nuevo libro en Excel. oExcel = CreateObject("Excel.Application") oBook = oExcel.Workbooks.Add
    
            'Agregar datos a las celdas de la primera hoja de cálculo del libro nuevo. oSheet = oBook.Worksheets(1) oSheet.Range("A1").Value = "Apellidos" oSheet.Range("B1").Value = "Nombre" oSheet.Range("A1:B1").Font.Bold = True oSheet.Range("A2").Value = "Ortiz" oSheet.Range("B2").Value = "Juan"
    
            'Guardar el libro y cerrar 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
    
            'Iniciar un nuevo libro en Excel. oExcel = CreateObject("Excel.Application") oBook = oExcel.Workbooks.Add
    
            'Crear una matriz con 3 columnas y 100 filas. 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
    
            'Agregar encabezados a la hoja de cálculo en la fila 1. oSheet = oBook.Worksheets(1) oSheet.Range("A1").Value = "Id. de pedido" oSheet.Range("B1").Value = "Importe" oSheet.Range("C1").Value = "Impuesto"
    
            'Transferir la matriz a la hoja de cálculo comenzando en la celda A2. oSheet.Range("A2").Resize(100, 3).Value = DataArray
    
            'Guardar el libro y cerrar Excel. oBook.SaveAs(sSampleFolder & "Book2.xls") oSheet = Nothing oBook = Nothing oExcel.Quit() oExcel = Nothing GC.Collect() End Function
    
        Private Function Automation_ADORecordset() 'Crear un conjunto de registros a partir de todos los registros de la tabla Orders. 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)
    
            'Crear un libro en 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)
    
            'Transferir los nombres de campo a la fila 1 de la hoja de cálculo: 'Nota: CopyFromRecordset sólo copia los datos y no los nombres '      de campo, por lo que puede transferir los nombres de campo recorriendo la '      colección de campos. Dim n As Int32 For n = 1 To rs.Fields.Count oSheet.Cells(1, n).Value = rs.Fields(n - 1).Name Next
    
            'Transferir los datos a Excel. oSheet.Range("A2").CopyFromRecordset(rs)
    
            'Guardar el libro y cerrar Excel. oBook.SaveAs(sSampleFolder & "Book3.xls") oSheet = Nothing oBook = Nothing oExcel.Quit() oExcel = Nothing GC.Collect()
    
            'Cerrar la conexión. rs.Close() conn.Close() End Function
    
        Private Function Automation_QueryTable() 'Crear un libro en 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)
    
            'Crear el objeto QueryTable. 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)
    
            'Guardar el libro y cerrar Excel. oBook.SaveAs(sSampleFolder & "Book4.xls") oQryTable = Nothing oSheet = Nothing oBook = Nothing oExcel.Quit()
    
    
            oExcel = Nothing
    
        End Function
    
        Private Function Use_Clipboard() 'Copiar una cadena al Portapapeles. Dim sData As String sData = "Apellidos" & vbTab & "LastName" & vbTab & "Fecha de nacimiento" & vbCr _ & "David" & vbTab & "Ruiz" & vbTab & "2/5/85" & vbCr _ & "Elena" & vbTab & "Asensio" & vbTab & "1/1/91" System.Windows.Forms.Clipboard.SetDataObject(sData)
    
            'Crear un libro en Excel. Dim oExcel As Object Dim oBook As Object oExcel = CreateObject("Excel.Application") oBook = oExcel.Workbooks.Add
    
            'Pegar los datos. oBook.Worksheets(1).Range("A1").Select() oBook.Worksheets(1).Paste()
    
            'Guardar el libro y cerrar Excel. oBook.SaveAs(sSampleFolder & "Book5.xls") oBook = Nothing oExcel.Quit() oExcel = Nothing GC.Collect() End Function
    
        Private Function Create_TextFile() 'Conectar con el origen de datos. Dim objConn As New System.Data.OleDb.OleDbConnection( _ "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sNorthwind & ";") objConn.Open()
    
            'Ejecutar un comando para recuperar todos los registros de la tabla Employees. Dim objCmd As New System.Data.OleDb.OleDbCommand( _ "Select * From Employees", objConn) Dim objReader As System.Data.OleDb.OleDbDataReader objReader = objCmd.ExecuteReader()
    
            'Leer los registros del conjunto de datos y escribir los campos seleccionados en el 'archivo de resultados. FileOpen(1, sSampleFolder & "Book6.txt", OpenMode.Output) Dim i As Integer, s As String While objReader.Read() 'Recorrer los seis primeros campos y concatenar 'cada campo, separado por un carácter de tabulación, en la variable s. s = "" For i = 0 To 5 If Not objReader.IsDBNull(i) Then If i = 0 Then 'el campo 1 es EmployeeId s = s & objReader.GetInt32(i).ToString ElseIf i = 5 Then 'el campo 6 es BirthDate s = s & objReader.GetDateTime(i) Else 'se trata de un campo de texto s = s & objReader.GetString(i) End If End If s = s & Microsoft.VisualBasic.ControlChars.Tab Next PrintLine(1, s) End While FileClose(1)
    
            'Cerrar el lector y la conexión. objReader.Close() objConn.Close()
    
            'Crear una nueva instancia de Excel. Dim oExcel As Object oExcel = CreateObject("Excel.Application")
    
            'Abrir el archivo de texto y guardarlo en formato de libro de Excel. oExcel.Workbooks.OpenText(sSampleFolder & "Book6.txt", _ , , , -4142, , True) 'xlTextQualifierNone=-4142
    
            oExcel.ActiveWorkbook.SaveAs(sSampleFolder & "Book6.xls", _ -4143) 'xlWorkbookNormal = -4143
    
            'Cerrar Excel. oExcel.Quit() oExcel = Nothing GC.Collect() End Function
    
        Private Function Use_ADONET()
    
            'Comprobar que el libro en el que se va a escribir existe. Dim sFile As String = sSampleFolder & "Book7.xls" If Dir(sFile) = "" Then MsgBox("Cree el libro Book7.xls y vuelva a intentarlo.") Exit Function End If
    
            'Establecer una conexión con el origen de datos. 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()
    
            'Agregar dos registros a la tabla denominada 'MyTable'. Dim objCmd As New System.Data.OleDb.OleDbCommand() objCmd.Connection = objConn objCmd.CommandText = "Insert into [Sheet1$] (FirstName, LastName)" & _ " values ('David', 'Ruiz')" objCmd.ExecuteNonQuery() objCmd.CommandText = "Insert into [Sheet1$] (FirstName, LastName)" & _ " values ('Elena', 'Asensio')" objCmd.ExecuteNonQuery()
    
            'Cerrar la conexión. objConn.Close() End Function 
    Nota: si no instaló Office en la carpeta predeterminada (C:\Archivos de programa\Microsoft Office), cambie la constante sNorthwind del ejemplo de código de manera que coincida con la ruta de acceso de instalación de Northwind.mdb.

  7. Agregue el código siguiente al principio de Form1.vb.
     Imports Microsoft.Office.Interop 
  8. Presione F5 para generar el ejemplo y, a continuación, ejecútelo.

Referencias

Para obtener más información al respecto, visite el siguiente sitio Web de Microsoft Developer Network (MSDN):
http://msdn2.microsoft.com/en-us/library/aa188489(office.10).aspx
Para obtener más información al respecto, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
247412 Métodos para transferir datos a Excel desde Visual Basic

Propiedades

Id. de artículo: 306022 - Última revisión: miércoles, 17 de enero de 2007 - Versión: 6.1
La información de este artículo se refiere a:
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft ADO.NET (included with the .NET Framework)
Palabras clave: 
kbhowtomaster kbautomation KB306022

Enviar comentarios

 

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