Foros del Web » Programación para mayores de 30 ;) » .NET »

Exportar de DataTable a Excel

Estas en el tema de Exportar de DataTable a Excel en el foro de .NET en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 11/02/2010, 02:59
 
Fecha de Ingreso: junio-2007
Mensajes: 327
Antigüedad: 16 años, 10 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
  #2 (permalink)  
Antiguo 11/02/2010, 03:46
 
Fecha de Ingreso: julio-2009
Mensajes: 60
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Exportar de DataTable a Excel

yo te pongo el codigo que tengo para exportar a excel dandole click a un boton.Yo cargo los datos en un dataset.Por si te puede valer.

Protected Sub ImageButton1_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs)
Try
Dim i, j As Integer
Dim ls_linea, ls_color1, ls_color2, ls_color As String
Dim li_color As Integer = 1
'Dim ofile As File
'Dim oDir As DirectoryInfo
'Dim clase_envio As New cEnvio_Correo(Server.MapPath("~"))
'SINO EXISTE LA CARPETA temporal del usuario ENTONCES SE CREA
'oDir = New DirectoryInfo(Server.MapPath("~") & ConfigurationManager.AppSettings("PATH_DOCUMENTOS" ) & Session("usuario") & "\TEMPORAL\")

'If ofile.Exists(Server.MapPath("~") & ConfigurationManager.AppSettings("PATH_DOCUMENTOS" ) & Session("usuario") & "\TEMPORAL\objetivos.xls") Then
' ofile.Delete(Server.MapPath("~") & ConfigurationManager.AppSettings("PATH_DOCUMENTOS" ) & Session("usuario") & "\TEMPORAL\objetivos.xls")
' End If


ls_color1 = "LightSteelBlue"
ls_color2 = "Lavender"
Response.Clear()

Response.AddHeader("Content-Disposition", "attachment; filename=objetivo.xls")

Response.ContentType = "application/vnd.ms-excel"

'Response.Write("<table cellspacing='0' rules='all' border='1' id='GRID_SQL' style='background-color:#666696;border-color:White;border-collapse:collapse;'>")
Response.Write("<table border='0' id='GRID_SQL'>")
' Response.Write("<tr style='color:MidnightBlue;background-color:CornflowerBlue;border-color:White;font-weight:normal;'>")
Response.Write("<tr>")
Response.Write("<td style='background-color: #6666ff; font-weight: bold; font-size: 14px;text-align: center; vertical-align: middle; width: 100px; border-top-style: solid; border-right-style: solid; border-left-style: solid; border-bottom-style: solid;'>Código Referencia</td><td style='background-color: #6666ff; font-weight: bold; font-size: 14px;text-align: center; vertical-align: middle; width: 220px; border-top-style: solid; border-right-style: solid; border-left-style: solid; border-bottom-style: solid;'>Desc. Cliente</td><td style='background-color: #6666ff; font-weight: bold; font-size: 14px;text-align: center; vertical-align: middle; width: 100px; border-top-style: solid; border-right-style: solid; border-left-style: solid; border-bottom-style: solid;'>Desc. Provincia</td><td style='background-color: #6666ff; font-weight: bold; font-size: 14px;text-align: center; vertical-align: middle; width: 90px; border-top-style: solid; border-right-style: solid; border-left-style: solid; border-bottom-style: solid;'>Fecha Creación</td><td style='background-color: #6666ff; font-weight: bold; font-size: 14px;text-align: center; vertical-align: middle; width: 160px; border-top-style: solid; border-right-style: solid; border-left-style: solid; border-bottom-style: solid;'>Estado</td><td style='background-color: #6666ff; font-weight: bold; font-size: 14px;text-align: center; vertical-align: middle; width: 160px; border-top-style: solid; border-right-style: solid; border-left-style: solid; border-bottom-style: solid;'>Solicitante</td><td style='background-color: #6666ff; font-weight: bold; font-size: 14px;text-align: center; vertical-align: middle; width: 110px; border-top-style: solid; border-right-style: solid; border-left-style: solid; border-bottom-style: solid;'>Objetivo Ventas</td><td style='background-color: #6666ff; font-weight: bold; font-size: 14px;text-align: center; vertical-align: middle; width: 110px; border-top-style: solid; border-right-style: solid; border-left-style: solid; border-bottom-style: solid;'>Rappel Generado</td>")
Response.Write("</tr>")




