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

Langage Perl Discussion :

Spreadsheet::WriteExcel Question bouche foreach lettre


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 198
    Par défaut Spreadsheet::WriteExcel Question bouche foreach lettre
    Bonjour,

    je regarde un tuto pour créer un fichier excel avec le modul Spreadsheet::WriteExcel
    http://l.boivin.free.fr/perl/fpw08.pdf

    le premier exemple fonctionne bien avec des boucles foreach avec des chiffees, ca fonctionne.

    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
    use warnings;
    use strict;
    use feature 'say';
    use Spreadsheet::WriteExcel;
     
    my $wb = Spreadsheet::WriteExcel->new("foo.xls");
    my $ws = $wb->add_worksheet('Ma feuille');
     
    foreach my $r (0..3)
        {
            foreach my $c (0..3)
            {
                $ws->write($r, $c, "cellule $r $c");
            }
        }
    $wb->close();
    Résultat

    Nom : Excel-foreach-chiffre.png
Affichages : 155
Taille : 4,0 Ko


    Second exemple avec la seconde boucle foreach avec des lettres. Problème, je n'ai qu'une colonne avec la dernière lettre.

    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
    use warnings;
    use strict;
    use feature 'say';
    use Spreadsheet::WriteExcel;
     
    my $wb = Spreadsheet::WriteExcel->new("foo.xls");
    my $ws = $wb->add_worksheet('sheet1');
     
     
    foreach my $r (0..3) 
    	{
    	foreach my $c ('A'..'D')
    		{
    		$ws->write($r, $c, "Cell $r$c");
    		}
    	}
    $wb->close();
    Résultat

    Nom : Excel-foreach-lettre.png
Affichages : 164
Taille : 2,2 Ko


    Pourtant en affichant les variables avec chiffre ou lettre, tout semple bon.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    foreach my $r (0..3) 
    	{
    	foreach my $c (0..3)
    		{
    		say "$r $c";
    		}
    	}
    Résultat

    0 0
    0 1
    0 2
    0 3
    1 0
    1 1
    1 2
    1 3
    2 0
    2 1
    2 2
    2 3
    3 0
    3 1
    3 2
    3 3


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    foreach my $r (0..3) 
    	{
    	foreach my $c ('A'..'D')
    		{
    		$ws->write($r, $c, "Cell $r$c");
    		}
    	}
    $wb->close();
    Résultat

    0 A
    0 B
    0 C
    0 D
    1 A
    1 B
    1 C
    1 D
    2 A
    2 B
    2 C
    2 D
    3 A
    3 B
    3 C
    3 D

    Je ne comprend pas avec les lettres pourquoi avec les lettres, les colonnes ne sont pas pris en compte.

    Une idée?

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    si tu fais comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    foreach my $r (0..3) 
    {
    	foreach my $c ('A'..'D')
    	{
    		$ws->write("$r$c", "Cell $r$c");
    	}
    }
    $wb->close();
    est-ce que ça marche mieux?

  3. #3
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Billets dans le blog
    1
    Par défaut
    J'ai répondu ci-dessus de mémoire (je n'ai pas utilisé ce module depuis 2008, les souvenirs sont donc assez vagues).

    En vérifiant la documentation du module, en particulier sur la façon de désigner les cellules, j'ai la confirmation que ce doit être ça:

    http://search.cpan.org/dist/Spreadsheet-WriteExcel/lib/Spreadsheet/WriteExcel.pm#Cell_notation

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 198
    Par défaut
    Bonjour Lolo,

    En fait c'était l'exemple dans le lien mais ca donne un tableau vide (j'utilise libreoffice mais si ca fonctionne pour les chiffres ca devrait le faire pour les lettres)

    J'ai testé de faire deux cellules sur une même lignes et la dernière écrase la précédente.


    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
    use warnings;
    use strict;
    use feature 'say';
    use Spreadsheet::WriteExcel;
     
     
    my $wb = Spreadsheet::WriteExcel->new("foo.xls");
    my $ws = $wb->add_worksheet('sheet1');
     
    my $ligne = '0',
    my $colonneA ='A';
    my $colonneB = 'B';
     
    		$ws->write($ligne, $colonneA, "Cell $ligne$colonneA");
    		$ws->write($ligne, $colonneB, "Cell $ligne$colonneB");
     
    $wb->close();

    Résultat

    Nom : Excel-write-manuel.png
Affichages : 142
Taille : 1,7 Ko

    Je passerai par des chiffres au pire n'est pas grave mais la différence de comportement l’interpellait.

    Les exemples du module sur CPAN utilisent des chiffres en général, c'est qu'il doit y avoir une raison

  5. #5
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Billets dans le blog
    1
    Par défaut
    Euh, pas bien compris.

    Je suggérais ce qui suis.

    Au lieu de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $ws->write($ligne, $colonneA, "Cell $ligne$colonneA");
    Utiliser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $ws->write("$ligne$colonneA", "Cell $ligne$colonneA");
    Autrement dit, concaténer ligne et colonne en une seule valeur, en sorte de passer deux arguments, et non trois, à la méthode write.

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 198
    Par défaut
    En fait pour reprendre ta première réponse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $ws->write("$r$c", "Cell $r$c");
    Ca me donne un fichier vide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    my $wb = Spreadsheet::WriteExcel->new("foo.xls");
    my $ws = $wb->add_worksheet('sheet1');
     
    foreach my $r (0..3) 
    	{
    	foreach my $c ('A'..'D')
    		{
    		$ws->write("$r$c", "Cell $r$c");
    		}
    	}
    $wb->close();
    Nom : Excel-vide.png
Affichages : 134
Taille : 3,0 Ko

    Sur
    http://search.cpan.org/dist/Spreadsh...#Cell_notation

    Avec une recherche je ne vois pas d'exemple ou la ligne et la colonne sont dans des variables entre "".

    Mais bon je passerais par le chiffre, ce n'est pas bloquant

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/08/2012, 12h34
  2. Spreadsheet WriteExcel qui n'est pas connu
    Par witch dans le forum Modules
    Réponses: 2
    Dernier message: 10/06/2008, 13h26
  3. [Tableaux] Question sur foreach
    Par jpascal dans le forum Langage
    Réponses: 5
    Dernier message: 09/04/2008, 12h42
  4. [Excel] Spreadsheet::WriteExcel
    Par Longrais dans le forum Modules
    Réponses: 5
    Dernier message: 20/03/2006, 15h48
  5. [Spreadsheet-WriteExcel] Largeur des colonnes Excel
    Par Longrais dans le forum Modules
    Réponses: 2
    Dernier message: 17/10/2005, 17h41

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