Como cargar un archivo de Excel a ASP.NET de forma dinámica en VB.

17 07 2009

He creado una clase de carga de archivos de tipo Excel 2007

Public Shared Function ChecarExtension(ByVal extension As String) As Boolean

        Select Case extension.ToLower()
            Case ".xlsx"
                Return True
            Case Else
                Return False
        End Select

    End Function

Crear una función para que solo acepte archivos con extensión .xlsx

La siguiente función es cargar el archivo, yo le he agregado de checar si existe antes algun archivo que se haya cargado en la carpeta para que lo elimine y pueda cargar el nuevo archivo.

Public Shared Sub Cargar(ByVal archivo As FileUpload, ByVal instancia As HttpRequest, ByVal tabla As GridView)
        Dim _carpeta As String = "Recursos\Archivos\"
        Dim _directorioGral As String = instancia.PhysicalApplicationPath

        Try
            If archivo.HasFile Then
                Dim _extension As String = Path.GetExtension(archivo.FileName)
                If ChecarExtension(_extension) Then
                    Dim _directorioParaGuardar As String = _directorioGral + _carpeta + archivo.FileName
                    '----------------------Eliminar Archivos Existentes------------------------------
                    EliminarArchivos(instancia)

                    '-----------------------Guardar nuevo archivo------------------------------
                    archivo.SaveAs(_directorioParaGuardar)

                    tabla.DataSource = MostrarExcel(_directorioParaGuardar)
                    tabla.DataBind()

                End If

            Else

            End If
        Catch ex As Exception
            Throw New Excepciones("Error al cargar el archivo ", ex)
        End Try

    End Sub

He aquí el metodo de eliminar los archivos que mando a llamar en la función anterior.

 Public Shared Sub EliminarArchivos(ByVal instancia As HttpRequest)

        Dim _carpeta As String = "\Recursos\Archivos\"
        Dim _directorioGral As String = instancia.PhysicalApplicationPath + _carpeta

        Dim directorio As New DirectoryInfo(_directorioGral)
        Dim archivos As FileInfo() = directorio.GetFiles()
        Dim archivo As FileInfo

        For Each archivo In archivos
            archivo.Delete()
        Next

    End Sub

Como se han de ver dado cuenta en la función de carga, mando a llamar un método de mostrarExcel.

Esta función se conecta al archivo como recurso de datos y extrae la información para mostrarla en un GridView, de la siguiente manera:

 Public Shared Function MostrarExcel(ByVal ruta As String) As DataTable

        Dim _cadenaconexion As String = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=Excel 12.0", ruta)
        Dim _oledbConn As New OleDbConnection(_cadenaconexion)
        Dim dt As New DataTable()

        Try
            _oledbConn.Open()
            Dim _cmd As OleDbCommand = New OleDbCommand("SELECT * FROM [Sheet1$]", _oledbConn)
            Dim _oleda As OleDbDataAdapter = New OleDbDataAdapter()
            _oleda.SelectCommand = _cmd

            _oleda.Fill(dt)

            _oleda.Dispose()
            _cmd.Dispose()
        Catch ex As Exception

        Finally

            _oledbConn.Close()
            _oledbConn.Dispose()
        End Try
        Return dt
    End Function

He agregado un control de tipo FileUpload, un botón y un gridview para hacer la prueba.

Dentro del botón mandamos a llamar el método de cargar el archivo.

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        CargarArchivos.Cargar(FileUpload1, Me.Request, Me.GridView1)
    End Sub

Resultado final:

cargarArchivoExcelconVBenASPNET

Espero les sirva de utilidad.


Actions

Information

Leave a comment