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 PHP Discussion :

[phpExcel ]getSheet / setSheet


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2016
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2016
    Messages : 40
    Points : 28
    Points
    28
    Par défaut [phpExcel ]getSheet / setSheet
    Salutations,

    J'aurais besoin d'un éclaircissement concernant la manière de bien sélectionner la feuille sur laquelle on travail en utilisant phpExcel.

    Pour l'instant, je procède en gros de la manière suivante, et cela fonctionne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $PAGE_SOMMAIRE=0;
    $filename_tmp = 'mondoc.xls'
    $cell = 'A1';
    $value='mavaleur';
    (...)
     
    $objet = new PHPExcel_Reader_Excel5();
    $excel_tmp = $objet->load($filename_tmp);
    $excel_tmp->setActiveSheetIndex("$PAGE_SOMMAIRE");
    $excel_tmp->getActiveSheet()->setCellValue("$cell","$value");
    Maintenant, je souhaite plutôt sélectionner mes sheet avec par leurs noms plutôt que par leurs numéros d'index:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $PAGE_SOMMAIRE='sommaire';
    (...)
    $excel_tmp->getSheetByName('$PAGE_SOMMAIRE');
    $excel_tmp->getActiveSheet()->setCellValue("$cell","$value");
    Pour établir des valeurs, cela fonctionne. Par contre, pour en récupérer, visiblement ca déconne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result=$excel_tmp->getActiveSheet()->getCell("$cell")->getValue();
    Aussi, je me demandais:
    Quelles sont les différences entre les fonctions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    getSheet()
    getActiveSheet()
    getSheetByName()
    setActiveSheetIndex()
    Visiblement quelque chose m'échappe. A priori, je dirais que les trois premières renvoient une sheet et que la troisième permet de sélectionner la sheet sur laquelle travailler à partir de son index. La seconde méthode ne devrait pas fonctionner du tout mais pourtant, elle fait la moitié du travail.

    Merci d'avoir pris la peine de lire.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    On ne met pas de " aux variables et surtout pas de '

    Je n'ai pas verifié mais si getSheetByName renvoit bien un objet "sheet", il faut l'utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sommaire= $excel_tmp->getSheetByName($PAGE_SOMMAIRE);
    $sommaire->setCellValue($cell,$value);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2016
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2016
    Messages : 40
    Points : 28
    Points
    28
    Par défaut
    J'ai pris l'habitude de double quote mes variables pour être certain qu'elles soient interprétées et que l'ensemble de la chaine de caractère soit pris en compte. Mais dans l'absolu oui je ne pense pas que ce soit nécessaire.
    Le simple quote est une erreur en effet, je n'ai pas fais attention.
    Du coup le comportement aléatoire n'est plus aléatoire. Ca me met l'erreur de mémoire dès le début maintenant. (issus de la doc: "If you don’t specify a sheet index, then the first worksheet will be returned." => voilà pourquoi ca déconnait pas pour le premier feuillet)

    Cela mis à part. Dans le doc, on a :

    /** Load $inputFileName to a PHPExcel Object **/
    $objPHPExcel = PHPExcel_IOFactory::load($inputFileName);
    To access a sheet by its index, use the getSheet() method. // Get the second sheet in the workbook // Note that sheets are indexed from 0
    $objPHPExcel->getSheet(1);

    To access a sheet by name, use the getSheetByName() method, specifying the name of the worksheet that you want to access. // Retrieve the worksheet called 'Worksheet 1'
    $objPHPExcel->getSheetByName('Worksheet 1');

    Alternatively, one worksheet is always the currently active worksheet, and you can access that directly. The currently active worksheet is the one that will be active when the workbook is opened in MS Excel (or other appropriate Spreadsheet program). // Retrieve the current active worksheet
    $objPHPExcel->getActiveSheet();
    Setting a cell value by coordinate can be done using the worksheet’s setCellValue method.
    $objPHPExcel->getActiveSheet()->setCellValue('B8', 'Some value');
    Il est bien dit que les deux méthodes sont équivalente.

    J'ai recommencé mes tests sur une page vierge pour virer tout le code parasite et ne faire qu'une seule lecture, une seule écriture. Je quote tout juste en dessous pour lever toute ambiguïté:
    J'ai un classeur contenant trois feuillets, nommés respectivement page1, page2, page3.
    Avec le setActiveSheetIndex() tout fonctionne bien.
    Avec le getSheetByName() il va directement page3. Idem pour le getSheet() utilisé dans la doc.
    En parcourant la doc plus en détail, j'ai trouvé ce qu'il me fallait:
    getActiveSheetIndexByName()
    Je sais pas pourquoi ca fonctionne pas avec les getSheet() et getSheetByName() mais bon ... tant pis, après tout, j'ai ce qu'il me faut.

    $path = './Classes';
    set_include_path(get_include_path() . PATH_SEPARATOR . $path);

    function __autoload($classe)
    {
    $fichier = str_replace
    (
    '_', # Caractère à remplacer.
    DIRECTORY_SEPARATOR, # Caractère de remplacement.
    $classe # Cible du remplacement.
    ) . '.php' ;
    require_once($fichier) ; # Chargement de la classe.
    }

    $repertoire = getcwd();
    $filename_tmp="$repertoire/test/Classeur1.xls";

    $objet = new PHPExcel_Reader_Excel5();
    $excel_tmp = $objet->load($filename_tmp);

    // marche pas
    //$PAGE_SOMMAIRE='page1';
    //$excel_tmp->getSheetByName($PAGE_SOMMAIRE);

    // marche pas non plus
    //$PAGE_SOMMAIRE=0;
    //$excel_tmp->getSheet("$PAGE_SOMMAIRE");

    // ok pour ca
    //$PAGE_SOMMAIRE='page1';
    //$excel_tmp->setActiveSheetIndexByName("$PAGE_SOMMAIRE");

    // ok pour ca aussi
    // $PAGE_SOMMAIRE=0;
    // $excel_tmp->setActiveSheetIndex("$PAGE_SOMMAIRE");

    $cell='C1';
    $result=$excel_tmp->getActiveSheet()->getCell($cell)->getValue();
    $cell='F1';
    $value= 'azerty';
    $excel_tmp->getActiveSheet()->setCellValue($cell,$value);
    echo $value.'<br/>';
    echo $result;

    $writer = new PHPExcel_Writer_Excel5($excel_tmp);
    $writer->save($filename_tmp);
    $excel_tmp->disconnectWorksheets();
    unset($excel_tmp);

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

Discussions similaires

  1. [PHPExcel] Génération de Fichiers Excel
    Par MaitrePylos dans le forum Bibliothèques et frameworks
    Réponses: 223
    Dernier message: 27/06/2016, 14h16
  2. [PHP 5.0] Utilisation de PHPExcel
    Par johnson95 dans le forum Langage
    Réponses: 2
    Dernier message: 19/03/2009, 11h13
  3. [Excel] Formattage des nombres avec PHPExcel !
    Par gentyjp dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 10/10/2007, 02h00

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