IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Problème d'utilisation de la classe c_Excel


Sujet :

WinDev

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2012
    Messages : 3
    Points : 0
    Points
    0
    Par défaut Problème d'utilisation de la classe c_Excel
    Bonjour,

    J'essaye depuis ce matin de copier le contenu d'un fichier .xls vers un autre pour mettre à jour les données qui y sont déjà.
    Mais le problème est qu'une fois le traitement fini le second fichier n'a pas été modifié.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    // Déclaration des variables
    nIDFichierSource est un entier
    sChaîneLueSource est une chaîne
    nIDFichierDestinataire est un entier
    sChaîneLueDestinataire est une chaîne
    clDestination est un objet c_Excel
    i est un entier
     
    // Ouverture via la classe c_Excel
    clDestination:Ouvrir(gsCheminDestinataire)
    clDestination:SelectionnerFeuille("Feuil5")
     
    // Initialisation du pointeur
    i = 2
     
    // Ouverture du fichier destinataire
    nIDFichierDestinataire = fOuvre(gsCheminDestinataire,foLecture)
    SI nIDFichierDestinataire <> -1 ALORS
     
    	// Lecture du fichier destinataire
    	sChaîneLueDestinataire = fLitLigne(nIDFichierDestinataire)
    	TANTQUE sChaîneLueDestinataire <> EOT
     
    		// Ouverture du fichier source
    		nIDFichierSource = fOuvre(gsCheminSource,foLecture)
    		SI nIDFichierSource <> -1 ALORS
     
    			// Lecture du fichier source
    			sChaîneLueSource = fLitLigne(nIDFichierSource)
    			TANTQUE sChaîneLueSource <> EOT
     
    				// Test pour trouver les deux lignes se correspondant dans chaque fichier
    				SI ExtraitChaîne(sChaîneLueSource,2, ";") = ExtraitChaîne(sChaîneLueDestinataire,2, ";") ALORS
     
    					// Test pour détecter si il y a besoin d'une modification
    					SI ExtraitChaîne(sChaîneLueSource,5, ";") <> ExtraitChaîne(sChaîneLueDestinataire,5, ";") ALORS
     
    						//Affectation des valeurs du fichier source dans le fichier destinataire
     
    						clDestination:EcrireXY(ExtraitChaîne(sChaîneLueSource,5, ";"),5,i)
    						clDestination:EcrireXY(ExtraitChaîne(sChaîneLueSource,6, ";"),6,i)
    						clDestination:EcrireXY(ExtraitChaîne(sChaîneLueSource,7, ";"),7,i)
    						//clDestination:EcrireValeur("E"+i, ExtraitChaîne(sChaîneLueSource,5, ";"))
    						//clDestination:EcrireValeur("F"+i, ExtraitChaîne(sChaîneLueSource,6, ";"))
    						//clDestination:EcrireValeur("G"+i, ExtraitChaîne(sChaîneLueSource,7, ";"))
     
    					FIN
    				FIN
    				// Ligne suivante fichier source
    				sChaîneLueSource = fLitLigne(nIDFichierSource)
    			FIN
    		SINON
    			Erreur("Une erreur a été détectée pendant la récupération des données.")
    		FIN
    		// Fermeture du fichier source
    		fFerme(nIDFichierSource)
     
    		// Ligne suivante fichier destinataire
    		sChaîneLueDestinataire = fLitLigne(nIDFichierDestinataire)
     
    		// Incrémentation du pointeur
    		i++
    	FIN
     
    	Info(gsCheminDestinataire,"a été mis à jour avec succès")
     
    SINON
    	Erreur("Une erreur a été détectée pendant la récupération des données.")
    FIN
     
    // Fermeture du fichier destinataire
    fFerme(nIDFichierDestinataire)
     
    // Fermeture du fichier de classe
    clDestination:Fermer()
     
    // Fermeture de l'application
    Ferme(FEN_MAJ)
    Etant donné que je ne reçois aucun message d'erreur je pencherais pour une mauvaise utilisation de la fonction EcrireXY mais je n'arrive toujours pas à trouver de solution.

    Si quelqu'un a une solution je suis preneur !

    Cordialement.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Un fichier excel n'est pas un simple fichier texte, donc je ne pense pas que fouvre/flitligne soit la bonne méthode pour les lire.
    Regarde plutôt du côté des fonctions xls*.
    De plus, j'ai du mal à comprendre la logique de ton code, vu que tu ouvres le fichier destination avec fouvre, et avec la classe excel...

    Tatayo.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2012
    Messages : 3
    Points : 0
    Points
    0
    Par défaut
    Merci de m'accorder du temps.

    J'avais déjà utilisé fouvre et flitligne pour récupérer des données dans un fichier .csv donc je pensais que je pourrais les réutiliser sur un .xls.

    Pour le mélange entre la classe excel et les fonctions fichiers c'est tout simplement que je ne maîtrise pas assez la classe excel et que j'ai du mal à trouver des explications.

    Cordialement.

  4. #4
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 378
    Points : 4 494
    Points
    4 494
    Par défaut
    Bonjour

    Si tu ouvres le fichier avec fOuvre les méthodes de c_Excel vont échouer (à vérifier)

    Dans les méthodes de cette classe il y a un QUAND EXCEPTION, ajoute y l'affichage du message d'erreur
    Un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    QUAND EXCEPTION
       SI EnModeTest() ALORS Erreur(ExceptionInfo())
       ...
    Tu sauras alors rapidement où est ton problème, bien qu'on le devine (voir message de tatayo) : on ne lit pas un fichier Excel avec fouvre/flitligne, ce n'est pas un fichier texte

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 276
    Points : 739
    Points
    739
    Par défaut
    Bonjour,

    Perso, je n'utilise pas la classe cExcel, mais directement les types et fonctions qui vont bien dans WinDev.

    Petit tour sur F1 vite fait, on trouve ça : http://doc.pcsoft.fr/fr-FR/?10000174641000000000000
    "Le code suivant permet de parcourir toutes les cellules des différentes feuilles d'un fichier XLS."

    En adaptant un peu (après avoir regardé les exemples qui vont bien et lu un peu la doc), ça devrait être un jeu d'enfant !

    Cordialement

  6. #6
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Pour le parcours, les fonctions xls suffisent. Par contre, pour l'écriture dans un fichier excel, il faut passer par la classe (je ne l'ai jamais utilisée directement) ou par l'activeX (là, je me débrouille plutôt bien ).

    Dans les 2 cas, c'est la même chose : l'un est en objet, l'autre en code "normal".
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2012
    Messages : 3
    Points : 0
    Points
    0
    Par défaut
    Bonjour,

    J'ai enfin réussi à trouver une solution, j'ai transformé mon premier fichier .xls (celui dans lequel je récupère mes données) en .csv pour pouvoir utiliser ExtraitChaîne().
    Ensuite j'utilise la classe c_Excel pour les insérer dans mon second fichier qui lui est resté en .csv.
    Le tout fonctionne parfaitement.

    Merci à tous pour vos réponses qui m'ont aidé à trouver cette solution !

    Bonne continuation à vous !

    Sythris

  8. #8
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    615
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 615
    Points : 841
    Points
    841
    Par défaut
    Bonjour
    l'interêt de la classe c_excel n'est-il pas de rester en xls. si tu as des fichiers en csv, il est inutile de les ouvrir comme cela. un simple fouvre avec les paramètres d'écriture et des boucles suffirait, non ?

    Gancau

  9. #9
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    C'est clair que c'est bcp plus simple d'utiliser les fonctions sur les chaines que d'utiliser les fonctions xls/activex si tu restes en mode texte (csv).
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/02/2012, 18h11
  2. Problème d'utilisation d'une classe
    Par acidline dans le forum Langage
    Réponses: 5
    Dernier message: 18/07/2008, 18h27
  3. Problème d'utilisation des classes
    Par CyberSlan dans le forum C++
    Réponses: 10
    Dernier message: 16/05/2008, 14h31
  4. Réponses: 4
    Dernier message: 10/04/2007, 16h26
  5. Problème d'utilisation de la classe timer
    Par benjiprog dans le forum Langage
    Réponses: 4
    Dernier message: 04/09/2006, 13h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo