client/ClasesModulos/ClassTablaAExcel.vb

106 lines
3.7 KiB
VB.net
Raw Permalink Normal View History

Imports System.Data.DataTable
Public Class ClassTablaAExcel
Public Count As Integer 'Se utiliza para la barra de progreso
Dim frmBarra As ExcProgreso = New ExcProgreso 'Se instancia el form de la barra de progreso
Public Function ExportaExcel(sNombreArchivo As String, ExportDataTable As System.Data.DataTable, _
ByRef sError As String) As Boolean
Try
sError = ""
ExportaExcel = False
Dim _excel
Dim wBook
Dim wSheet
_excel = CreateObject("Excel.Application")
wBook = _excel.Workbooks.Add()
wSheet = wBook.Worksheets(1)
Dim dt As System.Data.DataTable = ExportDataTable
Dim dc As System.Data.DataColumn
Dim dr As System.Data.DataRow
Dim colIndex As Integer = 0
Dim rowIndex As Integer = 1
''Barra de avance
'Se obtiene el numero de registros a exportar
Count = dt.Rows.Count
'Se establen las propiedades de barra de progreso
frmBarra.pbrAvance.Maximum = Count + 4
frmBarra.pbExportCancel = False
frmBarra.Show()
''Çoloca el nombre del archivo
_excel.Cells(rowIndex, 1) = sNombreArchivo
rowIndex = rowIndex + 1
_excel.Cells(rowIndex, 1) = ""
rowIndex = rowIndex + 1
''Declara Columnas
For Each dc In dt.Columns
colIndex = colIndex + 1
_excel.Cells(rowIndex, colIndex) = dc.ColumnName
Next
rowIndex = rowIndex + 1
''Escribe Encabezados
For Each dr In dt.Rows
colIndex = 0
For Each dc In dt.Columns
colIndex = colIndex + 1
_excel.Cells(rowIndex, colIndex) = dr(dc.ColumnName)
Next
rowIndex = rowIndex + 1
If (rowIndex Mod 20) = 0 Then
System.Windows.Forms.Application.DoEvents()
If frmBarra.pbExportCancel Then
If MessageBox.Show("¿Desea cancelar la exportación?", "Minds", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes Then
Exit For
Else
frmBarra.pbExportCancel = False
End If
End If
'se va incrementando los cuadritos de la barra
frmBarra.pbrAvance.Value = rowIndex
'Se saca el porcentaje
frmBarra.Text = "Exportando a Excel: " & CInt(((rowIndex) * 100) / frmBarra.pbrAvance.Maximum) & " %"
End If
Next
''Autoajusta el tamaño de las columnas
wSheet.Columns.AutoFit()
' ''Termina excel
'Dim strFileName = SPDestination & sNombreArchivo
'If System.IO.File.Exists(strFileName) Then
' System.IO.File.Delete(strFileName)
'End If
''Guarda el archivo
''wBook.Save() ''.SaveAs(strFileName)
''wBook.Close()
''_excel.Quit()
System.Windows.Forms.Application.DoEvents()
frmBarra.Close() 'Cerramos el form de la barra de pregreso
''Que se muestre el excel
_excel.Visible = True
''exportacion exitosa
ExportaExcel = True
'Dispose of unneeded objects
ExportDataTable.Dispose()
ExportDataTable = Nothing
Catch ex As Exception
sError = "Error: " & ex.Message & "Stored Procedure Running Process " & MessageBoxButtons.OK
End Try
End Function
End Class