Sei sulla pagina 1di 14

La solucin que se usa con ms frecuencia para transferir datos a un libro de Excel es la automatizacin.

La automatizacin le da la mayor flexibilidad para especificar la ubicacin de los datos en un libro adems de la capacidad de dar formato al libro y realizar diversas configuraciones en tiempo de ejecucin. Con la automatizacin, puede utilizar varias soluciones para transferir los 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 mtodo CopyFromRecordset Crear una QueryTable en una hoja de clculo de Excel que contenga el resultado de una consulta de un origen de datos ODBC u OLEDB Transferir los datos al Portapapeles y, a continuacin, pegar el contenido del Portapapeles en una hoja de clculo de Excel

Tambin hay mtodos que puede utilizar para transferir datos a Excel que no requieren necesariamente la automatizacin. Si ejecuta un servidor de aplicaciones, sta puede ser una solucin apropiada para evitar a los clientes la mayor parte del procesamiento de los datos. Los mtodos siguientes se pueden utilizar para transferir los datos sin la automatizacin:

Transferir los datos a un archivo de texto delimitado por comas o tabuladores que Excel puede analizar despus en las celdas de una hoja de clculo Transferir los datos a una hoja de clculo con ADO Transferir los datos a Excel con Intercambio dinmico de datos (DDE)

Las secciones siguientes proporcionan ms detalles de cada una de estas soluciones. Nota: cuando utiliza Microsoft Office Excel 2007, puede utilizar el nuevo formato de archivo de libro (*.xlsx) de Excel 2007 cuando guarda los libros. Para ello, busque la lnea siguiente de cdigo en los ejemplos de cdigo siguientes: oBook.SaveAs "C:\Book1.xls" Reemplace este cdigo con la lnea siguiente: oBook.SaveAs "C:\Book1.xlsx" Adems, la base de datos Neptuno (Northwind) no est incluida de forma predeterminada en Office 2007. Sin embargo, puede descargarla desde Microsoft Office Online. Utilice la automatizacin para transferir los datos celda por celda Con la automatizacin, puede transferir los datos a una hoja de clculo celda por celda: Dim oExcel As Object

Dim oBook As Object Dim oSheet As Object

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

'Add data to cells of the first worksheet in the new workbook Set 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 "C:\Book1.xls" oExcel.Quit Transferir los datos celda por celda puede ser una solucin totalmente aceptable si la cantidad de datos es pequea. Tiene la flexibilidad de colocar los datos en cualquier parte del libro y puede dar formato a las celdas de modo condicional en tiempo de ejecucin. Sin embargo, esta solucin no se recomienda si tiene una cantidad grande de datos que transferir a un libro de Excel. Cada objeto Range que adquiere en tiempo de ejecucin provoca una solicitud a la interfaz, por lo que transferir los datos de esta manera puede ser lento. Adems, Microsoft Windows 95 y Windows 98 tienen una limitacin de 64 KB en las solicitudes a la interfaz. Si alcanza o sobrepasa este lmite de 64 KB en las solicitudes a la interfaz, el servidor de automatizacin (Excel) podra dejar de responder o podra recibir errores que indican que queda poca memoria. Esta limitacin de Windows 95 y Windows 98 se explica en el artculo de Knowledge Base siguiente: 216400 La automatizacin COM entre procesos puede bloquear la aplicacin de cliente en Windows 95 o Windows 98

Una vez ms, transferir los datos celda por celda slo es aceptable con cantidades pequeas de datos. Si necesita transferir a Excel conjuntos de datos grandes, debera considerar una de las soluciones que se presentan ms adelante. Para obtener ms cdigo de ejemplo para la automatizacin de Excel, consulte el artculo siguiente en Microsoft Knowledge Base: 219151 Cmo automatizar Microsoft Excel desde Visual Basic Utilizar la automatizacin para transferir una matriz de datos a un rango en una hoja de clculo Una matriz de datos se puede transferir a un rango de varias celdas a la vez: Dim oExcel As Object Dim oBook As Object Dim oSheet As Object

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

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

