P. 1
Basic .NET y Excel Ejemplo

Basic .NET y Excel Ejemplo

|Views: 1.662|Likes:
Publicado porWillan Betancourt

More info:

Published by: Willan Betancourt on Mar 09, 2012
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as DOCX, PDF, TXT or read online from Scribd
See more
See less

05/28/2013

pdf

text

original

Este es un ejemplo de automatización – controlar un programa desde otro – usando Visual Basic .NET y Excel.

Desde Visual Basic .NET vamos a crear y llenar una hoja de Excel. Proyecto Crearemos un proyecto Visual Basic de tipo Windows Application, y lo llamaremos: WinAppExcelAutomation. Formulario Aparece un formulario, Form1, que renombré a frmExcelAutomation. También le cambié el nombre del archivo, de Form1.vb a frmExcelAutomation.vb. Le puse la propiedad Text: Excel Automation.

Le adicioné un DataGrid, que nombré dgDatos, y un botón, con nombre: btnAlmacenarExcel, y texto: Almacenar Excel. (También recomendaría especificar las propiedades Anchor apropiadas, para que al cambiar el tamaño del formulario, los controles se ajusten).

Acceso a Datos

DataAdapter

Para llenar la hoja de Excel, vamos a leer datos de la tabla Customers en la base de datos Northwind que viene de demostración en SQL Server. Usaremos un DataAdapter para accesar la base de datos y llenar un DataSet, que es un área en memoria en donde almacenaremos temporalmente los datos.

En el Toolbox, bajo el encabezado de Data, arrastraremos un control SqlDataAdapter y lo dejamos caer sobre el formulario. Aparece un Wizard de Data Adapter Configuration:

Pasamos a la siguiente pantalla con Next >; y escogemos una conexión a Northwind. En caso de que no exista una conexión a Northwind, la creamos oprimiendo el botón New Connection.

Luego, escogeremos accesar los datos con enunciados SQL (versus con Procedimientos Almacenados):

y luego Finish para terminar. lo renombré a: dsCustomers: Código Acceso a Datos . y la conexión SqlConnection1 a cnnNorthwind. Renombré el Data Adapter SqlDataAdapter1 a daCustomers.Y establecemos la sentencia SQL Server (puede utilizar el botón Query Builder para crear la sentencia SQL en forma gráfica) Dar Next >. DataSet El DataSet es un área en memoria en donde almacenamos los datos con que vamos a trabajar. Sobre el control daCustomers le damos botón derecho y pedimos laopción Generate Dataset… Le decimos que queremos un nuevo Dataset oprimiendo sobre: New y le damos el nombre: dsCustomers Revisamos que la caja Add this dataset to the designer esté marcada: y una vez creado.

