begin process at 2012 02 13 20:42:55
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

VB.NET

 > [.NET] EXPORT EXCEL XLS RAPIDE PAR MSQUERY (PROC STOCKÉES TABLES VUES REQUETES ...)

[.NET] EXPORT EXCEL XLS RAPIDE PAR MSQUERY (PROC STOCKÉES TABLES VUES REQUETES ...)


 Information sur la source

Note :
8,5 / 10 - par 2 personnes
8,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :VB.NET Source .NET ( DotNet ) Niveau :Débutant Date de création :10/12/2004 Date de mise à jour :10/12/2004 11:48:34 Vu :23 914

Auteur : Benouille

Ecrire un message privé
Commentaire sur cette source (40)
Ajouter un commentaire et/ou une note

 Description

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

  • 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
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.


 Historique

10 décembre 2004 11:48:37 :
rajout de l'annotation finale

 Sources du même auteur

Source .NET (Dotnet) [VB.NET] NUMERIXBOX - UNE TEXTBOX NUMÉRIQUE QUI GÈRE LES DÉC...
Source .NET (Dotnet) [.NET] VALIDER UNE DATE AVANT UTILISATION (RAPIDE - DÉBUTANT...

 Sources de la même categorie

Source .NET (Dotnet) MODIFICATION DATE DE WINDOWS EN VB.NET ET VBA par us_30
Source avec Zip Source avec une capture Source .NET (Dotnet) ENVOI DE MAIL AVEC PIÈCE JOINTE par EhJoe
Source .NET (Dotnet) AMUSONS NOUS AVEC UN LABEL ^^ par Adn56
Source avec Zip Source avec une capture Source .NET (Dotnet) UN NAVIGATEUR INTERNET EN VB.NET par azrti
Source avec Zip Source .NET (Dotnet) CONVERSION DE DEVISE MONAITAIRE VIA UN SERVICE WEB par bigmonkey7

Commentaires et avis

Commentaire de Patrice99 le 11/12/2004 11:07:57

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

Commentaire de Benouille le 13/12/2004 16:01:05

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.

Commentaire de Patrice99 le 13/12/2004 16:29:45

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.

Commentaire de SR2 le 04/01/2005 23:27:45

Ca a l'air super votre truc
mais comment on récupère les résultats dans une liste box par exemple
merci

Commentaire de Benouille le 05/01/2005 11:14:24

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.

Commentaire de Patrice99 le 08/01/2005 09:35:04

Ok, ça fonctionne très bien, mais je viens de m'apercevoir que sous Access, j'avais déjà une fonction pour exporter une requête directement sous Excel via CopyFromRecordset :

Private Sub CopierRqDansXL(sFeuilleXL$, sRq$, oWkb As Object, oXL As Object)
    
    Dim oSht As Object
    Dim intLastCol%, intLastRows%, iCols%
    Const conMAX_ROWS = 20000
    
    Dim Rq As DAO.Recordset
    On Error GoTo ErrCRqXL
    Set Rq = CurrentDb.OpenRecordset(sRq, dbOpenSnapshot)
    Set oSht = oWkb.Worksheets(sFeuilleXL)
    With oSht
        .Activate ' Activer la feuille XL
        ' Suppression du contenu précédent
        intLastCol = .UsedRange.Columns.Count
        intLastRows = .UsedRange.Rows.Count
        .Range(oXL.Cells(1, 1), oXL.Cells(conMAX_ROWS, intLastCol)).ClearContents
        ' Recopier le nom des champs de la table ou rq
        For iCols = 0 To Rq.Fields.Count - 1
            .Cells(1, iCols + 1).Value = Rq.Fields(iCols).Name
        Next iCols
        ' Recopier la table ou rq
        .Range("A2").CopyFromRecordset Rq
    End With
    
Fin:
    On Error Resume Next ' Au cas où la Rq ne serait pas encore ouverte
    Rq.Close
    Set oSht = Nothing
    Exit Sub

ErrCRqXL:
    AfficherMsgErreur Err, "CopierRqDansXL"
    Resume Fin

End Sub

Commentaire de Benouille le 12/01/2005 15:23:39

oula faut que je regarde ça.
c'est un truc générique le copy from recordset ?
ça peut être pas mal à utiliser si la gestion des droits s'avère insuffisante (ie si l'utilisateur n'a pas les droits sur la requete alors que l'applis les a).

