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 :

Utilisation module SaveParser - ecriture données dans un fichier Excel


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Octobre 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2019
    Messages : 16
    Par défaut Utilisation module SaveParser - ecriture données dans un fichier Excel
    Bonjour à tous,

    suite à la création d'une interface grace au module Tk ou l'on inscrit dans un champs un code à barre, je viens extraire du code à barre une date que je compare à la date du jour afin de donner une information de péremption à l'utilisateur.
    Tout cela fonctionne sans problème, j'ai maintenant pour besoin de remonter l'information du code à barre dans un fichier Excel, j'utilise donc les modules Spreadsheet::ParseExcel et Spreadsheet::ParseExcel::SaveParser.
    Mon problème est que le premier code à barre est bien écrit dans mon fichier Excel mais dès que rentre le suivant il est ré-ecrit sur le premier.
    Dans l'idée à chaque nouveau code barre, je souhaiterais l'écrire sur une ligne differente du fichier Excel afin de conserver la traçabilité.
    Je n'arrive malheureusement pas pour moi à réaliser celà j'imagine qu'il faut indexer la derniere ligne utilisée afin de pouvoir écrire sur la suivante, je cherche donc un petit coup de pouce.

    Voici le bout de code que j'ai écris :
    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
     
    WRITE_EXCEL:
     
    # Ouverture fichier ctrl_peremption avec SaveParser
    my $parser   = Spreadsheet::ParseExcel::SaveParser->new();
    $ctrl_peremption = $parser->Parse($fileName);
     
     
    # Sélection de la première feuille
    $sheet = $ctrl_peremption->worksheet(0);
    my $row  = 1; #début en ligne 2
    my $col  = 0;
     
     
    # Définition du tableau Excel ctrl_peremption
    $sheet->AddCell( $row, $col, $info1); # Add a new string in cell A1	
    $sheet->AddCell( $row, $col + 1, $info2); # Add a new string in cell B1	
    $sheet->AddCell( $row, $col + 2, $info3); # Add a new string in cell C1	
     
     
    # Sauvegarde du fichier ctrl_peremption
    $ctrl_peremption->SaveAs('ctrl_peremption1.xls');
    Pour précision les $info1, $info2, $info3 sont des variables utilisées pour le traitement du code à barre comme suis :

    CAB = XXX;DDDDD;FFFF

    XXX = $info1
    DDDDD = $info2
    FFFF = $info3

    Question subsidiaire, peut on conserver la mise en forme conditionelle d'un fichier Excel en utilisant le module Spreadsheet::ParseExcel::SaveParser et si oui comment?

    Merci par avance pour toutes l'aide apportée.

    Cordialement,

  2. #2
    Membre éprouvé
    Homme Profil pro
    Master Data Manager
    Inscrit en
    Février 2017
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Master Data Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2017
    Messages : 113
    Par défaut
    Bonjour.

    Si votre script Perl tourne en permanence, une simple incrémentation de $row devrait suffire.

    Si le script est lancé pour chaque écriture, il faut stocker le numéro de ligne en dure, dans un fichier par exemple.

    Pour la question subsidiaire, aucune idée.

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Octobre 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2019
    Messages : 16
    Par défaut
    Bonjour,

    effectivement une simple boucle sur la variable $row suffit si le .exe n'est pas fermé puisque le script continu de tourner.
    Je préfère prendre la deuxième option je vais faire quelques essais en utilisant un fichier .txt basique afin de stocker le numéro de ligne et pouvoir le réutiliser par a suite.
    Je reviens vers toi en cas de question en tout cas merci pour le coup de pouce

    Bon week-end

  4. #4
    Membre éprouvé
    Homme Profil pro
    Master Data Manager
    Inscrit en
    Février 2017
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Master Data Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2017
    Messages : 113
    Par défaut
    Bonjour.

    Un exemple en Pure Perl (sans module):
    Code perl : 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
     
    my $filename = './line_number';
    my $lig = 42;
     
    stock_line($lig);
    sleep(1);
    my $num_ligne = get_line();
    print "la ligne est: $num_ligne\n";
     
    sub get_line {
        open( $fh, '<', $filename) or die("open file erreur.");
        chomp( my $line_number = <$fh> );
        close( $fh );
        $line_number;
    }
     
    sub stock_line {
        my $line_number = shift;
        open( $fh, '>', $filename) or die("open file erreur.");
        print {$fh} "$line_number";
        close( $fh );
    }


    Exemple avec le module File::Slurp:
    Code perl : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    use File::Slurp qw( write_file read_file );
    my $filename = './line_number';
    my $lig = 42;
    write_file($filename, $lig);
    sleep(1);
    my $num_ligne = read_file($filename);
    print "la ligne est: $num_ligne\n";

    Avec le module File::Slurp version nolife codeur
    Code perl : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    use File::Slurp qw( wf rf );
    my $f = './lnum';
    my $l = 42;
    wf($f, $l);
    sleep(1);
    my $nl = rf($f);
    print ">>> $nl\n";

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Octobre 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2019
    Messages : 16
    Par défaut
    Bonjour Puppet_Master,

    merci pour ton aide.
    J'avoue qu'étant novice en Perl je me suis perdu dans tes explications avec le module Slurp.
    Pour rien te cacher j'étais plutot parti sur quelque chose du genre j'écris mes données ( chaque ligne correspond à chaque entrée de mon code à barre ) puis à chaque écriture d'une ligne, toujours dans le même fichier Excel j'écris le dernier numéro de ligne utilisé dans une cellule dont je ne me sers pas.

    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
    WRITE_EXCEL:
     
    # Ouverture fichier ctrl_peremption avec SaveParser
    my $parser   = Spreadsheet::ParseExcel::SaveParser->new();
    $ctrl_peremption = $parser->Parse($fileName);
     
     
    # Sélection de la première feuille
    $sheet = $ctrl_peremption->worksheet(0);
    my $col  = 0;
    
    my $index = $sheet->get_cell($row1, $col+10);	#récupération indexation ligne ==> cellule K1
    print "Index ligne => ", $index->Value, "\n";
    
    print "ligne = $row\n";
    print "index = $index\n";
    
    $row = $row+$index; #ATTENTION NE FONCTIONNE PAS
    
    # Définition du tableau Excel ctrl_peremption
    $sheet->AddCell( $row, $col, $info1); # Add a new string in cell A1	
    $sheet->AddCell( $row, $col + 1, $info2); # Add a new string in cell B1	
    $sheet->AddCell( $row, $col + 2, $info3); # Add a new string in cell C1	
    
    $sheet->AddCell( $row1, $col+10, $row); # Add a new string in cell B1	 #ecriture cellule K1 du numéro de la dernière ligne utilisée
     
    # Sauvegarde du fichier ctrl_peremption
    $ctrl_peremption->SaveAs('ctrl_peremption1.xls');
    Du coup me voilà un peu dans le flou :
    - je ne comprends pas comment intégrer le module Slurp dans mon code et son utilisation si tu pouvais m'en dire plus
    - je rencontre un soucis avec le code que j'ai écris car si j'essaye de réutiliser la variable $index pour l'incrémentation cela ne fonctionne pas, voici l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Index ligne => 2
    ligne = 63905924
    index = Spreadsheet::ParseExcel::Cell=HASH(0x3cf2084)

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Octobre 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2019
    Messages : 16
    Par défaut
    Re,

    je viens de comprendre pour le module Slurp j'avais besoin de m'aérer l'esprit parfois on se borne à comprendre quelques choses sans y parvenir alors qu'il faut juste prendre un peu de recul pour que ça nous saute aux yeux.
    Par contre je reste perdu sur le deuxième point

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

Discussions similaires

  1. Ecriture de données dans un fichier Excel à partir d'une tache Talend
    Par Guetali dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 13/09/2018, 10h50
  2. Réponses: 7
    Dernier message: 07/12/2016, 01h16
  3. updater des données dans mon fichier excel
    Par gantec dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 26/02/2007, 16h01
  4. Exporter données dans un fichier excel
    Par Kasanova75 dans le forum Oracle
    Réponses: 3
    Dernier message: 08/03/2006, 10h09

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