Ver Mensaje Individual
  #1 (permalink)  
Antiguo 10/02/2010, 10:52
Javichechu
 
Fecha de Ingreso: junio-2007
Mensajes: 327
Antigüedad: 17 años, 6 meses
Puntos: 0
Exportar de DataTable a Excel

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

Última edición por Javichechu; 11/02/2010 a las 02:58