Importer un fichier excel depuis un poste et l'ajouter sur la bd du serveur

Soyez le premier à donner votre avis sur cette source.

Snippet vu 23 991 fois - Téléchargée 17 fois

Contenu du snippet

Bon ben comme le titre le dit... ;)
Je voulais pas enregistrer le fichier excel sur le serveur car je voulais juste en extraire les données mais j'ai comme pas eu le choix car j'ai pas trouvé comment... Si qqu saurait comment s'y prendre bien vouloir m'en faire part ;)

Source / Exemple :


<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Data.OleDb" %>

<script runat="server">

    Sub Upload_Click(ByVal Sender As Object, ByVal e As EventArgs)

        'Le nom du fichier
        FileName.InnerHtml = MonFichier.PostedFile.FileName
        Dim strFileName As String = MonFichier.PostedFile.FileName
        'Ceci est le span où j'affiche les messages
        Span1.InnerHtml = ""
        
        Try
            'On vérifie s'il envoi vraiment un fichier et si c'est un fichier excel.
            If (Len(strFileName) = 0) Then
                Throw New Exception("Spécifier un fichier.")
            ElseIf (Right(LCase(strFileName), 4) <> ".xls") Then
                Throw New Exception("Ce n'est pas un fichier excel.")
            End If

            Try
                'On essai d'enregistrer le fichier dans le dossier \fichierstemp temporairement
                MonFichier.PostedFile.SaveAs(Server.MapPath("./fichierstemp") & "\" & MonFichier.PostedFile.FileName)
                Span1.InnerHtml = Span1.InnerHtml & "Le fichier a été téléchargé avec succès.<br>"
            Catch Exp As Exception
                Span1.InnerHtml = Span1.InnerHtml & "Impossible de télécharger le fichier.<br>"
            End Try

            ' Création de la connexion Ole DB sur mon fichier excel
            Dim strConn As String = "Provider=Microsoft.Jet.OleDb.4.0;" _
                                  & "data source=" & Server.MapPath("./fichierstemp") & "\" & MonFichier.PostedFile.FileName & ";" _
                                  & "Extended Properties=Excel 8.0;"
        
            Dim objConn As New OleDbConnection(strConn)
            'Ma requete où traduction étant la région où se trouvent mes cellules
            Dim strSql As String = "SELECT * FROM traduction"
            Dim objCmd As New OleDbCommand(strSql, objConn)
        
            ' Création de la connexion Ole DB sur ma BD
            Dim strConn2 As String = "Provider=Microsoft.Jet.OLEDB.4.0;" _
                                  & "Data Source=" & Server.MapPath("..\BD\glossaire.mdb")
            Dim objConn2 As New OleDbConnection(strConn2)
            Dim objCmd2 As New OleDbCommand
        
            'Va contenir les résultats de ma requete
            Dim sourceReader As OleDbDataReader
        
            Try
                'Ouvre la connexion et exécute la requête
                objConn.Open()
                sourceReader = objCmd.ExecuteReader()
            
                Try
                    'tente d'ouvrir la BD
                    objConn2.Open()
                Catch ex As Exception
                    Span1.InnerHtml = Span1.InnerHtml & "Impossible d'ouvrire la BD.<br>"
                End Try
            
                Try
                    'Lit le résultat de ma requete sur le fichier excel et l'insère dans ma BD
                    While sourceReader.Read()
                        'bon ici un peu de niaisage pour faire ma requete...
                        Dim strSql2 As String = "INSERT INTO glossaire1 (Anglais, Francais, Source) VALUES ("
                        Dim col1, col2, col3 As String
                        If Not IsDBNull(sourceReader.Item(0)) Then
                            col1 = "'" & Replace(sourceReader.Item(0), "'", "''") & "'"
                        Else
                            col1 = "null"
                        End If
                        If Not IsDBNull(sourceReader.Item(1)) Then
                            col2 = "'" & Replace(sourceReader.Item(1), "'", "''") & "'"
                        Else
                            col2 = "null"
                        End If
                        If Not IsDBNull(sourceReader.Item(2)) Then
                            col3 = "'" & Replace(sourceReader.Item(2), "'", "''") & "'"
                        Else
                            col3 = "null"
                        End If
                        strSql2 = strSql2 & col1 & "," & col2 & "," & col3 & ")"
            
                        objCmd2 = New OleDbCommand(strSql2, objConn2)
                
                        Try
                            'On essai d'insérer la ligne dans ma BD
                            objCmd2.ExecuteNonQuery()
                        Catch ex As Exception
                            Span1.InnerHtml = Span1.InnerHtml & "Impossible d'ajouter dans la BD.<br>"
                        End Try
                
                    End While
                
                Catch ex As Exception
                    Span1.InnerHtml = Span1.InnerHtml & "Impossible de créer la requête.<br>"
                End Try
            
            Catch ex As Exception
                Span1.InnerHtml = Span1.InnerHtml & "Impossible d'ouvrir le fichier excel.<br>"
            Finally
                'Ferme les connexions
                objConn.Dispose()
                objConn2.Dispose()
            End Try
        

            Try
                'On tente de supprimer le fichier
                Dim deletefichier As New FileInfo(Server.MapPath("./fichierstemp") & "\" & MonFichier.PostedFile.FileName)
                deletefichier.Delete()
                Span1.InnerHtml = Span1.InnerHtml & "Fichier supprimé.<br>"
            Catch ex As Exception
                Span1.InnerHtml = Span1.InnerHtml & "Impossible de supprimer le fichier.<br>"
            End Try
        
        Catch ex As Exception
            Span1.InnerHtml = ex.Message
        End Try

    End Sub
    
</script>

<html>
<head><title>Insérer un fichier excel dans une BD.</title>
</head>
<body>
    <form runat="server" EncType="Multipart/Form-Data" RunAt="Server">
        <!-- Insert content here -->
        Choisir le Fichier :
        <asp:FileUpload ID="MonFichier" RunAt="Server"></asp:FileUpload>
        <asp:Button ID="UploadButton" Text="Upload" OnClick="Upload_Click" RunAt="Server"></asp:Button>

        <br />

        <span ID="FileName" RunAt="Server" /><br />
        <span ID="Span1" RunAt="Server" /><br />

    </form>
              
</body>
</html>

Conclusion :


Bon je suis pas un guru de l'asp .net donc si vous avez des suggestions de meilleurs codes n'hésiter pas à m'en faire part! :)

A voir également

Ajouter un commentaire

Commentaire

cs510
Messages postés
2
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
30 mai 2008
-
J' ai essaye ce code mais il se plante , la copie ne se fait pas , le répertoire fichierstemp a t il une place specifique ?

merci de me repondre

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.