je regarderais ça dans l'apres midi.
merci.

Commentaire de Benouille le 12/01/2005 15:38:03

visiblement il y a des soucis avec cette fonction
--------------------------------------------------------------------------------
Posté par : PIERRERAVAUX
le 08/08/2003 12:27:41
  Re : Exportation d'un recordset
Répondre à ce message - Imprimer ce message
--------------------------------------------------------------------------------
Bonjour,

J'ai un petit problème avec cette instruction Copyfromrecordset qui fonctionnait très bien avec une base ACCESS97 et qui ne fonctionne plus avec ACCESS2000

Est-ce à cause de cette library Microsoft Excel 9.0 que je n'ai pas sur mon poste.

Merci de votre aide

Cordialement
--------------------------------------------------------------------------------

en fait au dela de la version d'excel je suppose que le probleme vient plus de l'acces aux données. donc vérifie si ta fonction marche encore sur une version plus récente.
A part ça et le fait que cela ne récupère pas l'entete des champs, cela semble être assez simple comme méthode.

Commentaire de Patrice99 le 12/01/2005 15:47:14

Oui c'est générique, quelqu'un a fait une démo à ce sujet récemment :
www.vbfrance.com/code.aspx?ID=28744
En plus il est passé par ADODB, on n'est pas obligé de passer par Access, ca devrait donc marcher aussi en .Net

Je confirme que ca marche bien avec toutes les versions d'Access, je viens de livrer un logiciel avec à un client !

Par contre j'ai déjà rencontré un cas où ca ne marche plus sur un poste : on obtenait l'err n°430 (Requete ADO au lieu de DAO avec Excel 97 ???) et je n'ai jamais pu corriger cela (il faut reinstaller Excel dans ce cas je pense)

Commentaire de Benouille le 12/01/2005 16:04:18

je saurais m'en souvenir si je travaille avec un recordset local ou si pour une raison soudaine, l'utilisateur venait a avoir moins de droits que l'appli (mais avec moi il y a peu de chance: l'applis n'a pas de droits, seuls les droits utilisateurs comptent).

dans les autres cas ou je peux connecter excel à la base de données sans passer par vb, sachant en outre que cela permet une mise a jour ultérieure des données (une requete msquery pouvant être mise a jour), j'utiliserais msquery.

en plus en enlevant les options qui servent a rien, ça va un plus vite malgres tout (évite les entetes de colonnes); meme si je reconnais pour le coup que l'argument du gain de 4 secondes d'écriture de code peut être limite :)

a voir en perf aussi si c'est pareil, ou si c'est plus rapide.
En bref je garde les deux et je ferais selon le besoin ;)
merci pour ta réactivité et tes eclaircissements.

VBnouille

Commentaire de xtrusion le 27/01/2005 16:55:34

Salu!
Voici ma methode pr me connecter a ma base de données access :
========================================
Imports System.Data
Imports System.Data.OleDb
Imports System.Net

Public Class visudocs
    Inherits System.Windows.Forms.Form
    'declaration de la connection
    Private Connection As New OleDb.OleDbConnection
    'declaration du DataSet
    Private DtSet As New DataSet
    'declaration du dataAdapter
    Private Adapbiblio As New OleDb.OleDbDataAdapter("select Titre, Date, Public, Support, Thème, Service, Auteur, MaisondEdition, DatedePublication, RevuecontenantlArticle, Emplacement, NombredExemplaires, Résumé from Document order by Titre", Connection)

Private Sub visudocs_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        
        'on parametre la chaine de connection pour la base de donnée biblio.mdb
        Connection.ConnectionString = "provider=microsoft.jet.oledb.4.0;" & _
        "data source= " & Application.StartupPath & "\" & "biblio.mdb;"

        'rempli le dataset
        Adapbiblio.Fill(DtSet, "Document")

        'remplissage de la liste avec le dataset
        Dim Matable As DataTable
        Matable = DtSet.Tables("Document")
        Grid_docs.DataSource = Matable
end sub
========================================

Commen faire pr appliker cette premiere source déposée par benouille a mon projet sivouplé?

