Saludos amigos.
Tengo un código para exportar datos de un datatable a un Excel, y el caso es que me funciona bien en local, pero no cuando cuelgo la aplicación. Al principio tuve los problemas de siempre con los permisos Com y demás, pero una vez solucionado, ya no me da ningún error, y parece que ejecuta, pero la aplicación excel no se muestra por pantalla. En local si, pero desde el servidor, es como que algo no va bien, y no llega a mostrar el excel por pantalla. Mis dos funciones son las siguientes:
Código:
Public Sub ExportarToExcelII(ByVal DT As DataTable)
'/////////////////////////////
'// Creamos el Objeto Excel
'/////////////////////////////
Dim m_Excel As New Microsoft.Office.Interop.Excel.Application()
Dim objLibroExcel
Dim objHojaExcel
objLibroExcel = m_Excel.Workbooks.Add()
objHojaExcel = objLibroExcel.Worksheets(1)
objHojaExcel.Name = "Customers"
objHojaExcel.Visible = Microsoft.Office.Interop.Excel.XlSheetVisibility.xlSheetVisible
objHojaExcel.Activate()
Try
'/////////////////////////////////////////////////////////
'// Definimos dos variables para controlar fila y columna
'/////////////////////////////////////////////////////////
Dim fila As Integer = 1
Dim columna As Integer = 1
If DT.Rows.Count > 0 Then
'/////////////////////////////////////////////////
'// Armamos la linea con los títulos de columnas
'/////////////////////////////////////////////////
objHojaExcel.Range("A1").Select()
Dim Dc As DataColumn
For Each Dc In DT.Columns
objHojaExcel.Range(nombreColumna(columna) & 1).Value = Dc.ColumnName
columna += 1
Next
fila += 1
'/////////////////////////////////////////////
'// Le damos formato a la fila de los títulos
'/////////////////////////////////////////////
Dim objRango As Microsoft.Office.Interop.Excel.Range = objHojaExcel.Range("A1:" & nombreColumna(DT.Columns.Count) & "1")
objRango.Font.Bold = True
objRango.Cells.Interior.ColorIndex = 35
objRango.Cells.Borders(Microsoft.Office.Interop.Excel.XlBordersIndex.xlDiagonalDown).LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlLineStyleNone
objRango.Cells.Borders(Microsoft.Office.Interop.Excel.XlBordersIndex.xlDiagonalUp).LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlLineStyleNone
objRango.Cells.Borders(Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeLeft).LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlLineStyleNone
objRango.Cells.Borders(Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeRight).LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous
objRango.Cells.Borders(Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeTop).LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous
objRango.Cells.Borders(Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeBottom).LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous
'//////////////////////////////////////////
'// Cargamos todas las filas del datatable
'//////////////////////////////////////////
'ProgressBar1.Maximum = ds.Tables(0).Rows.Count
columna = 1
' ProgressBar1.Value = 0
Dim dr As DataRow
For Each dr In DT.Rows
columna = 1
For Each Dc In DT.Columns
objHojaExcel.Range(nombreColumna(columna) & fila).Value = dr(Dc.ColumnName)
columna += 1
Next
fila += 1
'ProgressBar1.Value += 1
Next
'//////////////////////////////////////
'// Ajustamos automaticamente el ancho
'// de todas las columnas utilizada
'//////////////////////////////////////
objRango = objHojaExcel.Range("A1:" & nombreColumna(DT.Columns.Count) & DT.Rows.Count.ToString)
objRango.Select()
objRango.Columns.AutoFit()
End If
'/////////////////////////////////////
'// Le decimos a Excel que se muestre
'/////////////////////////////////////
'MsgBox("Exportación a Excel completa", MsgBoxStyle.Information, "BBVA")
m_Excel.Visible = True
Catch ex As Exception
m_Excel.Quit()
m_Excel = Nothing
objLibroExcel = Nothing
objHojaExcel = Nothing
Throw ex
End Try
Código:
Public Function nombreColumna(ByVal numero As Integer) As String
Dim columna(256) As String
columna(1) = "A"
columna(2) = "B"
columna(3) = "C"
columna(4) = "D"
columna(5) = "E"
columna(6) = "F"
columna(7) = "G"
columna(8) = "H"
columna(9) = "I"
columna(10) = "J"
columna(11) = "K"
columna(12) = "L"
columna(13) = "M"
columna(14) = "N"
columna(15) = "O"
columna(16) = "P"
columna(17) = "Q"
columna(18) = "R"
columna(19) = "S"
columna(20) = "T"
columna(21) = "U"
columna(22) = "V"
columna(23) = "W"
columna(24) = "X"
columna(25) = "Y"
columna(26) = "Z"
columna(27) = "AA"
columna(28) = "AB"
ET... ETC (Lo acorto)
Return columna(numero)
End Function
¿Sabéis donde puede estar el error o una forma más sencilla de hacerlo?
Gracias