none
Abrir archivo Excel creado en Tiempo de Ejecución RRS feed

  • Pregunta

  • Hola.

    Estoy exportando un DataTable a un Excel, todo bien hasta aquí, pero deseo que ese mismo excel que estoy generando se abra como si fuera un archivo aparte, pero que no interfiera con la ejecución del programa principal; no se si me explico, es decir, deseo que al final la escritura de los datos en el Excel, este se "liberara" del programa principal.

    El código que tengo es el siguiente:

    Function exportarExcel(ByRef datos As DataTable, Optional reporte As String = "Hoja1")
    
            Dim appExcel As New Excel.Application
    
            appExcel.Workbooks.Add()
            appExcel.ActiveWorkbook.Sheets.Add()
            appExcel.ActiveSheet.Name = reporte
    
            With appExcel
                For fila As Integer = 0 To datos.Rows.Count - 1
                    For columna As Integer = 0 To datos.Columns.Count - 1
                        .Cells(fila + 1, columna + 1) = datos.Rows(fila).Item(columna).ToString
                    Next
                Next
            End With
    
            'Aqui debería Mostrar el Archivo como un Excel "independiente"
    
            appExcel.Quit()
    
            Return 0
        End Function

    Estoy trabajando con WinForms.

    De antemano muchas gracias.

    Saludos.


    • Editado Cesar Casas Q martes, 23 de febrero de 2016 17:37 Aclaracion de paltaforma
    martes, 23 de febrero de 2016 16:10

Respuestas

  • Prueba este codigo  y nos comentas
                Function exportarExcel(ByRef datos As DataTable, Optional reporte As String = "Hoja1")
    
    
            Dim appExcel As New Excel.Application
    
            appExcel.Workbooks.Add()
            appExcel.ActiveWorkbook.Sheets.Add()
            appExcel.ActiveSheet.Name = reporte
    
            With appExcel
                For fila As Integer = 0 To datos.Rows.Count - 1
                    For columna As Integer = 0 To datos.Columns.Count - 1
                        .Cells(fila + 1, columna + 1) = datos.Rows(fila).Item(columna).ToString
                    Next
                Next
            End With
    
            appExcel.Visible = True
            appExcel.UserControl = True
            appExcel.Quit()
    
            Return 0
        End Function


    EFRAIN MEJIAS C VALENCIA - VENEZUELA

    • Marcado como respuesta Cesar Casas Q martes, 23 de febrero de 2016 18:10
    martes, 23 de febrero de 2016 18:04

Todas las respuestas

  • Hola Cesar,

    Una vez generada la hoja, después de hacer appExcel.Quit debes liberar memoria y abrir la hoja generada. Para poder abrirla le tienes que dar un nombre así:

    Function exportarExcel(ByRef datos As DataTable, Optional reporte As String = "Hoja1")
    
        Dim appExcel As New Excel.Application
        Dim xlWB As Excel.Workbook = Nothing
    
        appExcel.AlertBeforeOverwriting = False
        appExcel.DisplayAlerts = False
        xlWB = appExcel.Workbooks.Open(Filename:=NombreDelFichero)
    
        appExcel.Workbooks.Add()
        appExcel.ActiveWorkbook.Sheets.Add()
        appExcel.ActiveSheet.Name = reporte
    
        With appExcel
            For fila As Integer = 0 To datos.Rows.Count - 1
                For columna As Integer = 0 To datos.Columns.Count - 1
                    .Cells(fila + 1, columna + 1) = datos.Rows(fila).Item(columna).ToString
                Next
            Next
        End With
    
        xlWB.Save()
    
        appExcel.Quit()
    
        appExcel = Nothing
    
        System.Diagnostics.Process.Start(NombreDelFichero)
    
        Return 0
    End Function




    Saludos, Javier J

    martes, 23 de febrero de 2016 17:04
  • Hola Javier.

    Pero tendría que guardarla forsozamente en el Disco Duro??? Sabes si existe alguna forma para abrirlo sn tener que guardarlo localmente???

    Algo así como lo que se hace en ASPX, que se genera el archivo en runtime y se envía al cliente sin necesidad de guardarlo en el servidor... Por cierto, olvidé que estoy trabajando con WinForms...

    martes, 23 de febrero de 2016 17:36
  • Prueba este codigo  y nos comentas
                Function exportarExcel(ByRef datos As DataTable, Optional reporte As String = "Hoja1")
    
    
            Dim appExcel As New Excel.Application
    
            appExcel.Workbooks.Add()
            appExcel.ActiveWorkbook.Sheets.Add()
            appExcel.ActiveSheet.Name = reporte
    
            With appExcel
                For fila As Integer = 0 To datos.Rows.Count - 1
                    For columna As Integer = 0 To datos.Columns.Count - 1
                        .Cells(fila + 1, columna + 1) = datos.Rows(fila).Item(columna).ToString
                    Next
                Next
            End With
    
            appExcel.Visible = True
            appExcel.UserControl = True
            appExcel.Quit()
    
            Return 0
        End Function


    EFRAIN MEJIAS C VALENCIA - VENEZUELA

    • Marcado como respuesta Cesar Casas Q martes, 23 de febrero de 2016 18:10
    martes, 23 de febrero de 2016 18:04
  • Muchas gracias. Funcionó a la perfección :)
    martes, 23 de febrero de 2016 18:11
  • Puedes hacerlo visible mientras lo creas haciendo appExcel.Visible = True pero si no lo grabas no vas a poder enviarlo a ningún otro ordenador.

    Saludos, Javier J

    martes, 23 de febrero de 2016 18:39