Object. Escribimos lo siguiente.DsCustomers.Forms. lo que nos lleva a ver el código de la página.EventArgs) _ Handles MyBase. para que el DataAdapter daCustomers llene el DataSet dsCustomers con los datos de los clientes: Public Class frmExcelAutomation Inherits System.Customers) End Sub End Class Binding del DataGrid al DataSet El DataGrid mostrará los datos que hemos almacenado en el DataSet.Windows.Load Me.Escribiremos código para que al momento de cargar el formulario también cargue los datos.Form (Windows Form Designer generated code) Private Sub frmExcelAutomation_Load( _ ByVal sender As System. _ ByVal e As System.Fill(Me. Damos doble click sobre alguna parte del formulario. Establecemos las propiedades del DataGrid: DataSource dsCustomers DataMember Customers .daCustomers.

NET). dé doble click sobre el mensaje de error y cuando aparezca una ventana Startup Object escoja el formulario de inicio correcto – en nuestro caso: frmExcelAutomation.0 Object Library (yo tengo instalado Office 2003. Buscamos Microsoft Excel 11. El formulario debe aparecer con los datos de la tabla Customers (Clientes): Referencia a Excel Para poder accesar el modelo de objetos de Excel. En mi caso.Probarlo… Vamos a revisar que el sistema cargue los datos en el Grid Dar Debug – Start u oprimir el botón de Start (una flecha azul hacia la derecha). . Para corregir este error. dio el siguiente error debido a que renombré el formulario de Form1 a frmExcelAutomation: ‘Sub Main’ was not found in ‘WinAppExcelAutomation. Si tiene errores. por lo que nos vamos al tabulado COM. En la ventana Solution Explorer. corregirlo. cuyo Excel es la versión 11). tenemos que adicionar una a Excel. Oprimimos Select para escogerlo y luego OK para aceptarlo. posicionémonos sobre References y con click derecho pedimos la opción Add Reference… Aparece la caja de diálogo: Add Reference Resulta que Excel todavía es tecnología COM (la tecnología previa a .Form1’.

ApplicationClass Dim oBooks As Excel. 2).Cells(ROW_FIRST. 3) = "Contacto" oSheet.Application") oExcel.bold = True .Cells(ROW_FIRST.Código que Instancia Excel y lo manipula Private Sub btnAlmacenarExcel_Click( _ ByVal sender As System.Workbooks oBook = oExcel. _ ByVal e As System.Cells(ROW_FIRST.xls") Const ROW_FIRST = 3 Dim iRow As Int64 = 1 ' Encabezado oSheet.Cells(ROW_FIRST.Workbooks Dim oBook As Excel.Workbooks.WorkbookClass Dim oSheet As Excel.Cells(ROW_FIRST.bold = True oSheet.Sheets(1) 'oBook = oBooks.Add oSheet = oBook. 1).Open( _ ' "C:\DevCare\DevCareExcelAutomation\Data. 1) = "ID" oSheet.EventArgs) _ Handles btnAlmacenarExcel.font. 4) = "País" oSheet. 2) = "Compañía" oSheet.Worksheet ' Inicia Excel y abre el workbook oExcel = CreateObject("Excel.font.Object.Click Dim oExcel As Excel.Cells(ROW_FIRST.Visible = True oBooks = oExcel.

Country iRow += 1 Next ' Fórmula oSheet. 3). _ ' ReleaseComObject(oBooks) 'oBooks = Nothing .Marshal.CustomerID oSheet. 3) = rowCustomer.Cells(ROW_FIRST.Columns(4).bold = True oSheet.ColumnWidth = 15 ' Loop que almacena los datos Dim rowCustomer As dsCustomers.Cells(iCurrRow.ColumnWidth = 30 oSheet.Runtime.ContactName oSheet.bold = True oSheet.Marshal.Cells(ROW_FIRST.CustomersRow For Each rowCustomer In Me.DsCustomers.Columns(2). 4).font.ColumnWidth = 40 oSheet.Cells(ROW_FIRST + iRow + 1.font.1). 4) = rowCustomer.ToString & "C1)" '' Cierra todo 'oBook.Cells(iCurrRow.Cells(iCurrRow.oSheet. _ ' ReleaseComObject(oBook) 'oBook = Nothing 'System.Columns(1).ColumnWidth = 10 oSheet.InteropServices. 1) = rowCustomer.Close(True) 'System. 2) = rowCustomer.InteropServices.Customers Dim iCurrRow As Int64 = ROW_FIRST + iRow oSheet.CompanyName oSheet. 1) = _ "=counta(R" & (ROW_FIRST + 1) & "C1:R" & _ (ROW_FIRST + iRow .Runtime.Columns(3).Cells(iCurrRow.

Interop.Office. _ ' ReleaseComObject(oExcel) 'oExcel = Nothing End Sub Como trabajar con un archivo de Excel desde VB.net.'oExcel.Excel.Workbooks.Excel.Worksheet 'y nuestra hoja 05 06 Try 07 exApp. ByVal e AsSystem 1 .Interop. y la hoja al 08 libro exApp.Office.Quit() 'System.Office.Interop. 09 .Workbooks.Workbooks. así que les comparto puntos básicos de cómo hacerlo. abro el archivo y le agrego la hoja 11 .Visible = False ' esto nos sirve para que la aplicación(excel) no sea visible al trabajar en ella exApp.Excel.InteropServices.Interop. "". view source print? 0 Private Sub Button1_Click(ByVal sender As System.Click 0 2 Dim exApp As New Microsoft.xls".Workbook 'nuestro libro 04 Dim exHoja As Microsoft.False) ' creamos nuestro archivo con el nombre que le querramos dar y en el directorio que lo querramos guardar exApp. todo con tan solo hacer un click en un botón desde una aplicación de visual basic .Object.Add() 'Añadimos el Libro al programa.EventArgs) Handles Button1.Add.Office.Application 'declaramos lo que sera nuestra aplicacion de excel 03 Dim exLibro As Microsoft.NET En estos días me la pase mordiéndome las uñas por no tener ni la mínima idea de cómo crear archivos Excel. Para iniciar debemos de agregar la referencia Microsoft.SaveAs("C:\nuevacarpeta\prueba. si es asi.Close() 'cerramos nuestro archivo para poder trabajar 10 con él 'en mi caso necesito crear varios archivos excel con cierto nombre asi que verifico antes de añadir informacion 12 'Si el archivo existe. eliminarlos. "". verificar si existen .Runtime.Marshal.Excel al proyecto. 11 para office 97-2003 y 12 para 2007. False.

el @ sirve para que sean tipo texto ' y las numericas con #. en caso contario 13 'creo el archivo de la forma anterior 14 If File.Cells.Exists("C:\nuevacarpeta\prueba.Columns.Rows.Item(1.Cells.Save() ' esto es muy importante para que no nos aparesca el cuadro de dialogo que nos dice si 30 'queremos guardar cambios 29 31 End If ' hasta ahora solo hemos creado el archivo y le agregamos los titulos 32 de las columnas.Cells.Item(1. y las columnas que querramos para ponerles el titulo 18 exHoja = exLibro.Item(1).ActiveSheet.Cells.UsedRange.ActiveSheet.Bold = 1 25 27 exHoja.xls") Then 15 exLibro = exApp.Sheets(1) 'aqui añadimos la hoja al archivo 'recorremos la primera fila.Cells. 4) = "Nombre/Razón social" 23 exHoja.Rows.Workbooks.con la que deseo trabajar.Item(1).Add() 17 19 exHoja.AutoFit() exLibro. 6) = "Referencia Alfanumerica" 'Titulo en negrita.Item(1. 1) = "Tipo Cuenta" 20 exHoja. 3) = "Importe" 22 exHoja.1 + exLibro.Item(1.Font. 2) = "Cuenta" 21 exHoja.Cells. con la hoja que querramos trabajar.Item(1.Worksheets. y existen muchos más pero eso se los dejo de 42 tarea =) 43 'ahora recorremos el libro.Open("C:\nuevacarpeta\prueba.Item(1. 5) = "Referencia Numerica" 24 exHoja.Row . Alineado al centro y que el tamaño de la columna se ajuste al texto 26 exHoja.NumberFormat = "@" 'con el numberformat le damos formato a las celdas. en este caso la hoja que le añadimos 'y con las siguientes lineas nos posicionamos en la fila vacia seguida por el numero de celda 44 With exLibro 45 .Count 38 auxrefe = intultimafila 37 39 'le añadimos uno para escribir en la fila vacia siguiente 40 intultimafila += 1 41 exHoja.xls") 16 exHoja = exLibro.Rows.Cells. ahora le añadiremos 33 ' la informacion que necesitemos 34 Dim intultimafila As Integer 35 Dim auxrefe As Integer 'con la siquiente linea sabemos cual es la ultima fila que contiene 36 datos intultimafila = exLibro.HorizontalAlignment = 3 28 exHoja.UsedRange.

