Exportar un DATASET

SaludosPor razones que no vienen al caso nenecito enviar un DATASET o un DATATABLE o un  DATAROWS en fin una colección de datos que tiene varios registros a una MATRIZ (Variable declarada), tal vez me digan que es lo mismo, pero la matriz como variable tiene otras características que me sirven para un proceso vital que realizo en Excel

1 respuesta

Respuesta
1
? Pues si señor que es lo mismo de por si es mas facil recorrer un datatable que una matriz. Ahora viendo que conoces de .net, la exportacion que asumo quires hacer no es mas que recorrer las filas de la coleecion de datos y llevarlas a algun lado.. ejemplo excel. :)
Imports Microsoft. Office. Interop
Imports System. Data
Imports System. IO
Public Class exportExcel
    Public Sub DataTableToExcel(ByVal pDataTable As DataSet, ByVal pNombreFicheroCSV As String, ByVal ruta As String, ByRef j As Integer)
        Dim sb As String = ""
        Dim dc As DataColumn
        Dim i As Integer
        For i = 0 To pDataTable.Tables.Count - 1
            Dim vFileName As String = ruta & pNombreFicheroCSV & i & ".tmp"
            FileOpen(1, vFileName, OpenMode.Output)
            For Each dc In pDataTable.Tables(i).Columns
                sb &= dc.Caption & Microsoft.VisualBasic.ControlChars.Tab
            Next
            PrintLine(1, sb)
            Dim ix As Integer = 0
            Dim dr As DataRow
            For Each dr In pDataTable.Tables(i).Rows
                ix = 0 : sb = ""
                For Each dc In pDataTable.Tables(i).Columns
                    If Not IsDBNull(dr(ix)) Then
                        sb &= CStr(dr(ix)) & Microsoft.VisualBasic.ControlChars.Tab
                    Else
                        sb &= Microsoft.VisualBasic.ControlChars.Tab
                    End If
                    ix += 1
                Next
                PrintLine(1, sb)
            Next
            FileClose(1)
            TextToExcel(vFileName, ruta & pNombreFicheroCSV & i & ".tmp")
            ix = 0
            j = i
        Next
    End Sub
    Public Sub TextToExcel(ByVal pFileName As String, ByVal temporal 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
        'Se le indica el formato al que queremos exportarlo
        Dim valor As Integer = 1
        If valor > -1 Then
            Select Case valor
                Case 0 : vFormato = Excel.XlRangeAutoFormat.xlRangeAutoFormatNone
                Case 1 : vFormato = Excel.XlRangeAutoFormat.xlRangeAutoFormatSimple
                Case 2 : vFormato = Excel.XlRangeAutoFormat.xlRangeAutoFormatClassic1
                Case 3 : vFormato = Excel.XlRangeAutoFormat.xlRangeAutoFormatClassic2
                Case 4 : vFormato = Excel.XlRangeAutoFormat.xlRangeAutoFormatClassic3
                Case 5 : vFormato = Excel.XlRangeAutoFormat.xlRangeAutoFormatAccounting1
                Case 6 : vFormato = Excel.XlRangeAutoFormat.xlRangeAutoFormatAccounting2
                Case 7 : vFormato = Excel.XlRangeAutoFormat.xlRangeAutoFormatAccounting3
                Case 8 : vFormato = Excel.XlRangeAutoFormat.xlRangeAutoFormatAccounting4
                Case 9 : vFormato = Excel.XlRangeAutoFormat.xlRangeAutoFormatColor1
                Case 10 : vFormato = Excel.XlRangeAutoFormat.xlRangeAutoFormatColor2
                Case 11 : vFormato = Excel.XlRangeAutoFormat.xlRangeAutoFormatColor3
                Case 12 : vFormato = Excel.XlRangeAutoFormat.xlRangeAutoFormatList1
                Case 13 : vFormato = Excel.XlRangeAutoFormat.xlRangeAutoFormatList2
                Case 14 : vFormato = Excel.XlRangeAutoFormat.xlRangeAutoFormatList3
                Case 15 : vFormato = Excel.XlRangeAutoFormat.xlRangeAutoFormat3DEffects1
                Case 16 : vFormato = Excel.XlRangeAutoFormat.xlRangeAutoFormat3DEffects2
            End Select
            Ws. Range(Ws. Cells(1, 1), Ws. Cells(Ws. UsedRange. Rows. Count, Ws. UsedRange. Columns. Count)). AutoFormat(vFormato)
            pFileName = Replace(pFileName, "tmp", "xls")
            Exc.ActiveWorkbook.SaveAs(pFileName, Excel.XlTextQualifier.xlTextQualifierNone - 1)
        End If
        Exc.Application.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
        File.Delete(temporal)
    End Sub
End Class
Saludos.. creo que olvide algo muy importante en mi pregunta, quiero hacerlo sin hacer el recorrido uno a uno de los registros. es decir sin utilizar el FOR, la razón es la siguiente en vb6 existía una opción llamada getrows la cual insertaba n registros instantáneamente luego mediante una opción con excel (RESIZE) las cargaba y esto tomaba muy poco tiempo (casi instantáneo) ya que cago en ocasiones 10 20 mil registros
Mmmm no conzco una funcion similar en .net.. ahora con el ejemplo que te coloco haces lo que ncesites con ello yo hago export de 5 mil registros y no se queja. Xd

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas