[.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 172 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

cosmos_final
Messages postés
1
Date d'inscription
mercredi 1 mars 2006
Statut
Membre
Dernière intervention
28 avril 2010

Je reve ou CommandText a une taille limite ?
J'essaye avec une requete de 15 lignes environ et sa me fait une erreur de type, alors que si je suprime des caracteres il n'y a plus d'erreur ...
Quelqu'un a une idée pour executé des requetes plus longue ?
greg38bj
Messages postés
84
Date d'inscription
jeudi 11 mars 2004
Statut
Membre
Dernière intervention
17 novembre 2008

salut
cette source m'a été trés utile, mais j'aimerais pouvoir changer une image présente sur ma feuille excel par cette méthode.
Est ce possible ?
l'enregistreur de macro ne me fait rien sur les images ...
merci de m'aider si cela est possible

greg38bj
cs_Benouille
Messages postés
216
Date d'inscription
jeudi 24 octobre 2002
Statut
Membre
Dernière intervention
7 septembre 2007
1
je ne vois pas de différence quelque soit la source des données.
reste juste à trouver la chaine de connection vers ton dataset à mon avis.

en même temps je l'ai jamais fait (datatable vers excel direct) et si j'avais à le faire, je crois que je ferais pas comme ça de toutes façons.


je pense que tu dois avoir un moyen simple de le faire, essaie par exemple de mettre ta datatable dans la 1ère cellule. il se pourrait qu'excell s'aperçoive qu'il s'agit d'un tableau et te le dispatche tout seul.

Dans tous les cas il doit y avoir une méthode plus rapide, moins pénible et surtout moins vilaine que le remplissage cellule par cellule.


Benouille, quelques grammes de grenouille dans un monde de brute
cs_M51
Messages postés
64
Date d'inscription
dimanche 20 novembre 2005
Statut
Membre
Dernière intervention
10 août 2007

Salut,

je souhaite Exporter une DataTable vers Excel (cette DataTable est construite d'après des données de Dataset retravaillé)
Existe-t'il un moyen de ne pas passer par de la cellule à cellule ?
Le code ici doit se connecter à une base (voire base Access dans le cas de xtrusion)

Merci d'avance
cs_Benouille
Messages postés
216
Date d'inscription
jeudi 24 octobre 2002
Statut
Membre
Dernière intervention
7 septembre 2007
1
ah

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.