Error al exportar un datagridview a excel
Cuando exporto el datagridview a excel me lo exporta normal la primera vez
Si exporto por segunda vez, lo ke sucede es que se pone lenta mi maquina como si
estuviera cargando algo. Y cuando me fijo en el administrador de tareas aparecen varios procesos de excel, aun despues de haber cerrado todos los archivos excel.
Este es mi codigo que uso para dar formato y exportar a un excel el datagridview, espero
me puedan aconsejar, y ayudar a resolver mi problema . Gracias
Dim saveFileDialog1 As New SaveFileDialog()
saveFileDialog1.Filter = "Excel (*.xls)|*.xls"
saveFileDialog1.Title = "excel File"
saveFileDialog1.ShowDialog()
If Not (Directory.Exists(saveFileDialog1.FileName)) Then
Directory.Exists(saveFileDialog1.FileName)
End If
Dim m_Excel As New Excel.Application
m_Excel.Cursor = Excel.XlMousePointer.xlWait
Dim objLibroExcel As Excel.Workbook = m_Excel.Workbooks.Add
Dim objHojaExcel As Microsoft.Office.Interop.Excel.Worksheet = objLibroExcel.Worksheets(1)
With objHojaExcel
.Visible = Microsoft.Office.Interop.Excel.XlSheetVisibility.xlSheetVisible
.Activate()
''Encabezado
.Range("C2:E2").Merge()
.Range("C2:E2").Font.Name = "Calibri"
' .Range("C2:E2").Font.ThemeColor = Color.Aqua
.Range("C2:E2").Value = "REPORTE DE EXCEL"
'.Range("C2:E2").Font.Bold = True
.Range("C2:E2").Font.Size = 15
.Range("C2:E2").Font.Underline = Excel.XlUnderlineStyle.xlUnderlineStyleSingle
'.Range("C2:E2").Font.ThemeColor = Excel.XlThemeColor.xlThemeColorAccent3
.Range("C2:E2").Font.ThemeFont = Excel.XlThemeFont.xlThemeFontMajor
.Range("C2:E2").Font.Strikethrough = False
.Range("C2:E2").Font.Superscript = False
.Range("C2:E2").Font.Subscript = False
.Range("C2:E2").Font.OutlineFont = False
.Range("C2:E2").Font.Shadow = False
.Range("C2:E2").Font.Bold = True
.Range("C2:E2").HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter
.Range("C2:E2").Font.ColorIndex = 1
.Range("C2:E2").Interior.ThemeColor = Excel.XlThemeColor.xlThemeColorAccent1
Dim objRangoTitulo As Microsoft.Office.Interop.Excel.Range = .Range("C2", "E2")
objRangoTitulo.Rows.BorderAround()
' objRangoTitulo.Font.Background = Color.Aqua
objRangoTitulo.Columns.BorderAround(1, Microsoft.Office.Interop.Excel.XlBorderWeight.xlMedium)
objRangoTitulo.Select()
.Range("C3").Value = "Codigo" : .Range("D3").Value = "Descripcion" : .Range("E3").Value = "Operacion"
.Range("C3").Merge() : .Range("D3").Merge() : .Range("E3").Merge()
.Range("C3:E3").Font.Name = "Calibri"
.Range("C3:E3").Font.Size = 12
.Range("C3:E3").Font.ColorIndex = 2
.Range("C3:E3").Interior.ColorIndex = 15
.Range("C3:E3").HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter
objRangoTitulo = .Range("C3", "E3")
objRangoTitulo.Rows.BorderAround()
ObjRangoTitulo. Columns. BorderAround(1, Microsoft. Office. Interop. Excel. XlBorderWeight. XlMedium)
Const primeraLetra As Char = "C"
Const primerNumero As Short = 4
Dim Letra As Char, UltimaLetra As Char
Dim Numero As Integer, UltimoNumero As Integer
Dim cod_letra As Byte = Asc(primeraLetra) - 1
Dim sepDec As String = Application.CurrentCulture.NumberFormat.NumberDecimalSeparator
Dim sepMil As String = Application.CurrentCulture.NumberFormat.NumberGroupSeparator
'Establecer formatos de las columnas de la hija de cálculo
Dim strColumna As String = ""
Dim LetraIzq As String = ""
Dim cod_LetraIzq As Byte = Asc(primeraLetra) - 1
Letra = primeraLetra
Numero = primerNumero
Dim objCelda As Microsoft.Office.Interop.Excel.Range
For Each c As DataGridViewColumn In DataGridView1.Columns
If c.Visible Then
If Letra = "Z" Then
Letra = primeraLetra
cod_letra = Asc(primeraLetra)
cod_LetraIzq += 1
LetraIzq = Chr(cod_LetraIzq)
Else
cod_letra += 1
Letra = Chr(cod_letra)
End If
strColumna = LetraIzq + Letra + Numero.ToString
objCelda = .Range(strColumna, Type.Missing)
objCelda.Value = c.HeaderText
objCelda.EntireColumn.Font.Size = 8
End If
Next
Dim objRangoEncab As Microsoft.Office.Interop.Excel.Range = .Range(primeraLetra + Numero.ToString, LetraIzq + Letra + Numero.ToString)
objRangoEncab.BorderAround(1, Microsoft.Office.Interop.Excel.XlBorderWeight.xlMedium)
UltimaLetra = Letra
Dim UltimaLetraIzq As String = LetraIzq
'CARGA DE DATOS
Dim i As Integer = Numero '+ 1
For Each reg As DataGridViewRow In DataGridView1.Rows
LetraIzq = ""
cod_LetraIzq = Asc(primeraLetra) - 1
Letra = primeraLetra
cod_letra = Asc(primeraLetra) - 1
For Each c As DataGridViewColumn In DataGridView1.Columns
If c.Visible Then
If Letra = "Z" Then
Letra = primeraLetra
cod_letra = Asc(primeraLetra)
cod_LetraIzq += 1
LetraIzq = Chr(cod_LetraIzq)
Else
cod_letra += 1
Letra = Chr(cod_letra)
End If
: strColumna = LetraIzq + Letra
' acá debería realizarse la carga
.Cells(i, Trim(strColumna)) = IIf(IsDBNull(Trim(reg. ToString)), "", Trim(reg. Cells(c. Index). Value))
End If
Next
Dim objRangoReg As Microsoft.Office.Interop.Excel.Range = .Range(primeraLetra + Trim(i.ToString), strColumna + Trim(i.ToString))
objRangoReg.Rows.BorderAround()
objRangoReg.Select()
i += 1
Next
UltimoNumero = i
'Dibujar las líneas de las columnas
LetraIzq = ""
cod_LetraIzq = Asc("C")
cod_letra = Asc(primeraLetra)
Letra = primeraLetra
For Each c As DataGridViewColumn In DataGridView1.Columns
If c.Visible Then
objCelda = .Range(LetraIzq + Letra + primerNumero.ToString, LetraIzq + Letra + (UltimoNumero - 1).ToString)
objCelda.BorderAround()
If Letra = "Z" Then
Letra = primeraLetra
cod_letra = Asc(primeraLetra)
LetraIzq = Chr(cod_LetraIzq)
cod_LetraIzq += 1
Else
cod_letra += 1
Letra = Chr(cod_letra)
End If
End If
Next
'Dibujar el border exterior grueso
Dim objRango As Microsoft.Office.Interop.Excel.Range = .Range("C" + primerNumero.ToString, UltimaLetraIzq + "E" + (UltimoNumero - 1).ToString)
objRango.Select()
objRango.Columns.AutoFit()
objRango.Columns.BorderAround(1, Microsoft.Office.Interop.Excel.XlBorderWeight.xlMedium)
End With
'esta siguiente linea comentada
'Reemplaza automaticamente el archivo
If Not (File.Exists(saveFileDialog1.FileName)) Then
m_Excel.ActiveWorkbook.SaveAs(saveFileDialog1.FileName)
'Filename:="D:\Analisis de compra\" + text + ".xlsx")
Else
File.Delete(saveFileDialog1.FileName)
m_Excel.ActiveWorkbook.SaveAs(saveFileDialog1.FileName)
End If
m_Excel.ActiveWorkbook.Close(SaveChanges:=False)
'Cierra el archivo y elimina la variable
m_Excel.Quit()
m_Excel = Nothing
objLibroExcel = Nothing
Process. Start(saveFileDialog1. FileName)
1 respuesta
Respuesta de Roberto Alvarado
1