Value = dato1 48 exHoja.Quit() 63 exHoja = Nothing 64 exLibro = Nothing 65 exApp = Nothing 66 67 End Sub Simple ejemplo para cargar un rango de una hoja de Excel en un DataGridView El siguiente es un simple código fuente para poder conectarse a una hoja de un libro. FileIO.Value = dato4 51 End With ' despues de recorrer nuestro libro y ya agregamos lo que deseamos. FileIO.DoNothing) ' si ya no trabajaremos con archivos de excel.omitiendo 59 6 0 61 ' tambien el mensaje del cuadro de dialogo.RecycleOption. cerramos la aplicacion.Critical.UICancelOption.Cells(intultimafila. 2).UIOption.Close() 55 Catch ex As Exception 56 MsgBox(ex. 1).Value = dato2 49 exHoja. MsgBoxStyle. 4).FileSystem.Cells(intultimafila. leer un rango de datos y mostrarlos o cargarlos en un control de tipo DataGridView.Save() 54 exLibro.DeleteFile("C:\recibedispersion\banamex\prueba. xls".OnlyErrorDialogs.Computer.46 ' y agregamos los datos que deseamos guardar 47 exHoja. si estamos seguros de mandarlo a la papelera My. . 52 guardamos y cerramos. 53 exLibro.SendToRecycleBin. 62 exApp.Value = dato3 50 exHoja. FileIO. 3). "Error al exportar a Excel") 57 End Try ' la siguiente linea nos sirve para eliminar archivos que hayan sido 58 creados y que ya no nos serviran.Cells(intultimafila.Cells(intultimafila.Message. y dejamos sin basura a nuestras instancias.