'Add headers to the worksheet on row 1 Set oSheet = oBook.Worksheets(1) oSheet.Range("A1:C1").Value = Array("Order ID", "Amount", "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 "C:\Book1.xls" oExcel.Quit Si transfiere los datos con una matriz en lugar de celda por celda, puede conseguir un gran aumento en el rendimiento con una cantidad grande de datos. Considere esta lnea del cdigo anterior que transfiere los datos a 300 celdas de la hoja de clculo: oSheet.Range("A2").Resize(100, 3).Value = DataArray Esta lnea representa dos solicitudes a la interfaz (una para el objeto Range que devuelve el mtodo Range y otra para el objeto Range que devuelve el mtodo Resize). Por otro lado, al transferir los datos celda por celda, se requeriran solicitudes para 300 interfaces a los objetos Range. Siempre que sea posible, puede beneficiarse de transferir de forma masiva los datos y reducir el nmero de solicitudes de la interfaz que realiza. Usar la automatizacin para transferir un conjunto de registros ADO a un rango de la hoja de clculo Excel 2000 introdujo el mtodo CopyFromRecordset que permite transferir un conjunto de registros ADO (o DAO) a un rango en una hoja de clculo. El cdigo siguiente muestra cmo podra automatizar Excel 2000, Excel 2002 u Office Excel 2003, y transferir el contenido de la tabla Orders de la base de datos Neptuno de ejemplo con el mtodo 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 sNWind = _ "C:\Program Files\Microsoft Office\Office\Samples\Northwind.mdb" conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _ sNWind & ";" conn.CursorLocation = adUseClient

Set rs = conn.Execute("Orders", , adCmdTable)

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

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

'Save the Workbook and Quit Excel oBook.SaveAs "C:\Book1.xls" oExcel.Quit

'Close the connection rs.Close conn.Close Nota: si utiliza la versin de Office 2007 de la base de datos Neptuno, debe reemplazar la lnea siguiente de cdigo en el ejemplo: conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _ sNWind & ";" Reemplace esta lnea de cdigo con la lnea siguiente: conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _ sNWind & ";" Excel 97 tambin proporciona un mtodo CopyFromRecordset pero slo puede utilizarlo con un conjunto de registros DAO.CopyFromRecordset con Excel 97 no admite ADO.

Para obtener ms informacin acerca de cmo usar ADO y el mtodo CopyFromRecordset, vea el siguiente artculo de Microsoft Knowledge Base: 246335 Cmo transferir datos desde un conjunto de registros ADO a Excel con Automatizacin Usar la automatizacin para crear QueryTable en una hoja de clculo Un objeto QueryTable representa una tabla generada a partir de los datos devueltos desde un origen de datos externo. Al automatizar Microsoft Excel, puede crear una QueryTable simplemente proporcionando una cadena de conexin a un origen de datos OLEDB u ODBC junto con una cadena de SQL. Excel asume la responsabilidad de generar el conjunto de registros e insertarlo en la hoja de clculo en la ubicacin que se especifique. El uso de QueryTables ofrece varias ventajas sobre el mtodo CopyFromRecordset:

Excel controla la creacin del conjunto de registros y su colocacin en la hoja de clculo. La consulta se puede guardar con la QueryTable para que se pueda actualizar en un momento posterior con el fin de obtener un conjunto de registros actualizado. Cuando se agrega una nueva QueryTable a la hoja de clculo, puede especificar que los datos que ya existen en las celdas de la hoja de clculo se desplacen para alojar los nuevos datos (vea la propiedad RefreshStyle para obtener detalles).