Je suppose ke tout se passe ici :
**************************
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"))
**************************
Mais commen faire?

C'est vraimen important les gars ! ;o)

Merci davance all !

Commentaire de Benouille le 28/01/2005 01:16:50

access n'est pas a proprement parlé un serveur, mais a priori ça ne change pas grand chose, remplace donc le nom du serveur de la base par tes noms et la proc stockée par ta requete et cela devrait marcher.

si cela ne fonctionne pas , va dans excel, ouvre une nouvelle macro, connecte toi depuis excel à ta base access, recupère le code et remplace le ici.
ça n'est pas plus compliqué que ça.
-----------------

Commentaire de xtrusion le 28/01/2005 13:50:43

merci a toi ms jcomprends pa commen tu ve ke je me connecte a ma bdd access a partir d'excel, ds outils macro, jvois pa koi faire, jpense avoir tout essayé ! :p

Et kd tu me dis de remplacer le nom du serveur par mes noms a moi, je mets koi ? g koi a remplacer conkretement steplé?

Merci de votre aide ! elle mé precieuse ! :p

Commentaire de xtrusion le 28/01/2005 13:54:07

paske la g mi ca ms ca marche pa, ca ouvre excel ms rien de plus :



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

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


Merci les gars ! ;o)

Commentaire de Benouille le 28/01/2005 17:33:12

la macro sert a récupérer le code.

tu ouvres un nouvelle macro pour commencer l'enregistrement.

ensuite tu vas dans excel, données, données externes, nouvelle requete. la tu dois choisir une source de données, tu choisis MS Access DAtabase, tu pointes sur ton .mdb, et tu fais une requete bidon (select * from matable ou matable est le nom d'une table de ta base access). à la fin tu dois avoir les données de ta tables acces dans excel.

tu arrete ta macro et tu regardes dans le code de la macro la chaine de connection qu'il a utilisé, tu remplaces ma chaine de connection par la tienne et cela devrait fonctionner.

je suppose que tu devrais avoir une différence ici: ODBC;DRIVER=SQL Server; parceque tu ne vas pas passer par odbc mais oledb et pas prendre le driver prévu pour sql server mais celui pour access.

je n'ai pas access donc je ne peux pas tester pour toi, mais tu devrais t'en sortir en faisant les choses calmement et en lisant bien tout.

Commentaire de xtrusion le 31/01/2005 13:54:04

Merci a toi ! voici le code :

With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _
        "ODBC;DSN=MS Access Database;DBQ=C:\Documents and Settings\Administrateur\Bureau\Projet 2005\Projet 2005\Biblio[FAL62]\bin\biblio.mdb" _
        ), Array( _
        ";DefaultDir=C:\Documents and Settings\Administrateur\Bureau\Projet 2005\Projet 2005\Biblio[FAL62]\bin;DriverId=25;FIL=MS Access" _
        ), Array(";MaxBufferSize=2048;PageTimeout=5;")), Destination:=Range("A1"))
        .CommandText = Array( _
        "SELECT Document.Titre, Document.Date, Document.Public, Document.Support, Document.Thème, Document.Service, Document.Auteur, Document.MaisondEdition, Document.NumRevue, Document.DatedePublication, Docu" _
        , _
        "ment.RevuecontenantlArticle, Document.Résumé, Document.Emplacement, Document.NombredExemplaires" & Chr(13) & "" & Chr(10) & "FROM Document Document" & Chr(13) & "" & Chr(10) & "ORDER BY Document.Titre" _
        )
        .Name = "Lancer la requête à partir de MS Access Database"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = True
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .Refresh BackgroundQuery:=False
    End With

Le soucis c kil me dit ke array est un type donc kil ne pe pa etre utiliser en tant qu'expression ... Et si je les vire les array, ca marche pa .... jcomprends pa ...
Ya kelke chose a faire ? ;o) toi t'en as pa ds ton code source des array .... moi jen ai partout ! lol

T'a pa une idée par hazard? :P

Merci davance !

Commentaire de Benouille le 31/01/2005 19:37:22

ah bin vi c'est plutot caca ton truc

la chaine de connection doit pas être si lourdement vétue, elle doit se retrouver quasi à poil: en string.

