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
? 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