[.net] export excel xls rapide par msquery (proc stockées tables vues requetes ...)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 26 116 fois - Téléchargée 36 fois

Contenu du snippet

régulièrement y a des codes qui tombent qui montrent comment remplir un tableau excel case par case, mais des qu'il y a quelques milliers de lignes c'est lent.

Le code ouvre l'aplication excel en cours ou une nouvelle.
Il appelle la proc sur le serveur
Il renvoie les milliers de lignes et affiche le tout en moins d'une seconde.
Le code est totalement accesible par des débutants.

Enjoy It
[b]VBenouille./b
[i]ps: je vous mets juste le code de la fonction, car je le tire directement de mon projet pro et je l'adapte a peine (je change juste les noms des variables) /i

Source / Exemple :


Private Sub ExportExcel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuExportXls.Click
    'wait'n see
        Me.Cursor = System.Windows.Forms.Cursors.WaitCursor

    'ouverture d'excel
    Dim xlApp As Excel.Application

        Try
            xlApp = GetObject(, "excel.application")
        Catch
            xlApp = New Excel.Application
        Finally
            xlApp.Visible = False
        End Try

    'ajout d'une page et sélection
    Dim xsSoldesComptes5 As Excel.Worksheet = xlApp.Workbooks.Add.ActiveSheet

    'requete serveur
        With xsSoldesComptes5.QueryTables.Add(Connection:= _
            "ODBC;DRIVER=SQL Server;SERVER=MonServeur;Integrated Security=SSPI;" & _
            "APP=Microsoft® Query;DATABASE=MaBase;Trusted_Connection=Yes" _
            , Destination:=xsSoldesComptes5.Range("A1"))

            .CommandText = "MaProcStockée"     ' ou la requete select * from machin si vous n'avez pas de proc

            .Name = "SoldesComptes5"
            .FieldNames = True
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .BackgroundQuery = True
            .RefreshStyle = Excel.XlCellInsertionMode.xlOverwriteCells
            .SavePassword = False
            .SaveData = False
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .PreserveColumnInfo = True
            .Refresh(BackgroundQuery:=False)
        End With

    ' affichage
        Me.Cursor = System.Windows.Forms.Cursors.Default
        xlApp.Visible = True
    End Sub

Conclusion :


demande d'ajouter la librairie Microsoft excel 9.
la fonction réagit à un clic sur un menu qui s'appelle mnuExportExcel, il faut adapter la déclaration à votre projet de test.
les droits d'acces à la base sont gérés par windows (sspi), il faut donc que l'utilistateur aie les droits de faire la requête ou d'éxécuter la proc stockée comme moi.

le code est en prod chez moi.
dites moi si vous voyez des défauts ou si vous avez des remarques.

A voir également

Ajouter un commentaire

Commentaires

cs_Patrice99
Messages postés
1222
Date d'inscription
jeudi 23 août 2001
Statut
Membre
Dernière intervention
9 septembre 2018
-
Bien, je voulais justement un truc de ce genre, je vais voir si cela marche.

Dans le même genre, je rappele qu'ODBC permet de lire un fichier Excel quasi-instantanément, je ferais une démo bientot...

Au fait, tu n'as pas de problème avec Excel 9 en dotnet ?
Regarde ici :
XLDOTNET : QUITTER EXCEL SANS LAISSER D'INSTANCE EN RAM
www.vbfrance.com/code.aspx?id=27541
cs_Benouille
Messages postés
216
Date d'inscription
jeudi 24 octobre 2002
Statut
Membre
Dernière intervention
7 septembre 2007
1 -
si! si! cela pose des soucis effectivement: tant que l'appli est lancée, excel considère qu'il a un "appelant" et l'instance reste active meme une fois fermée.

ceci dit une fois l'appli et excel fermés, l'instance est libérée.

c'est aussi pour ça que j'en ouvre pas un nouveau par défaut et que je regarde d'abord si une instance d'excel est pas déja lancée (cf le try catch)

par contre pour ce qui est de marcher, ça marche bien; moi j'ai fait le test avec 65 000 lignes, je t'invite a le faire aussi, tu me diras ce que t'en penses.
cs_Patrice99
Messages postés
1222
Date d'inscription
jeudi 23 août 2001
Statut
Membre
Dernière intervention
9 septembre 2018
-
Oui mais attention, pendant qu'il y a une instance d'Excel qui reste plantée en RAM, cela risque d'empecher le fonctionnement normal d'Excel tant que ton appli est ouverte.

Dès que j'ai le temps, je teste ton soft.
SR2
Messages postés
46
Date d'inscription
samedi 17 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2006
1 -
Ca a l'air super votre truc
mais comment on récupère les résultats dans une liste box par exemple
merci
cs_Benouille
Messages postés
216
Date d'inscription
jeudi 24 octobre 2002
Statut
Membre
Dernière intervention
7 septembre 2007
1 -
pour une listbox c'est pas du tout la bonne methode :)
recherche sur ce site, sur msdn ou sur pimpernet, tu devrais trouver assez facilement.

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.