exportar datatable a excel

Iniciado por almita, 11 Agosto 2010, 04:23 AM

0 Miembros y 1 Visitante están viendo este tema.

almita

Hola buenas noches chavos estoy atorada al querer dar formato de tipo texto en el excel que estoy generando en vb.net 2005 con framework 2 y el codigo que encontre en internet es el siguiente, quisiera ver si alguien me puede ayudar para ver de que manera puedo hacer que me respete los zeros a la izquierda en las columnas que tienen numeros por ejemplo que en lugar de que deje en la celda 1 me deje 0001 que es lo que trae la columna de mi datatable que es de typo string.
Código (vb.net) [Seleccionar]

' asi llamo la funcion que genera el excel
DataTableToExcel(CType(dt, DataTable))

'funcion que genera el excel
   Public Sub DataTableToExcel(ByVal pDataTable As DataTable)
       Dim vFileName As String = Path.GetTempFileName()

       FileOpen(1, vFileName, OpenMode.Output)
       Dim sb As String
       Dim dc As DataColumn
       For Each dc In pDataTable.Columns
           sb = dc.Caption & Microsoft.VisualBasic.ControlChars.Tab
       Next
       PrintLine(1, sb)
       Dim i As Integer = 0
       Dim dr As DataRow
       For Each dr In pDataTable.Rows
           i = 0
           sb = ""
           For Each dc In pDataTable.Columns
               If Not IsDBNull(dr(i)) Then
                   sb &= CStr(dr(i)) & Microsoft.VisualBasic.ControlChars.Tab
               Else
                   sb &= Microsoft.VisualBasic.ControlChars.Tab
               End If
               i += 1
           Next
           PrintLine(1, sb)
       Next
       FileClose(1)
       TextToExcel(vFileName)
   End Sub


'funcion que guarda el archivo
   Public Sub TextToExcel(ByVal pFileName As String)
       Dim vFormato As Excel.XlRangeAutoFormat
       Dim vCultura As System.Globalization.CultureInfo = System.Threading.Thread.CurrentThread.CurrentCulture
       System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US")

       Dim Exc As Excel.Application = New Excel.Application
       Exc.Workbooks.OpenText(pFileName, , , , Excel.XlTextQualifier.xlTextQualifierNone, , True)

       Dim Wb As Excel.Workbook = Exc.ActiveWorkbook
       Dim Ws As Excel.Worksheet = Wb.ActiveSheet

       vFormato = Excel.XlApplicationInternational.xlGeneralFormatName
       Ws.Range(Ws.Cells(1, 1), Ws.Cells(Ws.UsedRange.Rows.Count, Ws.UsedRange.Columns.Count)).AutoFormat(vFormato)
       pFileName = Path.GetTempFileName.Replace("tmp", "xls")
       File.Delete(pFileName)
       Dim Nombre As String = InputBox("Ingrese el nombre del archivo:", "Guardar Archivo", "C:\")
       If Nombre <> "" Then
           Exc.ActiveWorkbook.SaveAs(Nombre, Excel.XlTextQualifier.xlTextQualifierNone - 1)
       End If
       Exc.ActiveWorkbook.SaveAs(pFileName, _
         Excel.XlTextQualifier.xlTextQualifierNone - 1)
       Exc.Quit()
       Ws = Nothing
       Wb = Nothing
       Exc = Nothing
       GC.Collect()
       If valor > -1 Then
           Dim p As System.Diagnostics.Process = New System.Diagnostics.Process
           p.EnableRaisingEvents = False
           'p.Start("Excel.exe", pFileName)
       End If
       System.Threading.Thread.CurrentThread.CurrentCulture = vCultura
       limpia()
   End Sub


este codigo funciona perfecto el problema son los zeros a la izquierda que son requerido por cierto importe los siguientes espacios de nombres.

Imports System.IO
Imports Microsoft.Office.Interop


y hago uso de las siguientes librerias Microsoft.Office.Interop.Excel.dll y Microsoft.Vbe.Interop.dll

[D4N93R]

Como no me gusta vb.net xD te paso éste enlace, está dentro del foro, y es muy bueno, http://foro.elhacker.net/net/aporte_exportar_datagridview_a_excel_pdf_y_html-t299075.0.html

No estoy muy seguro de cual puede ser el error en el código, probablemente sea el formato de la celda, tendrías que formatear todas las celdas de esa columna para que rellene con 0.

Un saludo!

almita

ok muchas gracias deja lo checo pero de entrada no veo que tenga una columna donde pudieran tener esa bronca de los zeros a la izquierda pero deja lo veo mejor y de cualquier manera muchas gracias por responder