' Creamos un objeto Excel
Dim m_Excel As Excel.Application
' Variable para controlar la ruptura por nombre de categorías
Dim CategoryName As String
' Creamos un objeto WorkBook, manejará el documento
Dim objLibroExcel As Excel.Workbook
' Creamos un objeto WorkSheet, manejará la hoja del documento
Dim objHojaExcel As Excel.Worksheet
''''''''''''''''''SE CREA EL DOCUMENTO ''''''''''''''''''''''''
' Creamos una instancia del Workbooks de Excel
' Creamos una instancia de la primera hoja de trabajo de Excel
objLibroExcel = m_Excel.Workbooks.Add()
objHojaExcel = objLibroExcel.Worksheets(1)
objHojaExcel.Visible = Excel.XlSheetVisibility.xlSheetVisible
objHojaExcel.Name = "REPORTE"
'Se hace activa la hoja 1 (seleccionada)
objHojaExcel.Activate()
' Crear el encabezado de nuestro informe
' Fomrato encabezado: negrita, letras rojas, tamañode letra 16
objHojaExcel.Range("A1:F1").Merge()
objHojaExcel.Range("A1:F1").Value = " titulo 1"
objHojaExcel.Range("A1:F1").Font.Bold = True
objHojaExcel.Range("A1:F1").Font.Color = RGB(255, 100, 0)
objHojaExcel.Range("A1:F1").Font.Size = 14
objHojaExcel.Range("A1:F1").HorizontalAlignment = Excel.Constants.xlCenter
objHojaExcel.Range("A1:F1").VerticalAlignment = Excel.Constants.xlCenter
'margenes izquierdo y derecho de la hoja
'objHojaExcel.PageSetup.LeftMargin = m_Excel.InchesToPoints(0.5)
'objHojaExcel.PageSetup.RightMargin = m_Excel.InchesToPoints(0.5)
'se inserta una imagen en el costado superior izquierdo de la hoja
objHojaExcel.Pictures.Insert("urldetuimagen")
' Crear el subencabezado de nuestro informe
' Formato subencabezado: negrita, cursiva, tamaño 14
objHojaExcel.Range("A2:F2").Merge()
objHojaExcel.Range("A2:F2").Value = " subtitulo"
objHojaExcel.Range("A2:F2").Font.Italic = True
objHojaExcel.Range("A2:F2").Font.Color = RGB(0, 100, 100)
objHojaExcel.Range("A2:F2").Font.Bold = True
objHojaExcel.Range("A2:F2").Font.Size = 13
objHojaExcel.Range("A2:F2").HorizontalAlignment = Excel.Constants.xlCenter
objHojaExcel.Range("A2:F2").VerticalAlignment = Excel.Constants.xlCenter
'en el encabezado se ponen los datos del reporte
'formato negrita, cursiva, tamanio 12
objHojaExcel.Range("A4:F4").Merge()
objHojaExcel.Range("A4:F4").Value = "subtitulo2"
objHojaExcel.Range("A4:F4").Font.Italic = True
objHojaExcel.Range("A4:F4").Font.Color = RGB(100, 100, 100)
objHojaExcel.Range("A4:F4").Font.Bold = True
objHojaExcel.Range("A4:F4").Font.Size = 12
objHojaExcel.Range("A4:F4").HorizontalAlignment = Excel.Constants.xlCenter
objHojaExcel.Range("A4:F4").VerticalAlignment = Excel.Constants.xlCenter
'Ahora se dará nombre a las cabeceras de la tabla
Dim objCelda As Excel.Range
objCelda = objHojaExcel.Range("A6", "A6")
objCelda.Value = "dato1"
objCelda = objHojaExcel.Range("B6", "B6")
objCelda.Value = "dato2"
objCelda = objHojaExcel.Range("C6", "C6")
objCelda.Value = "dato3"
objCelda = objHojaExcel.Range("D6", "D6")
objCelda.Value = "dato4"
objCelda = objHojaExcel.Range("E6", "E6")
objCelda.Value = "dato5"
objCelda = objHojaExcel.Range("F6", "F6")
objCelda.Value = "dato6"
objCelda = objHojaExcel.Range("G6", "G6")
'variables de controla para desplegar los registros de las tablas
Dim i As Integer = 7
CategoryName = ""
For Each objRow As DataRow In MiDataTable.Rows
' Asignar la categoria impresa
CategoryName = objRow.Item(0)
' Asignar los valores de los registros a las celdas
objHojaExcel.Cells(i, "A") = objRow.Item(0)
objHojaExcel.Cells(i, "B") = objRow.Item(1)
objHojaExcel.Cells(i, "C") = objRow.Item(2)
objHojaExcel.Cells(i, "D") = objRow.Item(3)
objHojaExcel.Cells(i, "E") = objRow.Item(4)
objHojaExcel.Cells(i, "F") = objRow.Item(5)
' Avanzamos una fila
i += 1
Next
' Seleccionar todo el bloque desde A1 hasta F #de filas
Dim objRango As Excel.Range = objHojaExcel.Range("A6:F" & (i - 1).ToString)
' Seleccionamos todo el rango especificado
objRango.Select()
' Ajustamos el ancho de las columnas al ancho maximo del contenido de sus celdas
objRango.Columns.AutoFit()
' Asignar filtro por columna
objRango.AutoFilter(1, , VisibleDropDown:=True)
' Asignar un formato automatico
objRango.AutoFormat(11, Alignment:=False)
' Seleccionamos el total general del reporte y asignamos
' font a negrita e italica
objRango = objHojaExcel.Range("A" & i.ToString & ":F" & i.ToString)
objRango.Select()
objRango.Font.Bold = True
objRango.Font.Italic = True
' Total de datos en la lista
objRango = objHojaExcel.Range("B3", "C3")
objRango.Select()
objRango.Font.Bold = True
objHojaExcel.Cells(3, 2) = " otro subtitutlo"
'se construye la ruta donde se guardara el archivo
Dim path, nn As String
path = "D:\carpeta"
Dim d As Date
nn = "Reporte.xls"
nombre = path + "\" + nn 'nombre final de archivo
objLibroExcel.SaveAs(nombre) 'se guarda el archivo
'Salir de Excel y liberar objetos
m_Excel.Quit()
ReleaseComObject(objCelda)
ReleaseComObject(objHojaExcel)
ReleaseComObject(objRango)
ReleaseComObject(objLibroExcel)
ReleaseComObject(m_Excel)
m_Excel = Nothing
objLibroExcel = Nothing
objHojaExcel = Nothing
objRango = Nothing
objCelda = Nothing
System.GC.Collect()