none
Ayuda Excel con DataGridView VB.NET RRS feed

  • Pregunta

  • Buenas Tardes, mira tengo un problema cuando me exporta los registros a excel, en la base de datos tengo por ejemplo 12/01/2015 y cuando me lo exporta a excel me lo exporta 01/12/2015, en cambio cuando es 01/01/2015 me lo exporta bien, esta es la funcion que uso, (Uso 2 textbox para un intervalo de fechas):

    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("B1").HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter
                .Range("B1:K1").Merge()
                .Range("B1:K1").Value = "Registros"
                .Range("B1:K1").Interior.Color = RGB(255, 209, 2)
                .Range("B1:K1").Font.Color = RGB(40, 40, 40)
                .Range("B1:K1").Font.Bold = True
                .Range("B1:K1").Font.Size = 16
                'Texto despues del encabezado.   
                .Range("B2:E2").Merge()
                .Range("B2:E2").Value = titulo
                .Range("B2:E2").Font.Bold = True
                .Range("B2:E2").Font.Size = 10
                'Espacio.
                '.Range("A3:L3").Merge()
                '.Range("A3:L3").Value = ""
                '.Range("A3:L3").Font.Bold = True
                '.Range("A3:L3").Font.Size = 10
                'Estilo a titulos de la tabla.
                .Range("A4:P4").Font.Bold = True
                'Establecer tipo de letra al rango determinado.
                .Range("A1:P1000").Font.Name = "Tahoma"
                'Los datos se registran a partir de la columna B, fila 4.
                Const primeraLetra As Char = "B"
                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
                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 = 10
                        'Establece un formato a los numeros por Default.
                        'objCelda.EntireColumn.NumberFormat = c.DefaultCellStyle.Format
                        If c.ValueType Is GetType(Decimal) OrElse c.ValueType Is GetType(Double) Then
                            objCelda.EntireColumn.NumberFormat = "#" + sepMil + "0" + sepDec + "00"
                        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
                'Cargar Datos del DataGridView.   
                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
                            'Aqui se realiza la carga de datos.  
                            .Cells(i, strColumna) = IIf(IsDBNull(reg.ToString), "", reg.Cells(c.Index).Value)
                            'Establece las propiedades de los datos del DataGridView por Default.
                            '.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 de la tabla.   
                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
            m_Excel.Cursor = Excel.XlMousePointer.xlDefault
        End Sub

    y Este es el botón que exporta el archivo.

    Try
          exportarcamiones()
          ExportarDatosExcel(DataGridView1, "Fecha: " & txtfinicio.Text & " - " & txtffinal.Text & "")
               
            Catch ex As Exception
                'Si el intento es fallido, mostrar MsgBox.
                MessageBox.Show("No se puede generar el documento Excel.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
    End Try

    Aver si me podéis echar una mano.

    Gracias.

    Un cordial saludo.



    domingo, 11 de enero de 2015 13:04

Todas las respuestas