Public Function ObtColExcel(ByVal intValor As Integer) As String
If intValor < 1 Then Throw New Exception("El valor mínimo para la columna debe ser 1")
Dim intDiv, intMod As Integer
If intValor <= 26 Then Return Chr(64 + intValor)
intDiv = (intValor - 1) 26 'numero de letras
intMod = intValor Mod 26
intMod = IIf(intMod = 0, 26, intMod)
Return Chr(64 + intDiv) & Chr(64 + intMod)
End Function
Friend Sub ExpExc(ByRef dg As DataGridView)
Dim oExcel As Object
Dim oHoja As Object
Dim strColumna As String
Try
If dg.RowCount = 0 Then Exit Sub
'Se crea el documento de Excel
oExcel = CreateObject("Excel.Application")
oHoja = oExcel.Workbooks.Add
oExcel.Visible = True
Dim r As Integer = 0
Dim c As Integer = 0
For c = 0 To dg.ColumnCount - 1
For r = 0 To dg.RowCount - 2
strColumna = ObtColExcel(c + 1)
oExcel.Range(strColumna & r + 1).FormulaR1C1 = dg.Rows(r).Cells(c).Value.ToString()
Next
Next
Catch ex As Exception
MsgBox(ex.Message)
Finally
oHoja = Nothing
oExcel = Nothing
GC.Collect()
End Try
End Sub