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

Modules Perl Discussion :

Format dans Spreadsheet::ParseExcel et Spreadsheet::WriteExcel


Sujet :

Modules Perl

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 128
    Points : 86
    Points
    86
    Par défaut Format dans Spreadsheet::ParseExcel et Spreadsheet::WriteExcel
    Bonjour à tous !

    Je suis actuellement entrain de voir comment marche la manipulation de fichiers xls en Perl, et je suis tombé sur les modules CPAN Spreadsheet::WriteExcel et Spreadsheet:arseExcel.

    Je vous explique l'objectif de mon programme. J'ouvre en lecture un fichier xls, je récupère par exemple certaines cellules que j'écris dans un nouveau fichier xls.

    Jusqu'ici pas de problème concernant la lecture écriture en soit même, mais j'ai un problème concernant la "déco" des cellules.

    En effet, j'arrive à récupérer le contenu des cellules, mais dans mon nouveau fichier, la déco est complètement perdue (fond rose, lignes de tableau tracées), pourtant il me semble bien que je récupère le format de chaque cellule avant d'écrire.

    Voici mon script actuel :

    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
    #!/usr/bin/perl -w
     
    use strict;
    use Spreadsheet::ParseExcel;
    use Spreadsheet::WriteExcel;
     
    #Lecture
    my $parser   = Spreadsheet::ParseExcel->new();
    my $xls_r = $parser->parse('20_03.XLS');
     
    #Ecriture
    my $xls_w = Spreadsheet::WriteExcel->new('perl.xls');
    my $worksheet_w = $xls_w->add_worksheet();
     
     
    #Vérification
    if ( !defined $xls_r ) {
    	die $parser->error(), ".\n";
    }
     
    #valeurs min/max
    my ( $row_min, $row_max ) = (3, 54);
    my ( $col_min, $col_max ) = (19, 23);
     
    #traitement
    my $worksheet_r = $xls_r->worksheet(0);
     
    for my $row ( $row_min .. $row_max ) {
    	my $cell = $worksheet_r->get_cell( $row, 0);
    	next unless $cell;
     
    	#On récupère le format
    	my $format = $cell->get_format();
     
    	#On écrit			   	
    	$worksheet_w->write($row, 0, $cell->value(), %$format);
    }
    En fait, c'est comme si la ligne 33 ne servait à rien. Qu'elle y soit ou pas, le résultat est le même...

    Si quelqu'un sait comment faire, je suis preneur !

    Merci d'avance pour votre aide !

    Wapiti89

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 128
    Points : 86
    Points
    86
    Par défaut
    Personne pour m'aider ?

  3. #3
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    En fait, l'objet Worksheet::ParseExcel::Format que tu récupères dans $format n'est pas du même type que l'objet Worksheet::WriteExcel::Format. C'est bête, mais tu ne peux donc pas utiliser l'un pour l'autre.

    Tu dois donc "parser" à la main le style récupéré dans $format pour construire un nouveau format pour ton fichier à écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    my $newformat = $xls_w->add_format();
    if (my $font = $format->{Font}) {
      $newformat->set_format_properties( bold => $font->{Bold},
                                         size => $font}->{Height},
                                         ...);
    }
    ...
    Bref, ya un sacré boulot de conversion.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 128
    Points : 86
    Points
    86
    Par défaut
    Je vois !

    Merci beaucoup pr cette réponse !

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 08/09/2011, 18h13
  2. Réponses: 0
    Dernier message: 16/03/2009, 14h33
  3. Problème Spreadsheet ParseExcel
    Par technopole dans le forum Modules
    Réponses: 3
    Dernier message: 07/09/2007, 09h35
  4. Spreadsheet::ParseExcel => Lire que le debut d un fichier xls
    Par croixdebois dans le forum Bioinformatique
    Réponses: 5
    Dernier message: 02/01/2007, 17h51
  5. Module Spreadsheet::ParseExcel, Temps d'execution!!!
    Par djibril dans le forum Modules
    Réponses: 6
    Dernier message: 11/11/2005, 21h31

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