moi j'aurais fait comme toi: enlevé les tableaux (array)
"ODBC;DSN=MS Access Database;DBQ=C:\Documents and Settings\Administrateur\Bureau\Projet 2005\Projet 2005\Biblio[FAL62]\bin\biblio.mdb;DefaultDir=C:\Documents and Settings\Administrateur\Bureau\Projet 2005\Projet 2005\Biblio[FAL62]\bin;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;",Destination:=Range("A1"))

idem plus bas
        .CommandText = "SELECT Document.Titre, Document.Date, Document.Public, Document.Support, Document.Thème, Document.Service, Document.Auteur, Document.MaisondEdition, Document.NumRevue, Document.DatedePublication, Document.RevuecontenantlArticle, Document.Résumé, Document.Emplacement, Document.NombredExemplaires FROM Document ORDER BY Document.Titre"

s'il attends du string, il faut lui passer du string.

vbnouille, grenouille en string

Commentaire de xtrusion le 01/02/2005 09:08:53

T'es trop le meilleur Benouille ! :P

Ca fonctionne a merveille !

Dernière question, promis apré je t'embete plus ! ;o)

Ma base de donnée doit pouvoir être deplacée, donc j'essaye de lui mettre un chemin relatif, et quelque soit ce que j'essaye ca marche pas ... Jvoudré simplement kelle soit définie par défaut dans le repertoire de l'executable .... Donc je fé :

(Connection:="ODBC;DSN=MS Access Database;DBQ=Application.StartupPath\biblio.mdb;DefaultDir=Application.StartupPath;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;", Destination:=listedocs.Range("A1"))

Ms il a pa l'air d'apprecier le Application.StartupPath ... J'essaye de le mettre entre "&" et tout ms il aime pa trop trop trop ca ! lol Alor ke ds ma chaine de connection a BDD ca fonctionne ...
J'ai essayé ca aussi ms sans succès :

DBQ=Application.StartupPath & " \ " & biblio.mdb;DefaultDir=Application.StartupPath