For i = 0 To 9
If li_color = 1 Then
ls_color = ls_color1
li_color = 2
Else
ls_color = ls_color2
li_color = 1
End If
Response.Write(" <tr>")
For j = 0 To 9
'CENTRAMOS LA COLUMNA código de contratro, PROVINCIA Y FECHA
If j = 0 Or j = 2 Or j = 3 Then
Response.Write(" <td style='background-color:" & ls_color & ";text-align: center;vertical-align: middle;border-right-style: solid; border-left-style: solid; border-bottom-style: solid;'>aa</td>")
Else

Response.Write(" <td style='background-color:" & ls_color & "; vertical-align: middle;border-right-style: solid; border-left-style: solid; border-bottom-style: solid;'>aa</td>")
End If
Next j
Response.Write(" </tr>")
Next i
Response.Write(" <tr >")
For j = 0 To 9
Response.Write(" <td style='width: 100px; border-left-style: none; border-bottom-style: none;'></td>")
Next j
Response.Write(" <td style='FONT-WEIGHT: bold; FONT-SIZE: 15px; BACKGROUND-COLOR: #6666ff; TEXT-ALIGN: right;border-right-style: solid; border-left-style: solid; border-bottom-style: solid;'>TOTAL</td>")
Response.Write(" <td style='FONT-WEIGHT: bold; FONT-SIZE: 15px; BACKGROUND-COLOR: #6666ff; TEXT-ALIGN: right; border-right-style: solid; border-left-style: solid; border-bottom-style: solid;'>xx</td>")
Response.Write(" <td style='FONT-WEIGHT: bold; FONT-SIZE: 15px; BACKGROUND-COLOR: #6666ff; TEXT-ALIGN: right; border-right-style: solid; border-left-style: solid; border-bottom-style: solid;'>yy</td>")
Response.Write(" </tr>")
Response.Write("</table>")

Response.End()
Catch ex As Exception

End Try
End Sub
  #3 (permalink)  
Antiguo 11/02/2010, 04:18
 
Fecha de Ingreso: junio-2007
Mensajes: 327
Antigüedad: 16 años, 10 meses
Puntos: 0
Respuesta: Exportar de DataTable a Excel

Muchas gracias compañero. Voy a echarle un ojo y si me sirve, te lo comento ;)
  #4 (permalink)  
Antiguo 11/02/2010, 06:00
 
Fecha de Ingreso: junio-2007
Mensajes: 327
Antigüedad: 16 años, 10 meses
Puntos: 0
Respuesta: Exportar de DataTable a Excel

Lo he probado y me funciona. Adapté tu idea a lo que necesito, y recorriendo un dataTable, voy creando el excel y se abre bien.
¿qué pegas tiene? Pues unas poquitas.

1- Que no me funciona como excel puro y duro. Tiene el fondo en blanco, y reconoce los decimales como puntos y no como comas, y bueno algunas cositas más de estas. Es un texto pasado a Excel, y no un excel que vas creando celda por celda, que es lo suyo.

2- No me funciona luego aplicarle fórmulas, ya que lo reconoce como texto. Es decir, para mostrar datos biene bien, pero si luego quieres operar con él como un excel normal, sirve de poco, o no sirve.

En resúmen, funciona y para salir del apaño va fenomenal. Mil gracias. Pero seguiré investigando a ver si consigo dar con la razón por la cuál mi hoja exce "auténtica" no se abre en web con las funciones que he puesto. En local de puta madre, pero en Web, sin dar fallo alguno, símplemente la hoja no aparece, ni el proceso se ejecuta.
  #5 (permalink)  
Antiguo 16/02/2010, 03:28
 
Fecha de Ingreso: julio-2009
Mensajes: 60
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Exportar de DataTable a Excel

si claro lo que hago es exportar datos de una base de datos, si el excel tiene formulas no funcionaria.Bueno algo es algo.
Un saludo.

Etiquetas: datatable, excel
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:08.