none
se puede evitar el Error de fecha en exportación de DataGridView a Excel? RRS feed

  • Pregunta

  • Estimados:

                      Le escribo porque al exportar de datagridview a excel desde una base de datos mysql con vb.net. las fechas salen invertidas en día y mes como en ingles. por ejemplo -- en español latinoamericano se escribe la fecha si dd/mm/AAAA

    pero al exportar me sale mm/dd/AAAA ( pero solo hasta el día 12 de cada mes)  por favor necesito que salga la fecha en español. gracias este es el código con el que trabajo.

    desde ya muchas gracias...

    Public Sub ExportarDatosExcel(ByVal DataGridView1 As DataGridView, ByVal titulo As String)
            Dim m_Excel As New Excel.Application
            m_Excel.Cursor = Excel.XlMousePointer.xlWait
            m_Excel.Visible = True
            Dim objLibroExcel As Excel.Workbook = m_Excel.Workbooks.Add
            Dim objHojaExcel As Excel.Worksheet = objLibroExcel.Worksheets(1)
            With objHojaExcel
                .Visible = Excel.XlSheetVisibility.xlSheetVisible
                .Activate()
                'Encabezado   
                .Range("A1:L1").Merge()
                .Range("A1:L1").Value = "INSTITUTO CONTADOR MARCELO GARZÓN"
                .Range("A1:L1").Font.Bold = True
                .Range("A1:L1").Font.Size = 20
                'Copete   
                .Range("A2:L2").Merge()
                .Range("A2:L2").Value = titulo
                .Range("A2:L2").Font.Bold = True
                .Range("A2:L2").Font.Size = 10
    
                Const primeraLetra As Char = "A"
                Const primerNumero As Short = 3
                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 hoja 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 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
                        'objCelda.EntireColumn.NumberFormat = c.DefaultCellStyle.Format 
                        If c.ValueType Is GetType(Decimal) OrElse c.ValueType Is GetType(Double) Then
                            objCelda.EntireColumn.NumberFormat = "#"
                        End If
                    End If
                Next
    
                Dim objRangoEncab As Excel.Range = .Range(primeraLetra + Numero.ToString, LetraIzq + Letra + Numero.ToString)
                objRangoEncab.BorderAround(1, 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, strColumna) = IIf(IsDBNull(reg.ToString), "", reg.Cells(c.Index).Value)
                            '.Cells(i, strColumna) = IIf(IsDBNull(reg.(c.DataPropertyName)), c.DefaultCellStyle.NullValue, reg(c.DataPropertyName))   
                            '.Range(strColumna + i, strColumna + i).In()   
    
                        End If
                    Next
                    Dim objRangoReg As Excel.Range = .Range(primeraLetra + i.ToString, strColumna + i.ToString)
                    objRangoReg.Rows.BorderAround()
                    objRangoReg.Select()
                    i += 1
                Next
                UltimoNumero = i
    
                'Dibujar las líneas de las columnas   
                LetraIzq = ""
                cod_LetraIzq = Asc("A")
                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 Excel.Range = .Range(primeraLetra + primerNumero.ToString, UltimaLetraIzq + UltimaLetra + (UltimoNumero - 1).ToString)
                objRango.Select()
                objRango.Columns.AutoFit()
                objRango.Columns.BorderAround(1, Excel.XlBorderWeight.xlMedium)
            End With
            'esta siguiente linea comentada
            'm_Excel.Cursor = Excel.XlMousePointer.xlDefault
    
            'Aca almacenar en la ruta especificada de un directorio
    
            m_Excel.Cursor = Excel.XlMousePointer.xlDefault
            'Cierra el archivo y elimina la variable m_Excel.Quit()
    
        End Sub


    miércoles, 8 de enero de 2014 22:25

Todas las respuestas

  • Hola,

    Prueba esto!

    .Visible = Excel.XlSheetVisibility.xlSheetVisible .Activate()

    Columns("H:H").Select
        Selection.NumberFormat = "dd/mm/yyyy;@"

    'Si no funciona prueba esto

    .Range("A").NumberFormat = "dd/mm/yyyy;@" 'Encabezado .Range("A1:L1").Merge() .Range("A1:L1").Value = "INSTITUTO CONTADOR MARCELO GARZÓN" .Range("A1:L1").Font.Bold = True


    • Marcado como respuesta Omar Ortiz viernes, 17 de enero de 2014 21:03
    • Desmarcado como respuesta ARIELIBANEZ jueves, 20 de febrero de 2014 18:33
    jueves, 16 de enero de 2014 22:07
  • Muy bueno, esta cerca pero 

    En el primer caso me sale que 

    columns   y  selection-------------- no estan declarados

    a esta sección me refiero

    .Visible = Excel.XlSheetVisibility.xlSheetVisible .Activate()

    Columns("H:H").Select
        Selection.NumberFormat = "dd/mm/yyyy;@"

    y el segundo caso no funciona...

    gracias por tu aporte...


    jueves, 20 de febrero de 2014 0:07