El cdigo siguiente demuestra cmo podra automatizar Excel 2000, Excel 2002 u Office Excel 2003 para crear una nuevaQueryTable en una hoja de clculo de Excel utilizando los datos de la base de datos Neptuno de ejemplo: 'Create a new workbook in Excel Dim oExcel As Object Dim oBook As Object Dim oSheet As Object Set oExcel = CreateObject("Excel.Application") Set oBook = oExcel.Workbooks.Add Set oSheet = oBook.Worksheets(1)

'Create the QueryTable Dim sNWind As String sNWind = _ "C:\Program Files\Microsoft Office\Office\Samples\Northwind.mdb"

Dim oQryTable As Object Set oQryTable = oSheet.QueryTables.Add( _ "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _ sNWind & ";", oSheet.Range("A1"), "Select * from Orders") oQryTable.RefreshStyle = xlInsertEntireRows oQryTable.Refresh False

'Save the Workbook and Quit Excel oBook.SaveAs "C:\Book1.xls" oExcel.Quit Usar el Portapapeles El Portapapeles de Windows tambin se puede utilizar como mecanismo para transferir datos a una hoja de clculo. Para pegar los datos en varias celdas de una hoja de clculo, puede copiar una cadena en la que las columnas se delimiten mediante caracteres de tabulacin y las filas se delimiten con retornos de carro. El cdigo siguiente demuestra el modo en que Visual Basic puede utilizar su objeto Clipboard para transferir datos a 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" Clipboard.Clear

Clipboard.SetText sData

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

Set 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 "C:\Book1.xls" oExcel.Quit Crear un archivo de texto delimitado que Excel pueda analizar en las filas y columnas Excel puede abrir los archivos delimitados por tabuladores o comas, y analizar correctamente los datos de las celdas. Puede aprovechar esta caracterstica cuando desee transferir una cantidad grande de datos a una hoja de clculo con algo de automatizacin, si es necesario. sta podra ser una solucin adecuada para una aplicacin cliente-servidor porque el archivo de texto se puede generar en el servidor. Puede abrir a continuacin el archivo de texto en el cliente, utilizando la automatizacin siempre que resulte apropiada. El cdigo siguiente muestra cmo puede crear un archivo de texto delimitado por comas a partir de un conjunto de registros ADO: '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 Dim sData As String sNWind = _ "C:\Program Files\Microsoft Office\Office\Samples\Northwind.mdb" conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _ sNWind & ";" conn.CursorLocation = adUseClient Set rs = conn.Execute("Orders", , adCmdTable)

'Save the recordset as a tab-delimited file sData = rs.GetString(adClipString, , vbTab, vbCr, vbNullString) Open "C:\Test.txt" For Output As #1 Print #1, sData Close #1

'Close the connection rs.Close conn.Close

'Open the new text file in Excel Shell "C:\Program Files\Microsoft Office\Office\Excel.exe " & _ Chr(34) & "C:\Test.txt" & Chr(34), vbMaximizedFocus Nota: si utiliza la versin de Office 2007 de la base de datos Neptuno, debe reemplazar la lnea siguiente de cdigo en el ejemplo de cdigo: conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _ sNWind & ";" Reemplace esta lnea de cdigo con la lnea siguiente: conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _ sNWind & ";" Si el archivo de texto tiene la extensin .csv, Excel lo abre sin mostrar el Asistente para importar texto y supone automticamente que el archivo est separado por comas. De igual forma, si el archivo tiene la extensin .txt, Excel lo analiza automticamente usando tabuladores como delimitadores. En el ejemplo de cdigo anterior, Excel se inici con la instruccin Shell y el nombre del archivo se utiliz como argumento de la lnea de comandos. En el ejemplo anterior no se us automatizacin. Sin embargo, si lo desea, podra utilizar una cantidad mnima de automatizacin para abrir el archivo de texto y guardarlo en el formato de libro de Excel: 'Create a new instance of Excel

Dim oExcel As Object Dim oBook As Object Dim oSheet As Object Set oExcel = CreateObject("Excel.Application")

'Open the text file Set oBook = oExcel.Workbooks.Open("C:\Test.txt")

'Save as Excel workbook and Quit Excel oBook.SaveAs "C:\Book1.xls", xlWorkbookNormal oExcel.Quit Para obtener ms informacin acerca de cmo usar la E/S de archivos desde una aplicacin de Visual Basic, vea el siguiente artculo en Microsoft Knowledge Base: 172267 RECEDIT.VBP muestra el archivo E/S en Visual Basic Transferir los datos a una hoja de clculo con ADO Con el Proveedor OLE DB de Microsoft Jet, puede agregar registros a una tabla en un libro de Excel existente. Una "tabla" de Excel es simplemente un rango con un nombre definido. La primera fila del rango debe contener los encabezados (o nombres de campo) y todas las filas subsiguientes contienen los registros. Los pasos siguientes muestran cmo puede crear un libro con una tabla vaca denominada MyTable. Excel 97, Excel 2000 y Excel 2003 1. Inicie un nuevo libro en Excel. 2. Agregue los encabezados siguientes a las celdas A1:B1 de Sheet1: A1: FirstName B1: LastName 3. D formato a la celda B1 como alineada a la derecha. 4. Seleccione A1:B1. 5. En el men Insertar, elija Nombres y, a continuacin, seleccione Definir. Escriba el nombre MyTable y haga clic enAceptar. 6. Guarde el nuevo libro como C:\Book1.xls y cierre Excel. Para agregar registros a MyTable con ADO, puede usar cdigo similar al siguiente:

'Create a new connection object for Book1.xls Dim conn As New ADODB.Connection conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\Book1.xls;Extended Properties=Excel 8.0;" conn.Execute "Insert into MyTable (FirstName, LastName)" & _ " values ('Bill', 'Brown')" conn.Execute "Insert into MyTable (FirstName, LastName)" & _ " values ('Joe', 'Thomas')" conn.Close Excel 2007 1. En Excel 2007, inicie un libro nuevo. 2. Agregue los encabezados siguientes a las celdas A1:B1 de Sheet1: A1: FirstName B1: LastName 3. D formato a la celda B1 como alineada a la derecha. 4. Seleccione A1:B1. 5. En la Cinta, haga clic en la ficha Frmulas y, a continuacin, haga clic Definir el nombre. Escriba el nombre MyTable y, despus, haga clic en Aceptar. 6. Guarde el nuevo libro como C:\Book1.xlsx y cierre Excel. Para agregar registros a la tabla MyTable con ADO, utilice cdigo parecido al ejemplo de cdigo siguiente. 'Create a new connection object for Book1.xls Dim conn As New ADODB.Connection conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _ "Data Source=C:\Book1.xlsx;Extended Properties=Excel 12.0;" conn.Execute "Insert into MyTable (FirstName, LastName)" & _ " values ('Scott', 'Brown')" conn.Execute "Insert into MyTable (FirstName, LastName)" & _ " values ('Jane', 'Dow')"

conn.Close Al agregar los registros a la tabla de esta manera, se mantiene el formato del libro. En el ejemplo anterior, se da formato a los nuevos campos agregados a la columna B con alineacin a la derecha. Cada registro que se agrega a una fila toma prestado el formato de la fila que est por encima de l. Debera tener en cuenta que cuando un registro se agrega a una celda o celdas de la hoja de clculo, sobrescribe cualquier dato que est en esas celdas; en otros trminos, las filas de la hoja de clculo no se "empujan hacia abajo" cuando se agregan registros nuevos. Debera tener presente esto al disear la disposicin de los datos de las hojas de clculo. Nota: el mtodo para actualizar los datos de una hoja de clculo de Excel con ADO o con DAO no funciona en un entorno de Visual Basic para Aplicaciones dentro de Access despus de instalar el Service Pack 2 (SP2) de Office 2003 o despus de instalar la actualizacin para Access 2002 que se incluye en el artculo 904018 de Microsoft Knowledge Base. El mtodo funciona bien en el entorno de Visual Basic para Aplicaciones desde otras aplicaciones de Office, como Word, Excel y Outlook. Para obtener ms informacin al respecto, haga clic en los nmeros de artculo siguientes para verlos en Microsoft Knowledge Base: 904953 No puede cambiar, agregar o eliminar datos en las tablas que estn vinculadas a un libro de Excel en Office Access 2003 o en Access 2002 904018 Descripcin de la actualizacin para Access 2002: 18 de octubre de 2005

Para obtener informacin adicional acerca de cmo usar ADO para tener acceso a un libro de Excel, vea los siguientes artculos de Microsoft Knowledge Base: 195951 CMO: Utilizar ADO desde ASP para realizar consultas y actualizaciones en Excel Usar DDE para transferir datos a Excel COM es una alternativa a la automatizacin como medio para comunicarse con Excel y transferir datos; sin embargo, con la llegada de la automatizacin y COM, DDE ya no es el mejor mtodo para comunicarse con otras aplicaciones y slo se debera utilizar cuando no haya ninguna otra solucin disponible. Para transferir datos a Excel con DDE, puede:

Usar el mtodo LinkPoke para escribir datos en un rango de celdas concreto O bien

Utilice el mtodo LinkExecute para enviar los comandos que Excel vaya a ejecutar.

El ejemplo de cdigo siguiente muestra cmo establecer una conversacin DDE con Excel para que pueda escribir datos en las celdas de una hoja de clculo y ejecutar comandos. Usando

este ejemplo, para que una conversacin DDE se establezca correctamente en LinkTopic Excel|MyBook.xls, un libro con el nombre MyBook.xls ya debe estar abierto en una instancia en ejecucin de Excel. Nota: cuando utiliza Office Excel 2007, puede utilizar el nuevo formato de archivo *.xlsx para guardar los libros. Asegrese de que actualiza el nombre de archivo en el ejemplo de cdigo siguiente. Nota: en este ejemplo, Text1 representa un control TextBox de un formulario de Visual Basic: 'Initiate a DDE communication with Excel Text1.LinkMode = 0 Text1.LinkTopic = "Excel|MyBook.xls" Text1.LinkItem = "R1C1:R2C3" Text1.LinkMode = 1

'Poke the text in Text1 to the R1C1:R2C3 in MyBook.xls Text1.Text = "one" & vbTab & "two" & vbTab & "three" & vbCr & _ "four" & vbTab & "five" & vbTab & "six" Text1.LinkPoke

'Execute commands to select cell A1 (same as R1C1) and change the font 'format Text1.LinkExecute "[SELECT(""R1C1"")]" Text1.LinkExecute "[FONT.PROPERTIES(""Times New Roman"",""Bold"",10)]"

'Terminate the DDE communication Text1.LinkMode = 0 Al utilizar LinkPoke con Excel, especifica el rango en notacin fila-columna (R1C1) para el LinkItem. Si est escribiendo datos en varias celdas, puede utilizar una cadena en la que las columnas se delimiten mediante tabuladores y las filas mediante retornos de carro. Cuando utilice LinkExecute para pedirle a Excel que ejecute un comando, debe darle el comando en la sintaxis del Lenguaje de macros de Excel (XLM). La documentacin de XLM no

se incluye con las versiones 97 y posteriores de Excel. Para obtener ms informacin acerca de cmo puede obtener la documentacin de XLM, vea el artculo siguiente en Microsoft Knowledge Base: 143466 El archivo Macro97.exe est disponible en los servicios en lnea DDE no se recomienda como solucin para comunicarse con Excel. La automatizacin proporciona la mayor flexibilidad y le da ms acceso a las nuevas caractersticas que Excel proporciona. Volver al principio | Enviar comentarios

Potrebbero piacerti anche