Reportes en Excel Con VB

March 17, 2018 | Author: JHON | Category: Microsoft Excel, Microsoft, Sql, Computer File, Areas Of Computer Science


Comments



Description

Reportes en Excel con VB.NET A muchos desarrolladores se les a presentado la necesidad de crear reportes con ciertos estilos provenientes de herramientas de terceros, por lo regular los ejecutivos les gusta la forma en que se presentan los informes en formato EXCEL y muchas veces informes generados por sistemas de gestión, se nos solicita que sean exportados a EXCEL para ajustarlos a sus necesidades y gustos. Bueno con este articulo pretendo mostrarle una forma sencilla de leer una base de datos y generar un informe directamente en EXCEL aprovechando todas las funcionalidades de esta herramienta, se podría decir que mas del 50 porciento de las computadoras de oficina cuentan con alguna versión de Microsoft Office, así que estimo que le será de utilidad alguno de ustedes. Iniciamos. Creamos una nueva solución en Visual Studio .NET y agregamos una referencia a la librería de objeto de Excel que se encuentra en la paleta COM de la ventana de agregar referencias en Visual Studio .NET Si la versión de Office con la que cuentan es 2000 la librería seria Microsoft Excel 9.0 Object Library, luego hacemos clic en Select y luego en OK y listo. Creamos una forma que será nuestra plataforma de lanzamiento desde donde lanzaremos los ejemplos que crearemos nuestra forma ser vera así: User ID=Admin") Dim objSQLAdapter As New OleDb. El Código … Llego la hora de la codificación.Application m_Excel. Dim CategoryName As String ' Variable para controlar la ruptura por nombre de categorías Creamos 1 variable tipo Excel. 1. luego definiremos una variable de tipo string para controlar la ruptura por nombre de categorías. 2. Utilizaremos la base de datos Northwind que trae Microsoft Access como demo. 3.OleDbConnection("Data Source=Northwind. primero definiremos una variable tipo Excel. pueden ser desplegadas correctamente cuando se conoce la configuración regional de la computadora donde se trabaja.Workbook '' Creamos un objeto WorkSheet Dim objHojaExcel As Excel. Excel utiliza el identificador . Dim objSQLConnect As New System.Application a nivel de formulario la cual hace referencia a EXCEL. "Categories") Iniciamos una instancia de EXCEL y Hacemos visibles para ver como se va creando el reporte.WorkBook para crear el documento Excel y otra tipo Excel. Leeremos las tablas Categories y Productos para crear un listado de productos por categorías.mdb. crearemos un dataset y llevaremos los datos al DataSet.El primer botón lo utilizaremos para crear un pequeño ejemplo de cómo tratar un documento EXCEL como una base de datos y leer sus documentos con sentencias SQL. '' Creamos un objeto WorkBook Dim objLibroExcel As Excel.Visible = True Es importante tener en mente que algunas datas.Categories Where Products.4. tales como Fechas y números.Fill(objDataSet. Para interpretar. If Not m_Excel Is Nothing Then m_Excel. ahora le describo cual es el procedimiento. '' Iniciamos una instancia a Excel m_Excel = New Excel.OleDb. el segundo botón lo utilizaremos para crear nuestro listado en EXCEL. por ejemplo cuando Excel recibe una llamada desde un programa externo.Application Agregamos el siguiente código en el evento “Closing” del formulario para cuando cerremos el formulario eliminar la instancia de Excel que este ejecutándose.ProductName. objSQLConnect) Dim objDataSet As New DataSet("ExcelTest") objSQLAdapter.Quit() m_Excel = Nothing End If Hacemos doble clic en el segundo botón “Listado en Excel.0.CategoryID = Categories.CategoryID".ProductID. '' Creamos un objeto Excel Dim m_Excel As Excel.WorkSheet para crear la hoja del documento.Password=.Jet.OleDbDataAdapter("select CategoryName. Crearemos un grafico estadístico con todas las categorías de productos que hay en el listado.Provider=Microsoft.CategoryID order by Categories.Data.UnitPrice from Products.OLEDB. convertir y presentar la data debemos considerar la variedad de lenguajes y versiones de Microsoft Office y Microsoft Windows que el usuario puede tener. podemos hacerlo visible al final si se desea.Worksheet Ahora crearemos una conexión a la base de datos northwind y leeremos los registros de las tablas Categories y Producta. A5 y A7.Thread.Range("A2:D2").Range("A1:D1").Range("A2:D2"). B1. la segunda línea Asigna el nombre del encabezado. “Nombre”desplegara el nombre del producto y “Precio” para desplegar el precio del producto formateado según una mascarilla que especificaremos. Para evitar estos problemas crearemos una variable tipo “CultureInfo”para mantener la cultura con la que esta configurada la maquina y Crearemos una nueva cultura para trabajar de tipo InglésEstados Unidos (“es-US)”).Merge() objHojaExcel.Workbooks. Creamos el encabezado del reporte.Font.Range("A1:D1").Italic = True objHojaExcel.Range("A1:D1").Globalization. '' Creamos una variable para guardar la cultura actual Dim OldCultureInfo As System.Globalization. HojaExcel.Size = 15 '' Crear el subencabezado de nuestro informe objHojaExcel. objHojaExcel.00”. A.XlSheetVisibility. este constará de 4 columnas.Range("A1:D1").A5.A7”) aquí hacemos referencia a las celdas A1.Range(“A1. la primera línea une las celdas y las convierte un en una sola.Size = 13 Creamos los encabezados de las columnas de nuestro informe.Threading. la tercera línea asigna negrita al titulo y la cuarta línea signa un Size a titulo de 15.Add() objHojaExcel = objLibroExcel.Local (LCID) enviado por cliente que realizó la llamada para procesar los valores tales como “05/06/2005”or “29. . C1 y D1.“Categoria”que desplegara el nombre de la categorías.Bold = True objHojaExcel.CurrentCulture = _ New System.Activate() Para hacer referencia a cualquiera de las celdas de una hoja de Excel o a un rango de celdas de la hoja de Excel debemos hacerlo a través del Objeto Range entrelos parámetros que recibe este objeto debemos enviarle las coordenadas de la celda o rango de celda que deseamos acceder Ej. '' Crear el encabezado de nuestro informe objHojaExcel. HojaExcel.Thread.Visible = Excel. si su configuración regional no coincide con esta LCID se producirá un error de ejecución o la data no se desplegará correctamente.CurrentThread.Value = "Ingredient List by Category" objHojaExcel.A3. esto seria igual que si presionáramos el control y hacemos clic en cada una de estas celdas.Merge() objHojaExcel. esto lo hacemos como forma de mostrar como cambiar de entre hojas en un documento Excel).CurrentCulture 'Crear una cultura standard (en-US) inglés estados unidos System. “Código”que desplegara el código del producto.Threading.Range("A2:D2").Font. S. A3.Range(“A1”) aquí hacemos referencia a la celda A1.250." objHojaExcel.: HojaExcel.Font.Value = "MAÑON FOOT SHOP.CultureInfo("en-US") Ahora creamos un nuevo documento y seleccionamos la primera hoja del documento en la cual crearemos nuestro informe '' Creamos una instancia del Workbooks de Excel '' Creamos una instancia de la primera hoja de trabajo de Excel objLibroExcel = m_Excel.CurrentThread.Font.Range("A2:D2").CultureInfo =System.xlSheetVisible '' Hacemos esta hoja la visible en pantalla '' (como seleccionamos la primera esto no es necesario '' si seleccionamos una diferente a la primera si lo '' necesitaríamos.Range(“A1:D1”) aquí hacemos referencia a las celdas desde la A1 hasta la D1 lo que quiere decir que incluye A1.Worksheets(1) objHojaExcel. EntireColumn. 1) = "Total Category " & CategoryName.Item(3) 'UnitPrice' '' Avanzamos una fila i += 1 Next Luego de imprimir todos los registros imprimiremos el subtotal de la categorías final. 1) = "Total Category " & CategoryName.1). 4) = "=sum(D" & (j + 2).ToString & ")" objHojaExcel.1). Type.Dim objCelda As Excel.Cells(i.###.Cells(i.Cells(i.Cells(i.Tables(0).Missing) objCelda.ToString & ":D" & i.Item(1) 'ProductID' objHojaExcel.Item(0) Then objHojaExcel.Bold = True j=i i += 2 End If '' Asignar la categoría impresa CategoryName = objRow.Bold = True Ahora seleccionado todo el informe y ajustaremos el ancho de las columnas al ancho de su contenido máximo.ToString).Cells(i.ToString & ")" objHojaExcel.Item(2) 'ProductName' objHojaExcel.ToString & ":D" & (i .Trim objHojaExcel.Range("A" & i.Cells(i.00" Iniciamos las variables de control para desplegar los registros de nuestra tabla.Range("A" & i.Cells(i.ToString). la variable “i” la utilizaremos para controlar el número de la fila y la variable “j” la utilizaremos para controlar el rango que cubre el subtotal que será desde j+2 hasta i – 1. 4) = "=sum(D" & (j + 2).Cells(i. Type. Type. 2) = "=count(D" & (j + 2).Value = "Nombre" objCelda = objHojaExcel.Item(0) '' Asignar los valores de los registros a las celdas objHojaExcel.1).Value = "Precio RD$" objCelda.Missing) objCelda.Rows ''' Si Ya se ha impreso una categorías y la próxima categorías ''' es diferente a la categorías a imprimir.Range("B3". imprimir los totales If CategoryName. por cada cambio de categorías imprimiremos un subtotal.Trim objHojaExcel. Type.ToString & ":D" & (i .Missing) objCelda. asignamos también el auto filtro para poder filtrar '' Seleccionar todo el bloque desde A1 hasta D #de filas .Value = "Código" objCelda = objHojaExcel. "D") = objRow.Range = objHojaExcel. "B") = objRow. '* El Ultimo subtotal objHojaExcel.Font.ToString & ")" objHojaExcel.NumberFormat = "###. "C") = objRow.ToString & ":D" & i.ToString & ":D" & (i . Dim i As Integer = 5 Dim j As Integer = 5 CategoryName = "" Recorremos los registros de la tabla y lo asignamos a su correspondiente celda en su respectiva fila en la hoja.Cells(i.Cells(i.Value = "Categoría" objCelda = objHojaExcel.1).Item(0) 'CategoryName' objHojaExcel.Font. 3) = "Subtotal Precio:" objHojaExcel.Range("A3".Range("C3". "A") = objRow. 3) = "Subtotal Precio:" objHojaExcel. For Each objRow As DataRow In objDataSet. 2) = "=count(D" & (j + 2).ToString & ")" objHojaExcel.Range("D3".Cells(i.ToString & ":D" & (i .Length > 0 AndAlso CategoryName <> objRow.Missing) objCelda.###.Cells(i. “A”) = "Total " objHojaExcel. “C”) = "Total Precio:" objHojaExcel.Workbook ' Variable para controlar la ruptura por nombre de .Format(strRangoTotal.Range = objHojaExcel. se desplegara un listado como sigue: Y este es nuestro código completo hasta el momento: Dim CategoryName As String categorías '' Creamos un objeto WorkBook Dim objLibroExcel As Excel. “B”) = "=count(" & String. ejecutamos el método printpreview para presentarlo en vista previa '' Crear un total general objHojaExcel. Alignment:=False) Ahora crearemos el total general de los datos impresos. al ejecutarlo y hacer clic en el botón “Listado en Excel”. i . intRowInicial.Cells(i.1) & ")" objHojaExcel.Format(strRangoTotal.Range(String.Cells(i.Select() '' Ajustamos el ancho de las columnas al ancho máximo del '' contenido de sus celdas objRango.Columns.AutoFilter(1. i .1)) '' Seleccionamos todo el rango especificado objRango. intRowInicial.Format(strRangoTotal. VisibleDropDown:=True) '' Asignar un formato automático objRango.Cells(i.1) & ")" objLibroExcel. intRowInicial.Cells(i.PrintPreview() Hasta aquí podemos probar nuestro informe. i .Dim objRango As Excel.AutoFit() '' Asignar filtro por columna objRango. “D”) = "=sum(" & String.AutoFormat(11. . NumberFormat = "###.CurrentThread.Range("A1:D1").4.EntireColumn.mdb.CategoryID".Provider=Microsoft. Type.Workbooks.Range("A1:D1"). objSQLConnect) Dim objDataSet As New DataSet("ExcelTest") objSQLAdapter.Tables(0).0.Threading.Threading.Value = "MAÑON FOOT SHOP.XlSheetVisibility.CurrentCulture 'Crear una cultura standard (en-US) inglés estados unidos System.Range("A1:D1").00" Dim i As Integer = 5 Dim j As Integer = 5 CategoryName = "" For Each objRow As DataRow In objDataSet. "Categories") '' Iniciamos una instancia a Excel m_Excel = New Excel.Missing) objCelda.Data.OleDbConnection("Data Source=Northwind.ProductID.UnitPrice from Products.CurrentCulture = _ New System.Worksheet '' Iniciamos una conexión a la base de datos NorthWind y seleccionamos '' varios registros desde las tablas Products.Categories Dim objSQLConnect As New System.Value = "Nombre" objCelda = objHojaExcel.Visible = True '' Creamos una variable para guardar la cultura actual Dim OldCultureInfo As System.Italic = True objHojaExcel.Thread.Size = 13 Dim objCelda As Excel.Range("A2:D2").###.Range("D3".Worksheets(1) objHojaExcel.Application m_Excel.Globalization.CultureInfo("en-US") '' Creamos una instancia del Workbooks de Excel '' Creamos una instancia de la primera hoja de trabajo de Excel objLibroExcel = m_Excel.Missing) objCelda.Categories Where Products.OleDb.ProductName.CategoryID = Categories.OleDbDataAdapter("select CategoryName.OLEDB.Size = 15 '' Crear el subencabezado de nuestro informe objHojaExcel.###.Rows ''' Si Ya se ha impreso una categorías y la próxima categorías ''' es diferente a la categorías a imprimir.Value = "Precio RD$" objCelda.Missing) objCelda.Activate() '' Crear el encabezado de nuestro informe objHojaExcel.Range("C3". Type.Value = "Categoría" objCelda = objHojaExcel.Range("B3".CultureInfo = _ System.Fill(objDataSet.Range("A2:D2").xlSheetVisible '' Hacemos esta hoja la visible en pantalla '' (como seleccionamos la primera esto no es necesario '' si seleccionamos una diferente a la primera si lo '' necesitaríamos).Bold = True objHojaExcel.Globalization. Type.Font.Font.Merge() objHojaExcel. imprimir los totales .Range("A2:D2").Range = objHojaExcel.Font.Visible = Excel. objHojaExcel.Merge() objHojaExcel." objHojaExcel.Missing) objCelda.Value = "Ingredient List by Category" objHojaExcel. Type.CategoryID order by Categories.Thread.User ID=Admin") Dim objSQLAdapter As New OleDb.Value = "Código" objCelda = objHojaExcel.Range("A3". A.Range("A1:D1").CurrentThread.Add() objHojaExcel = objLibroExcel.Font. S.'' Creamos un objeto WorkSheet Dim objHojaExcel As Excel.Password=.Jet.Range("A2:D2"). AutoFormat(11.Cells(i.ToString & ":D" & (i .ToString & ":D" & (i .1).ToString) '' Seleccionamos todo el rango especificado objRango.ToString & ")" objHojaExcel.ToString) objRango.Cells(i.ToString & ":D" & i. 3) = "Total Precio:" objHojaExcel.Range("A" & i.ToString & ")" objHojaExcel.Item(0) '' Asignar los valores de los registros a las celdas objHojaExcel.ToString & ")" objHojaExcel. VisibleDropDown:=True) '' Asignar un formato automático objRango.Bold = True j=i i += 2 End If '' Asignar la categoría impresa CategoryName = objRow.Cells(i. "D") = "=sum(D" & (j + 2).Font.Select() objRango.Cells(i. "C") = "Subtotal Precio:" objHojaExcel.Trim objHojaExcel. 2) = "=count(A3:D" & (i .Length > 0 AndAlso CategoryName <> objRow. "B") = "=count(D" & (j + 2).Range("A" & i.ToString & ":D" & i.AutoFilter(1.Columns.Cells(i.PrintPreview() Ahora crearemos un grafico estadístico en base a los resultados del informe que creamos. 2) = "=count(D" & (j + 2). 4) = "=sum(D" & (j + 2).Range("A" & i. "C") = objRow.Cells(i.1).AutoFit() '' Asignar filtro por columna objRango. 1) = "Total " objHojaExcel.Cells(i.Bold = True objRango.Cells(i.Cells(i. "A") = "Total Category " & CategoryName.Item(1) 'ProductID' objHojaExcel.Cells(i.If CategoryName.Font.ToString).Font.Range("A3:D" & (i . los valores de la “X” serán los totales y los valores de la “Y”seran los subtotales de las categorías.Item(2) 'ProductName' objHojaExcel. "B") = objRow.1).1).Font.ToString & ":D" & (i . "D") = objRow.Item(0) Then objHojaExcel. Alignment:=False) '' Seleccionamos el total general del reporte y asignamos '' font a negrita e itálica objRango = objHojaExcel.ToString & ")" objHojaExcel.1). "A") = objRow. 3) = "Subtotal Precio:" objHojaExcel.Cells(i.Cells(i.ToString & ":D" & (i .ToString & ":D" & i.Bold = True '' Avanzamos una fila i += 1 '' Seleccionar todo el bloque desde A1 hasta D #de filas Dim objRango As Excel.Range = objHojaExcel.1).ToString & ")" objHojaExcel.ToString). 1) = "Total Category " & CategoryName.Cells(i.Trim objHojaExcel.Italic = True '' Crear un total general objHojaExcel. .Select() '' Ajustamos el ancho de las columnas al ancho máximo del '' contenido de sus celdas objRango.Cells(i.ToString & ")" objLibroExcel. 4) = "=sum(A3:D" & (i .Item(0) 'CategoryName' objHojaExcel. .1).Cells(i.Cells(i.Item(3) 'UnitPrice' '' Avanzamos una fila i += 1 Next '* El Ultimo subtotal objHojaExcel. Range("A17").XlDataLabelsType.Value xlsSeries.Primero creamos un objetivo de tipo Excel.SeriesCollection Dim xlsAxisCategory.Name = objHojaExcel.Name = objHojaExcel.Sheet1!$D$31.Item(3).Range("A31").Add Luego creamos un rango con los subtotales del informe que serán los valores para nuestro grafico '' Creamos un rango con los totales de cada categorías para crear nuestro gráfico objRango = objHojaExcel.Value xlsSeries.Item(8).Range("A96").: Sheet1!$D$17 = hace referencia a la celda 17 de la columna “D” de la hoja 1 (Sheet1).Name = objHojaExcel.Sheet1!$D$82.Range("A67").Item(7).Sheet1! $D$58.Chart.Range("A46"). especificamos que se desplegue los valores de las columnas al top de cada columna.SeriesCollection que hace referencias a cada uno de los valores del grafico y 2 objetivos de tipos Excel. xlsAxisValue As Excel.Sheet1!$D$67.Range("=Sheet1!$D$17.Charts.Value xlsSeries.Range("A82").ApplyDataLabels(Excel.Sheet1!$D$75.Value Seleccionamos las Axis del grafico y asignamos un titulo para las axis por categorías y otro para las axis por valor.Item(1). asignamos el titulo de cada subtotal a su correspondiente columna del grafico '' Seleccionamos los diferentes elementos del grafico xlsSeries = objExcelChart.XlChartType.Value xlsSeries. un objeto de tipo Excel.Axes que hace referencias a las columnas del grafico.SetSourceData(objRango) Seleccionamos las columnas del grafico.Value xlsSeries. .Item(2). el grafico será tipo Barra. cada valor separado por coma representa una barra para nuestro grafico Ej.ChartType = Excel.Name = objHojaExcel.SeriesCollection '' Desplegar los valores de cada columna al top de cada columna objExcelChart.Name = objHojaExcel. '' Crear un grafico estadístico Dim objExcelChart As Excel.Value xlsSeries.Item(4).Name = objHojaExcel.Sheet1!$D$96") Cada valor dentro de la sentencia Range representan la celda que contiene el valor para cada barra del grafico.Name = objHojaExcel.Name = objHojaExcel.Item(6).Axes Primero instanciamos el objeto con un nuevo grafico '' Agregamos un nuevo grafico objExcelChart = objLibroExcel.Sheet1!$D$46.xlColumnClustered Asignamos el rango que creamos como fuente de datos '' Asignamos el total objExcelChart. Sheet1!$D$31 = hace referencia a la celda 31 de la columna “D” de la hoja 1 y así sucesivamente.xlDataLabelsShowValue) '' Asignamos el nombre de cada serie xlsSeries.Range("A75").Value xlsSeries. Asignamos el tipo de grafico que queremos crear.Chart Dim xlsSeries As Excel.Range("A58"). en este caso tipo columna '' Asignamos el tipo de grafico objExcelChart.Item(5). XlOrientation.CurrentThread.AxisTitle. objSQLConnect) Dim objDataSet As New DataSet("ExcelTest") objSQLAdapter. "Categories") '' Iniciamos una instancia a Excel m_Excel = New Excel.CategoryID order by Categories.XlAxisType.Text = "Rango de Precios" xlsAxisValue.HasTitle = True xlsAxisCategory. Excel.Item(Excel.4.Item(Excel.PrintPreview() Listo.Categories Dim objSQLConnect As New System.Text = "Totales por categoría" xlsAxisValue = objExcelChart.xlPrimary) xlsAxisValue.Item(Excel.XlAxisType.Password=.0.XlAxisType.XlAxisType.Item(Excel.Axes(.Data.Characters.xlCategory).Axes(.Application m_Excel.ProductName.xlValue).Threading.xlValue).ProductID.HasTitle = True xlsAxisValue.CurrentCulture 'Crear una cultura standard (en-US) inglés estados unidos System. Excel.HasMajorGridlines = True Ahora movemos la sentencia que ejecuta el método PrintPreview al final del código luego de generar el grafico objLibroExcel.Globalization.XlAxisType.xlValue).Jet.mdb.Thread.AxisTitle.xlsAxisCategory = objExcelChart.xlPrimary) xlsAxisCategory.Threading.CurrentThread.XlAxisGroup.Worksheet '' Iniciamos una conexión a la base de datos NorthWind y seleccionamos '' varios registros desde las tablas Products.CategoryID = Categories.xlCategory).xlVertical xlsAxisValue.XlAxisGroup.Visible = True '' Creamos una variable para guardar la cultura actual Dim OldCultureInfo As System.XlAxisType.Thread.CurrentCulture = _ New System.Provider=Microsoft.Globalization.xlValue).Characters.CultureInfo = _ System.Fill(objDataSet.Categories Where Products.Item(Excel.AxisTitle.OleDbDataAdapter("select CategoryName. nuestro código completo luce de la siguiente forma (este código también incluye la parte que describimos anterior sobre generar el informe): Try Dim CategoryName As String categorías ' Variable para controlar la ruptura por nombre de '' Creamos un objeto WorkBook Dim objLibroExcel As Excel.OleDbConnection("Data Source=Northwind.CategoryID".Item(Excel.OleDb.OLEDB.User ID=Admin") Dim objSQLAdapter As New OleDb.Orientation = Excel.Workbook '' Creamos un objeto WorkSheet Dim objHojaExcel As Excel.CultureInfo("en-US") .UnitPrice from Products. Range("A" & i.00" Dim i As Integer = 5 Dim j As Integer = 5 CategoryName = "" For Each objRow As DataRow In objDataSet.Range("A1:D1").Bold = True j=i .Range("D3".ToString).Item(0) Then objHojaExcel.Size = 15 '' Crear el subencabezado de nuestro informe objHojaExcel.###.Cells(i.Worksheets(1) objHojaExcel.Range("A1:D1").xlSheetVisible '' Hacemos esta hoja la visible en pantalla '' (como seleccionamos la primera esto no es necesario '' si seleccionamos una diferente a la primera si lo '' necesitaríamos).Missing) objCelda.Activate() '' Crear el encabezado de nuestro informe objHojaExcel.Range("B3".Merge() objHojaExcel. 4) = "=sum(D" & (j + 2).Font.Value = "Nombre" objCelda = objHojaExcel.ToString & ":D" & i.Font.Range("C3".ToString & ")" objHojaExcel.Range("A2:D2").Range("A1:D1").XlSheetVisibility.Cells(i.Missing) objCelda. objHojaExcel.ToString & ")" objHojaExcel. S.Workbooks.Italic = True objHojaExcel.Merge() objHojaExcel.Rows ''' Si Ya se ha impreso una categorías y la próxima categorías ''' es diferente a la categorías a imprimir.1). Type.Cells(i.Missing) objCelda. Type.###.Font.Missing) objCelda.Value = "MAÑON FOOT SHOP.Size = 13 Dim objCelda As Excel.Range("A1:D1").Font. imprimir los totales If CategoryName. Type.Cells(i. Type. 3) = "Subtotal Precio:" objHojaExcel.Value = "Categoría" objCelda = objHojaExcel.Visible = Excel.Value = "Ingredient List by Category" objHojaExcel.ToString & ":D" & (i .Range("A3".Add() objHojaExcel = objLibroExcel.Font. 2) = "=count(D" & (j + 2).Range("A2:D2"). A.EntireColumn.1). 1) = "Total Category " & CategoryName.Range = objHojaExcel.Trim objHojaExcel." objHojaExcel.Bold = True objHojaExcel.Value = "Código" objCelda = objHojaExcel.Length > 0 AndAlso CategoryName <> objRow.NumberFormat = "###.Range("A2:D2").Tables(0).Range("A2:D2").ToString & ":D" & (i .'' Creamos una instancia del Workbooks de Excel '' Creamos una instancia de la primera hoja de trabajo de Excel objLibroExcel = m_Excel.Value = "Precio RD$" objCelda. Range = objHojaExcel.Range("A" & i.Cells(i.Trim objHojaExcel.Cells(i. 3) = "Total Precio:" objHojaExcel.ToString & ":D" & i.Item(0) 'CategoryName' objHojaExcel. Alignment:=False) '' Seleccionamos el total general del reporte y asignamos '' font a negrita e itálica objRango = objHojaExcel. "A") = objRow.Range("A3:D" & (i .Cells(i. .Cells(i.ToString & ":D" & i.Cells(i.1).Cells(i.ToString & ")" .1). "B") = objRow. 4) = "=sum(A3:D" & (i .Item(2) 'ProductName' objHojaExcel.1).Font. "A") = "Total Category " & CategoryName.ToString & ":D" & (i .Cells(i. 2) = "=count(A3:D" & (i . "D") = "=sum(D" & (j + 2). "C") = "Subtotal Precio:" objHojaExcel.Cells(i. 1) = "Total " objHojaExcel.Bold = True '' Avanzamos una fila i += 1 '' Seleccionar todo el bloque desde A1 hasta D #de filas Dim objRango As Excel.ToString & ")" objHojaExcel.Select() objRango.Cells(i.AutoFilter(1.ToString) '' Seleccionamos todo el rango especificado objRango.ToString & ")" objHojaExcel.ToString & ":D" & (i . "C") = objRow.1).Font.Cells(i.Columns. "B") = "=count(D" & (j + 2).Range("A" & i.ToString & ")" objHojaExcel. "D") = objRow. VisibleDropDown:=True) '' Asignar un formato automático objRango.Cells(i.Italic = True '' Crear un total general objHojaExcel.Font.Bold = True objRango.Item(1) 'ProductID' objHojaExcel.Select() '' Ajustamos el ancho de las columnas al ancho máximo del '' contenido de sus celdas objRango.AutoFit() '' Asignar filtro por columna objRango.ToString) objRango.AutoFormat(11.1).ToString).Cells(i.i += 2 End If '' Asignar la categoría impresa CategoryName = objRow.Item(0) '' Asignar los valores de los registros a las celdas objHojaExcel.Item(3) 'UnitPrice' '' Avanzamos una fila i += 1 Next '* El Ultimo subtotal objHojaExcel. Sheet1!$D$31.xlCategory).AxisTitle.Name = objHojaExcel.Item(1).Range("A58").xlDataLabelsShowValue) '' Asignamos el nombre de cada serie xlsSeries.xlColumnClustered '' Asignamos el total .xlVertical xlsAxisValue.CurrentCulture = OldCultureInfo objLibroExcel.AxisTitle.XlOrientation.Sheet1!$D$75.xlValue).Threading.XlAxisType.Value xlsSeries.Item(8).Name = objHojaExcel.Text = "Rango de Precios" xlsAxisValue.Range("A46").Name = objHojaExcel.HasTitle = True xlsAxisValue. Excel.Sheet1!$D$96") With objExcelChart '' Asignamos el tipo de grafico .Item(Excel.XlAxisGroup.Value xlsSeries.Name = objHojaExcel.Value xlsSeries.Name = objHojaExcel.Item(7).Value xlsSeries.xlValue).'' Crear un grafico estadístico Dim objExcelChart As Excel.XlAxisType.XlAxisType. Excel.Item(6).XlDataLabelsType.Item(3).Sheet1!$D$46.HasMajorGridlines = True End With System.SeriesCollection '' Desplegar los valores de cada columna al top de cada columna .Axes(.ApplyDataLabels(Excel.Name = objHojaExcel.Name = objHojaExcel.Axes '' Agregamos un nuevo grafico objExcelChart = objLibroExcel.xlValue).Value xlsSeries.Range("A75").XlChartType.XlAxisType.Sheet1!$D$67.Item(Excel.Range("=Sheet1!$D$17.Item(5).XlAxisType.HasTitle = True xlsAxisCategory.AxisTitle.Chart Dim xlsSeries As Excel.Item(Excel.Value xlsAxisCategory = .Text = "Totales por categoría" xlsAxisValue = .Add '' Creamos un rango con los totales de cada categorías para crear nuestro gráfico objRango = objHojaExcel.Name = objHojaExcel.Value xlsSeries.Item(Excel.Characters.xlValue).CurrentThread.Axes(.XlAxisGroup.Range("A82").Charts.Range("A31").ChartType = Excel.XlAxisType.Item(Excel.Range("A67").Sheet1!$D$82.Item(4).SeriesCollection Dim xlsAxisCategory.xlPrimary) xlsAxisValue.Value xlsSeries.SetSourceData(objRango) '' Seleccionamos los diferentes elementos del grafico xlsSeries = . xlsAxisValue As Excel.Range("A17").Range("A96").xlCategory).xlPrimary) xlsAxisCategory.Sheet1! $D$58.PrintPreview() .Orientation = Excel.Item(2).Thread.Characters.Item(Excel. luego haremos clic en un botón y se desplegara el contenido del archivo en un grid y agregaremos otro botón para abrir este mismo archivo en EXCEL. las hojas (Sheets) como tablas y las columnas como campos y las filas como registros Ej. código … Primero definiremos una variable tipo EXCEL.Message) End Try Ahora podemos ejecutar nuestro programa y obtendremos el siguiente resultado: Vamos a crear un segundo ejemplo de cómo leer un archivo Excel como base de datos. mediante OLEDB podemos tratar los archivos Excel como si fueran base datos igualando el archivo como una base de datos. Archivo XLS = Base de datos Sheets = Tablas Column = Columnas (para nombrar las columnas toma la primera línea del archivo) Cell = valor de una colunma en un registro Row = Registro En nuestro ejemplo vamos a crear una forma que nos pedirá el nombre y la localización del archivo Excel que queremos leer. nuestra forma se vera de la siguiente forma: El botón “Leer Archivo”leera el archivo Excel y desplegara su contenido en el grid y el botón “Abrir Excel”abrira una instancia de Excel con archivo especificado.objHojaExcel = Nothing objLibroExcel = Nothing Catch ex As Exception MessageBox. Iniciando.Application a nivel del formulario Dim m_Excel As Excel.Show(ex.Application . hacemos clic sobre el botón Definiremos 3 variables. DataGrid1.Fill(objDataSet) objOleConnection.Tables(0).Data.OleDbConnection Ahora configuraremos la conexión al archivo.Jet.OleDbDataAdapter Dim objOleConnection As System.Text.Data.TableName Ahora nuestra codificación completa se vera así: Try If TextBox1.Data. Extended Properties=Excel 8.OLEDB. Dim objDataSet As System.DataMember = objDataSet.Data.Jet.4.OLEDB. objOleConnection) Ahora instanciamos el Dataset y lo llenamos objDataSet = New System. la primera de tipo Dataset para almacenar la información del archivo Excel.: Si queremos seleccionar los registros que están en la hoja 1 utilizamos SELECT * FROM [SHEET1$] Si queremos seleccionar columnas especificas de una hoja utilizamos SELECT * FROM [SHEET$1A1:D17] Entonces.4.0” DataSource = <ruta y nombre del archivo> Extended Properties = Nombre de la aplicación y la versión Ej. el dataset como datasource del grid y el nombre de la tabla creada en el dataset como datamember y listo. " & _ "data source=" & TextBox1.TableName DataGrid1.OleDb. los parámetros necesarios en la cadena de conexión son los siguientes Provider = “Microsoft.DataSet objDataAdapter.OleDb.CaptionText = objDataSet. “Extended Properties=Excel 8.OleDb.Text.Close() Asignaremos el nombre de la tabla al titulo del grid.OleDbConnection( _ "provider=Microsoft. configuramos nuestro DataAdapter: '* Si queremos seleccionar toda la hoja solo especificamos [Sheet1$] objDataAdapter = New System.Length = 0 Then Exit Sub End If Dim objDataSet As System. De tipo OleDbConnection para crear la conexión entre el archivo Excel y la aplicación. la segunda de tipo OleDbDataAdapter para extraer la información del archivo Excel y pasarlo al dataset y la 3ra.Data.OleDbDataAdapter( _ "select * from [Sheet1$] ".DataSet Dim objDataAdapter As System.Iniciaremos codificando el botón “Leer Archivo”.Trim & ".0.OleDb.OleDbDataAdapter .0” 'Creamos un objeto OLEDBConnection con el nombre del archivo seleccionado ' como Data Source objOleConnection = New System.DataSource = objDataSet DataGrid1.Data.0. Ahora configuraremos el DataAdapter.Data.Data.") Nuestra cadena de conexión en el parámetro Data Source pasaremos el archivo especificado en el textbox.DataSet Dim objDataAdapter As System.OleDb. una vez creada la conexión al archivo Excel las hojas del archivo pueden ser tratados como tablas y aplicar sentencias SQL sobre estas hojas Ej.Tables(0). DataSet objDataAdapter.XLS ubicado en mi My Documents folder hago clic en el botón Leer Archivo y se desplega lo siguiente: .OleDb. " & _ "data source=" & TextBox1.Tables(0).Text) m_Excel.OleDbDataAdapter( _ "select * from [Sheet1$] ".Text. objOleConnection) 'where [Sheet1$A4] = 'Aruba' objDataSet = New System.") 'Seleccionamos los datos que están en la hoja 1 (Sheet1) 'Cada columna se representara como una columna y cada row 'como un row '* Si queremos seleccionar un rango solo especificamos [Sheet1$An:Bm] '* objDataAdapter = New System.Trim & ".Data. Extended Properties=Excel 8.Fill(objDataSet) objOleConnection.OleDbConnection( _ "provider=Microsoft.OLEDB.Dim objOleConnection As System.Data.CaptionText = objDataSet.DataSource = objDataSet DataGrid1.DataMember = objDataSet.OleDb.Message) End Try Ahora codificaremos el botón “Abrir EXCEL”.OleDb.OleDb.TableName Catch ex As Exception MessageBox.Application que definimos a nivel de formulario y ejecutar el método Open de la propiedad Workbooks de la variable.0.Visible = True Agregamos el siguiente código en el evento “Closing” del formulario para cuando cerremos el formulario eliminar la instancia de Excel que este ejecutándose If Not m_Excel Is Nothing Then m_Excel. m_Excel = New Excel.Show(ex.TableName DataGrid1.OleDbConnection 'Creamos un objeto OLEDBConnection con el nombre del archivo seleccionado ' como Data Source objOleConnection = New System.Close() DataGrid1.4.Jet. este botón es bastante sencillo. objOleConnection) '* Si queremos seleccionar toda la hoja solo especificamos [Sheet1$] objDataAdapter = New System.Data.Tables(0).Quit() m_Excel = Nothing End If Ya podemos ejecutamos nuestra aplicación y podemos probarla el resultado será parecido al siguiente: Aquí abrí un archivo llamado Casa.Data.OleDbDataAdapter( _ '* "select * from [Sheet1$A6:E29]". solo debemos instanciar la variable tipo EXCEL.Open(TextBox1.Workbooks.Application m_Excel.0.Data. .Luego hago clic en el botón “Abrir EXCEL”y el resultado es este: Como se puede notar el programa tomo la primera línea de la hoja Excel como títulos de las columnas esto lo hace automático el Provider.
Copyright © 2024 DOKUMEN.SITE Inc.