Si ta une idée merci, sinon, laisse tomber ;o) tu en a deja assez fé ! Merci pour tout! (jdiré bien a charge de revanche ms ... jriske pa de pouvoir t'aider en VB apparement ! :p ) LOL

Commentaire de Benouille le 01/02/2005 11:06:37

le principe ici d'utiliser msquery à la différence des solutions habituelles de remplissage d'une feuille excell par parcourt d'un recordset (ou dataset maintenant), c'est d'utiliser la puissance de msquery pour qu'il fasse lui meme l'acces a la bdd (ici access).

ça veut dire que tu crées un fichier un excel par le code, et ce fichier excel vit ensuite sa vie tout seul, pouvant meme rafraichir ses données avec la base sans intervention de ton programme qui l'a construit.

ça veut dire aussi puisqu'il n'est pas lié a ton programme, qu'il ne le connait pas, la chaine de connection sera donc créée une fois pour toute.
(mais tu peux la modifier depuis ton classeur xls créé).

si c'est au moment de l'instalation (création du doc excel dans le rep de l'application qui peut être n'importe ou  mais qui ne bougera jamais une fois posé) que tu veux déterminer le app.path alors la tu peux le faire.

pour ça faut lui passer une chaine string qui contienne le bon chemin. dans ta chaine tu lui passes en dur "application.startuppath", c'est pas malin: c'est la valeur chaine de application.startuppath qui est interressante pas son nom en lui meme.

autrement dit:
sConnection = "odbc ... " & app.path & " ....
ou la valeur de app.path est insérée au bon endroit.

attention: comme dit plus haut, la chaine de connection est ensuite figée dans excel.

ça me dérange pas de t'aider dans la mesure ou t'attends pas de moi que je resolve tes problemes ou que je te programme ton truc à ta place; dans la mesure ou tu reflechis et que tu cherches les solutions par toi meme avant de poser les questions.
bonne prog.

ouaip tu pourras pas m'aider en vb: je suis passé a vb.net ;)
mais c'est pas grave, tu pourras aider quelqu'un d'autre, c'est pas juste entre nous deux que ça se passe.

Commentaire de xtrusion le 01/02/2005 13:26:50

OK merci pr tout en tout cas ! La jvé chercher c juste un pb de syntaxe ...
++

Commentaire de xtrusion le 03/02/2005 09:47:56

bon ben voila, ca fonctionne a merveille ! Merci a vous tous car joré jamais pu y arriver tout seul ! :P

Jsé meme pa kommen vous avé été capable de faire un truc pareil ... ( et encore jme doute ke c pa ce kil y a de plus difficile a faire ... ms kd meme ! lol ) il me reste plus ka virer excel de la RAM automatikement pr eviter kil plante ...

MERCI surtout a BENOUILLE pr sa patience et ses connaissances ! ^^

++

Commentaire de Patrice99 le 03/02/2005 11:37:11

XLDOTNET : QUITTER EXCEL SANS LAISSER D'INSTANCE EN RAM
www.vbfrance.com/code.aspx?id=27541

Commentaire de guigui43 le 15/02/2005 11:13:50

J'ai pas cette librairie  Microsoft excel 9 !!!
Comment faire ou peut-on me l'envoyer?

Commentaire de DocPhiphi le 15/02/2005 22:08:23

Pour avoir la librairier Microsoft Excel 9 il faut avoir Excel installé sur son poste, donc l'acheter......

Commentaire de isame le 22/02/2006 18:12:47

bonsoir si quelqu'un pourrait m'aider
kan je l'excéute (application web) il me met une erreur
<System.UnauthorizedAccessException: Accès refusé. >
pourtant j'ai donné tous les droits

Commentaire de Benouille le 23/02/2006 14:59:32

faut croire que non ;Þ

Commentaire de isame le 23/02/2006 15:05:46

bah si
j'arrive a créer un fichier texte ou xml mais pas excel...
il bloque  à
     xlapp= new Excel.application

Commentaire de SR2 le 24/02/2006 11:56:11

essaies
dim xlapp as object
set xlapp=createobject("excel.application")

Commentaire de Benouille le 24/02/2006 15:37:43

t'es sur que t'as excel sur le serveur?

ça de mande de la configuration je crois pour les utiliser en distant

Commentaire de isame le 24/02/2006 15:49:23

oui j'ai excel 2000

Commentaire de cycofred0 le 28/08/2006 15:11:02


Sympa.

Pour ma part je cherche à balancer le contenu d'un gros tableau en mémoire dans Excel. Problème de performance avec : MyXL.Worksheets(X).cells(Y,Z).value = "BLAH BLAH"   qui rame à mort quand il y en a pour plusieurs milliers de lignes.

La méthode la plus rapide que j'ai trouvée est de générer d'exporter mon tableau en HTML, puis de l'importer dans un objet Excel (temps d'exécution passant de 3 minutes à 15 secondes par fichier). Question : y a t'il plus simple / plus rapide ?

Merci :-)

Commentaire de Benouille le 18/09/2006 14:52:09

cycofredo: c'est exactement le but de cette source

Commentaire de cycofred0 le 18/09/2006 15:15:51


Le code ci-dessus part d'une base de données. Dans mon cas je cherche à exporter vers Excel une matrice en mémoire, donc ODBC est proscrit (à moins d'exporter le contenu de ma matrice vers une base avec 50.000 "INSERT INTO" mais c'est aussi lent je présume...)

Commentaire de Patrice99 le 19/09/2006 15:59:48

Il est possible d'exporter via ODBC vers un fichier Excel, à condition que la première ligne contienne l'entete de chaque colonne (et c'est aussi une bonne idée d'ajouter une ligne d'exemple pour indiquer à Excel le type de donnée à recevoir), voir un exemple ici :
ODBCDotNet : Extraire des requêtes ODBC dans un tableau de tableaux de String
www.vbfrance.com/code.aspx?ID=34701
Je vais mettre à jour cette source prochainement.

Commentaire de cmd_raz le 16/02/2007 11:26:09

C'est trés pratique c'est sur la question; si j'ai un lien de foto et que je veux que la foto sois integre dans la feuille on ne peut pas le faire.

Commentaire de Benouille le 06/03/2007 20:52:32

ah

Commentaire de M51 le 07/06/2007 17:29:43

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

Commentaire de Benouille le 11/06/2007 12:52:49

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

Commentaire de greg38bj le 20/12/2007 22:45:58 10/10

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

Commentaire de cosmos_final le 28/04/2010 14:07:12

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 ?

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,139 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales