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 :

PERL et EXCEL (Ouverture d'Excel avec modification)


Sujet :

Modules Perl

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2005
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 5
    Points : 6
    Points
    6
    Par défaut PERL et EXCEL (Ouverture d'Excel avec modification)
    Bonjour à tous,

    je cherche à manipuler les fichiers EXCEL sous PERL. Les 2 modules les plus utilisés sont :
    1 - WriteExcel.pm et
    2 - ParseExcel.pm
    Le premier permet de créer des classeurs Excel et le second permet la lecture des données sous Excel. Jusque lç tout va bien.

    Question : Comment peut-on ouvrir un classeur Excel et mettre à jour uniquement quelques cellules du fichier puis l'enregistrer ? (Ouverture permettant la modification).

    Merci.

  2. #2
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Salut et bienvenue à toi.

    Je suis tombé sur ce module que tu connais peut être. Les données de chaque ligne sont placés dans un tableau. Toutefois, je pense que tu auras besoin des regexps pour pouvoir réaliser ton projet. As-tu un code à nous montrer ?

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  3. #3
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    tu peux t'inspirer de ceci
    j'y ai fait un script pour passer d'un fichier csv ou txt en ficier excel avec le module Spreadsheet::WriteExcel

  4. #4
    Futur Membre du Club
    Inscrit en
    Août 2005
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Salut tout le monde,
    Et merci à ceux qui ont contribué à mes recherches.
    J'ai finalement trouvé une parade à ce que je voulais faire, c'est à dire pourvoir ouvrir un fichier Excel déjà formaté (Tableaux,Calculs,etc...) et mettre à jour certaines cellules uniquement.
    Pour cela il vaut mieux utiliser le module : Win32::OLE

    Avantage : Fonctionne avec toutes les applications (Word, Excel, etc ...)
    Inconvénient : Il faut installer l'application pour pouvoir créer un lien vers l'objet OLE. Mais on va dire qu'on est à 95% dans ce cas là où l'application est installé.

    Voici le petit bout de code qui permet de faire ça :
    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
     
        #Verifie si l'application est installé
        eval {$ex = Win32::OLE->GetActiveObject('Excel.Application')};
        die "Excel not installed" if $@;
     
        #Effectue un lien OLE vers l'application
        unless (defined $ex) {
            $ex = Win32::OLE->new('Excel.Application', sub {$_[0]->Quit;})
            or die "Oops, cannot start Excel";
        }
     
        $book = $ex->Workbooks->Open("c:\Excel\monFicExcel.xls");
        $sheet = $book->Worksheets("maFeuilleExcel");
     
        #Mis à jour des celulles correspondantes
        $sheet->Cells($ligne,$colonne)->{Value} = "$valeur";
     
        # save and exit
        $book->Save(); #Possibilite de faire un saveAs(<nomFic>)
     
        undef $book;
        undef $ex;
    Voilà, avec si peu on peut faire beaucoup.

    Si ça peut aider d'autres personnes,

    Encore merci, @+ sur le forum ...

  5. #5
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    J'ai pensé que déterrer ce vieux post serait plus judicieux que d'en ouvrir un nouveau !

    donc je souhaite effectuer la meme manip que localboy cependant j'avoue ne pas comprendre le fonctionnement de ce module(malgré la lecture multiple de la doc CPAN)


    voici comment j'ai tenter de le faire:

    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
    #!c:/Perl/bin/perl -w
    use strict 'vars';
    use strict 'refs';
    use Win32::OLE;
    my $excelfile = 'c:\WebServer\cgi-bin\Master.EWG.Report.Template.xls';
    my $excelfileout = 'c:\WebServer\cgi-bin\Master.EWG.Report.Update.xls';
    my $ligne = 14;
    my $colonne = 0;
    my $ex;
    #Verifie si l'application est installé
    eval 
    { 
     $ex = Win32::OLE->GetActiveObject('Excel.Application')
    };
    die "Excel not installed" if $@;
    #Effectue un lien OLE vers l'application
    unless (defined $ex) 
    {
     $ex = Win32::OLE->new('Excel.Application', sub {$_[0]->Quit;})
     or die "Oops, cannot start Excel";
    }
    my $book = $ex->Workbooks->Open($excelfile);
    my $sheet = $book->Worksheets("Dashboard");
    #Mis à jour des celulles correspondantes
    $sheet->Cells($ligne,$colonne)->{Value} = '2';
    # save and exit
    $book->SaveAs($excelfileout); #Possibilite de faire un saveAs(<nomFic>)
    undef $book;
    undef $ex;
    print "youhou";
    exit;
    Le probleme est le suivant sous apache :

    [Fri May 05 11:35:55 2006] [error] [client 127.0.0.1] Premature end of script headers: c:/webserver/cgi-bin/modif_excel.pl
    [Fri May 05 11:35:55 2006] [error] [client 127.0.0.1] Win32::OLE(0.1704) error 0x800a03ec\n
    [Fri May 05 11:35:55 2006] [error] [client 127.0.0.1] in METHOD/PROPERTYGET "Cells" at c:\\WEBSER~1\\cgi-bin\\MODIF_~1.PL line 30\n
    [Fri May 05 11:35:55 2006] [error] [client 127.0.0.1] Can't use an undefined value as a HASH reference at c:\\WEBSER~1\\cgi-bin\\MODIF_~1.PL line 30.\n
    la ligne 30 est celle avec la modification de la cellule $sheet->Cell()->Value.

    je ne comprends pas le probleme, en fait!
    merci

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  6. #6
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Et bien au lieu de te poser la question mets le ou tu veux et donne son chemin complet à Perl !

    --
    Jedaï

  7. #7
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    j'ai update mon post bien avant ta reponse(20 min avant) et pourtant tu sembles voir mon ancien post Jedai ! mon probleme est en fait un probleme de methode (Cell->value) a present

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  8. #8
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Il y a eu des petites perturbations du forum pour moi...

    Quant à ton problème, il provient probablement du fait que $sheet est undef, autrement dit cette ligne a échoué :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    my $sheet = $book->Worksheets("Dashboard");
    Il vaut mieux tester ce type de ligne avec un petit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    my $sheet = $book->Worksheets("Dashboard")
      or die "N'a pas pu récupérer la feuille Dashboard\n";
    Par ailleurs, même si tout avait été un succès, ton script n'est tout de même pas un script CGI : tu n'as pas envoyé de header.

    --
    Jedaï

  9. #9
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    oui je sais pour le header mais c'est juste un test des capacité et du fonctionnement global du module avant sa réelle utilisation !

    je te remercie de ta remarque pour l'utilisation du "die"

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  10. #10
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    Le probleme reste entier malgré different test! si quelqu'un a une idée ou une piste...merci

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  11. #11
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Le problème est bien que tu n'arrives pas à récupérer la feuille ?

    --
    Jedaï

  12. #12
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    Je crois mais je suis meme pas sur car pas de message malgré les "die" donc je pense plutot que le probleme est ailleurs car il me met toujours la meme erreur de methode(cells)...

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

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

Discussions similaires

  1. [XL-2003] Ouverture d'excel via Script VBA depuis Access avec Chargement objet de XLSTART
    Par Godzestla dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/12/2009, 18h04
  2. Réponses: 1
    Dernier message: 19/03/2008, 09h51
  3. Réponses: 2
    Dernier message: 17/07/2007, 11h53
  4. [VBA EXCEL]Ouverture feuille excel dans fenêtre maximale
    Par Lexot2 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 10/04/2007, 17h51
  5. [EXCEL/C#] Piloter Excel XP compatible Excel 2003 ?
    Par legillou dans le forum Windows Forms
    Réponses: 4
    Dernier message: 31/08/2006, 08h01

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