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

Bibliothèques et frameworks PHP Discussion :

[PHPExcel] Génération de Fichiers Excel [Tutoriel]


Sujet :

Bibliothèques et frameworks PHP

  1. #221
    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
    Tu peux surement quand même nous fournir un code minimal reproduisant ton problème ?
    Tu n'utiliserai pas les fonctions en français au lieu de l'anglais ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  2. #222
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2016
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Tout d'abord merci,

    après réflexion je vais partager mon code en cachant les affichages sensibles ^^

    Ceci est ma fonction principale, j'ai laissé seulement la partie qui nous intéresse:
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
     public function extract_action(){
            //ON RECUPERE  LES DONNEES
            $projet = Request::post('projet_select');
            $date_debut = Request::post('date_debut');
            $date_fin = Request::post('date_fin');
     
            if(!empty($date_debut) && !empty($date_fin)){
     
                $currentDateOfDatabase =  DateModel::currentDateTimeOfTable('mantis_project_table');
                $today=new DateTime($currentDateOfDatabase->date);
                //echo "DATE OBSERVATION: ".$today->format('Y-m-d')."<br/>";
                $dateDebut=new DateTime();
                $dateDebut->setTimestamp(strtotime($date_debut.' 00:00:00'));
     
                $dateFin=new DateTime();
                $dateFin->setTimestamp(strtotime($date_fin.' 23:59:59'));
     
            }else{
                Redirect::to('indicateur/index');
            }
     
                //////CREATION DE LA PREMIERE FEUILLE
                $classeur = new PHPExcel;// nouveau fichier excel
                $classeur->getProperties()->setCreator("L'entreprise");// on lui attribue un createur
                $classeur->setActiveSheetIndex(0);// on définit la feuille active
                $feuille_engagement = $classeur->getActiveSheet();//on récupère cette feuille.
                $feuille_engagement->setTitle('Engagements');//on lui donne un nom
                $feuille_engagement = self::create_feuille_engagement($feuille_engagement,$projet);
                ////////////////////////////////////////////////////////////////
                /////CREATION DE LA SECONDE FEUILLE
                ////////////////////////////////////////////////////////////////
                $feuille = $classeur->createSheet();
                $classeur->setActiveSheetIndex(1);
                $feuille = $classeur->getActiveSheet();
                $feuille = self::entete_tab_liste_dossiers($feuille);
                ////////////////////////////////////////////////////////////////
                $toutesLesDemandesDesProjet = DemandeModel::recupereDemandeEntreDeuxTimestamp($dateDebut->getTimestamp(),$dateFin->getTimestamp(),$projet);
                ////////////////////////////////////////////////////////////////
                ////////////////////////////////////////////////////////////////
                //traitement des données souhaitées
                $HistoriqueDetaillee = self::traitement_action_liste_dossiers($toutesLesDemandesDesProjet,$currentDateOfDatabase);
                ////////////////////////////////////////////////////////////////
                ////////////////////////////////////////////////////////////////
                //Remplissage de la feuille liste dossier
                $feuille = self::remplir_feuille_liste_dossier($feuille,$HistoriqueDetaillee);
                ////////////////////////////////////////////////////////////////
                //EXPORT EXCEL
                header("Content-type: application/vnd.ms-excel"); 
                header("Content-Disposition: attachment;filename=\"".$projet."_du_".$dateDebut->format('d-m-Y')."_au_".$dateFin->format('d-m-Y').".xlsx\""); 
                header('Cache-Control: max-age=0'); 
            }
     
            // envoi du fichier au navigateur
            $writer = PHPExcel_IOFactory::createWriter($classeur, 'Excel2007'); 
            $writer->setPreCalculateFormulas(false);
            $writer->save('php://output');
        }
    fonction qui remplie la feuille:
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
     
    public function remplir_feuille_liste_dossier($feuille,$HistoriqueDetaillee){
     
            $djt=DateModel::plageHoraire; //9*3600;
     
            foreach($HistoriqueDetaillee as $i=>$demande){
     
                $feuille->setCellValueByColumnAndRow(0, ($i+2), $demande['numdemande']);
                $feuille->setCellValueByColumnAndRow(1, ($i+2), $demande['projet']);
                $feuille->setCellValueByColumnAndRow(2, ($i+2), $demande['domaine']);
                $feuille->setCellValueByColumnAndRow(3, ($i+2), $demande['resume']);
                $feuille->setCellValueByColumnAndRow(4, ($i+2), $demande['typedemande']);
                $feuille->setCellValueByColumnAndRow(5, ($i+2), $demande['severite']);
                $feuille->setCellValueByColumnAndRow(6, ($i+2), $demande['impact']);
                $feuille->setCellValueByColumnAndRow(7, ($i+2), $demande['statutActuel']);
                $datecrea=new DateTime();
                $datecrea->setTimestamp($demande['dateCreation']);
                $feuille->setCellValueByColumnAndRow(8, ($i+2), $datecrea->format('d-m-Y H:i:s'));
     
                if(isset($demande['last_up'])){
                    $datecrea=new DateTime();
                    $datecrea->setTimestamp($demande['last_up']);
                    $feuille->setCellValueByColumnAndRow(9, ($i+2), $datecrea->format('d-m-Y H:i:s'));
                }else{
                    $feuille->setCellValueByColumnAndRow(9, ($i+2), ' ');
                }
                $feuille->setCellValueByColumnAndRow(10, ($i+2), $demande['user']);
                if($demande['date_souhaiter'] > 0){
                    $datesh=new DateTime();
                    $datesh->setTimestamp($demande['date_souhaiter']);
                    $feuille->setCellValueByColumnAndRow(11, ($i+2), $datesh->format('d-m-Y H:i:s'));
                }else{
                    $feuille->setCellValueByColumnAndRow(11, ($i+2), ' ');
                }
                if($demande['date_prevue'] > 0){
                    $datepr=new DateTime();
                    $datepr->setTimestamp($demande['date_prevue']);
                    $feuille->setCellValueByColumnAndRow(12, ($i+2), $datepr->format('d-m-Y H:i:s'));
                }else{
                    $feuille->setCellValueByColumnAndRow(12, ($i+2), ' ');
                }
                $feuille->setCellValueByColumnAndRow(13, ($i+2), $demande['total_temps']);
                $feuille->setCellValueByColumnAndRow(14, ($i+2), round($demande['total_temps']/$djt,2));
                $feuille->setCellValueByColumnAndRow(15, ($i+2), $demande['total_tempsTMA']);
                $feuille->setCellValueByColumnAndRow(16, ($i+2), round($demande['total_tempsTMA']*8/$djt,2));
                $feuille->setCellValueByColumnAndRow(17, ($i+2), $demande['total_tempsClient']);
                $feuille->setCellValueByColumnAndRow(18, ($i+2), round($demande['total_tempsClient']/$djt,2));
     
                if($demande['total_temps']>0){
                    $feuille->setCellValueByColumnAndRow(19, ($i+2),  round(100*$demande['total_tempsTMA']/$demande['total_temps'],2));
                }else{
                    $feuille->setCellValueByColumnAndRow(19, ($i+2),'0');
                }
                if($demande['total_temps']>0){
                    $feuille->setCellValueByColumnAndRow(20, ($i+2), round(100*$demande['total_tempsClient']/$demande['total_temps'],2));
                }else{
                    $feuille->setCellValueByColumnAndRow(20, ($i+2), '0');
                }
     
                $datecrea=new DateTime();
                $datecrea->setTimestamp($demande['dateCreation']);
                $dateMoisOuverture = date('d-m-Y',mktime(0,0,0,date('m',$datecrea->getTimestamp()),1,date('Y',$datecrea->getTimestamp())));
                $feuille->setCellValueByColumnAndRow(22, ($i+2),$dateMoisOuverture);
     
                if(isset($demande['last_up'])){
                    $datecrea->setTimestamp($demande['last_up']);
                    $dateMoisCloture = date('d-m-Y',mktime(0,0,0,date('m',$datecrea->getTimestamp()),1,date('Y',$datecrea->getTimestamp())));
                    $feuille->setCellValueByColumnAndRow(23, ($i+2), $dateMoisCloture );
                }else{
                    $feuille->setCellValueByColumnAndRow(23, ($i+2), ' ');
                }
     
                $feuille->setCellValueByColumnAndRow(24, ($i+2),'=SI(E'.($i+2).'="" , GAUCHE(B'.($i+2).', 2 ), CONCATENER(RECHERCHEV(E'.($i+2).' ,Engagements!A$29:B$40 , 2 , FALSE ) , " " , F'.($i+2).'))');
     
                $feuille->setCellValueByColumnAndRow(25,($i+2),'=SI(E'.($i+2).'="",GAUCHE(B'.($i+2).',2),RECHERCHEV(E'.($i+2).',Engagements!A$29:B$40,2,FALSE))');
     
                $feuille->setCellValueByColumnAndRow(26,($i+2),'=SI(GAUCHE(B'.($i+2).',2)="SB","SB",RECHERCHEV(C'.($i+2).',Engagements!$A$49:$B$87,2,FALSE))');
     
                $feuille->setCellValueByColumnAndRow(27, ($i+2), round($demande['total_tempsTMA']*8/$djt,2));
     
                $feuille->setCellValueByColumnAndRow(28,($i+2),'=RECHERCHEV(Y'.($i+2).',Engagements!$A$8:$E$19,5,FALSE)');
                $feuille->getStyle('AD'.($i+2).'')->applyFromArray(array(
                'fill'=>array(
                    'type'=>PHPExcel_Style_Fill::FILL_SOLID,
                    'color'=>array(
                        'argb'=>'FFCC99'))));
                $feuille->setCellValueByColumnAndRow(29,($i+2),'=SI(H'.($i+2).'="Fermé",SI(AB'.($i+2).'>AC'.($i+2).',"KO", "OK"),"N/A")');
     
            }
     
            return $feuille;
        }
    voila, je ne peux vraiment pas fournir plus ^^

  3. #223
    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
    Tu n'utiliserai pas les fonctions en français au lieu de l'anglais ?
    La réponse est donc oui.

    Il faut utiliser les fonctions en anglais
    CONCATENER => CONCATENATE
    RECHERCHEV => VLOOKUP
    SI => IF
    GAUCHE => LEFT

    Et au passage : date_souhaiter => date_souhaitee
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #224
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2016
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Un grand merci à toi Sabotage,

    Je ne savais pas que PHPExcel était "sensible" à ce point ^^.

    Concernant mon orthographe des variables, il ne faut même pas chercher à comprendre j'aime pas écrire mon code en français, mais celui qui va maintenir l'application le souhaite x) donc je réfléchi pas trop ^^.

Discussions similaires

  1. [Excel] Bug I.Explorer après génération de fichiers excel
    Par wtoueress dans le forum Bibliothèques et frameworks
    Réponses: 20
    Dernier message: 30/06/2008, 13h40
  2. Génération de fichier Excel Ou Word
    Par Maz85 dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 23/08/2007, 17h28
  3. Génération de fichiers Excel à partir de code HTML
    Par grincheux dans le forum ASP.NET
    Réponses: 2
    Dernier message: 01/06/2007, 14h39
  4. [Excel] Génération de fichiers
    Par abidi_niz dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 11/07/2006, 09h29
  5. [VBA-E]Génération de fichiers Excel à partir d'un autre
    Par cyrille2k5 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/05/2006, 10h27

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