Option Strict On 3.EventArgs) Handles MyBase. 4.Load 8. Button1. ByVal sender As System.Object. txtRange. Public Class Form1 5. 12. Private Sub Button1_Click( _ . 9. ByVal e As System. Private Sub Form1_Load( _ 6.Text = "A1:C15" 11. _ 7. Option Explicit On 2.Text = "Cargar" 10.Para el ejemplo colocar en un Form los siguientes controles:    Un TextBox : llamado txtRange ( Para indicar el rango a cargar en la grilla) Un DataGridView Un control Button Código fuente Texto planoImprimir 1. 14. End Sub 13.

" 40. Dim objDataSet As System. 55. MsgBox(ex. MsgBoxStyle. Dim objOleConnection As System.Message.Data.OleDbConnection(sC s) 42.15.Fill(objDataSet) 52. ' // Comprobar que el archivo Excel existe 34. ByVal sFileName As String.0.Critical) . ' // Declarar la consulta SQL que indica el libro y el rang o de la hoja 44. Dim sCs As String = "provider=Microsoft. End With 60. ByVal dv As DataGridView) 31. ' // Declarar la Cadena de conexión 39. DataGridView1) End Sub ' --------------------------------------------------------------------------------24. 17.OleDbConnection 41. Exit Sub 65. ' --------------------------------------------------------------------------------26.DataSource = objDataSet 58.OleDb.DataSet 37.DataSet 50. ' // Crear DataSet y llenarlo 49. . ' // Enlazar DataGrid al Dataset 56. ' // Obtener los datos 46. objOleConnection.Jet. Extended Properties=Excel 8. _ 29. 18.Text. 43. " & "data source=" & sFileName & ". .OleDb. txtRange. 16.Data. objDataAdapter = New System. 19. MsgB oxStyle. Dim sSql As String = "select * from " & "[" & sSheetName & "$" & sRange & "]" 45.Close() 54. Private Sub loadRange( _ 27.File.OleDb.Object. _ 30. objDataAdapter.OLEDB. 51. If System.IO. ' // Cerrar la conexión 53.OleDb. ByVal sSheetName As String. objDataSet = New System.Data. 64.Click ' // Pasar valores para Leer el rango loadRange("c:\book1. 21. _ 28.Data. 20.4. objOleConnection = New System.OleDbDataAdapter(sSq l. 22.Exists(sFileName) Then 35. 32. ' // Subrutina para conectar al libro Excel y obtener el rango de datos 25. Dim objDataAdapter As System. _ ByVal e As System. End If 63.xls".Data. MsgBox("No se ha encontrado el archivo: " & sFileName. Else 61.EventArgs) Handles Button1. With dv 57. "sheet1". 36.Data. 23. ByVal sRange As String.Exclamation) 62. ByVal sender As System. Try 33.DataMember = objDataSet. objOleConnection) 47.0.OleDbDataAdapter 38. 48.TableName 59.Tables(0). Catch ex As Exception 66.

Net Muchas veces resulta útil acceder a datos de Excel desde una aplicación Visual Basic.Office.SaveAs 'Eliminamos la instancia de Excel de memoria If Not m_Excel Is Nothing Then m_Excel.Save() 'Nota: Hay una instruccion como esta: m_Excel. End Class Nota.Workbooks.Application") m_Excel. agregar. con este sencillo código tendremos acceso a Excel: Dim m_Excel As Microsoft. Ahora.Application. Ejemplo probado con Excel 2000 y Visual basic Excel y Visual Basic .1 del primer libre MsgBox(m_Excel.Worksheets("Hoja1").Value) 'Escribir en una celda m_Excel. Lo primero es agregar la referencia a Microsoft Excel.Visible = False 'Dejamos el libro oculto 'Mostramos el valor de la celda 1. End Try 68.ActiveWorkbook. 1).Worksheets("Hoja1"). End Sub 70.cells(3. Para ello hay que ir a las propiedades del proyecto.Application Dim strRutaExcel As String strRutaExcel = "C:\libro.Interop.Cells(1.value = "prueba" 'Guardamos los cambios del libro activo m_Excel. Hacerlo es muy sencillo: basta con agregar la referencia de Excel y escribir un sencillo código.67.ActiveWorkbook. 3).Open(strRutaExcel) m_Excel. ya sea para leer datos o para exportar información que ha sido procesada por el programa. 69.xls" m_Excel = CreateObject("Excel.Excel.Quit() m_Excel = Nothing End If . pinchar en referencias.0 Object Library. buscar las de tipo COM y seleccionar de la lista Microsoft Excel 11.Application.

Espero que os sea útil. . Hoy día Excel está muy extendido y bastante a menudo tengo que recurrir códigos como este para poder conectar Microsoft Excel con algún programa de Visual Basic.

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->