Salut tout le monde j'ai trouvé une difficulté pour exporter mes données qu'existent dans la base de donnée en fichier Excel,j'ai essayé avec ce code mais ca affiche les donnée comme ca dans le fichier excel (j'utilise cakephp 2.3)

...
Dispatcher::dispatch() - CORE\Cake\Routing\Dispatcher.php, line 161                                                         
[main] - APP\webroot\index.php, line 97</pre></div></pre><pre class="cake-error"><a href="javascript:void(0) onclick=document.getElementById('cakeErr5395ce4d5039a-trace').style.display = (document.getElementById('cakeErr5395ce4d5039a-trace').style.display == 'none' ? '' : 'none')    ><b>Notice</b> (8)</a>: Undefined variable: View <b>CORE\Cake\View\Helper.php</b>, line <b>173</b>]<div id=cakeErr5395ce4d5039a-trace" class="cake-stack-trace" style="display: none    ><a href=javascript:void(0) onclick=document.getElementById('cakeErr5395ce4d5039a-code').style.display = (document.getElementById('cakeErr5395ce4d5039a-code').style.display == 'none' ? '' : 'none')">Code</a> <a href="javascript:void(0) onclick=document.getElementById('cakeErr5395ce4d5039a-context').style.display = (document.getElementById('cakeErr5395ce4d5039a-context').style.display == 'none' ? '' : 'none')">Context</a><pre id="cakeErr5395ce4d5039a-code" class="cake-code-dump" style="display: none ><code><span style=color: #000000"><span style="color: #0000BB">&nbsp   &nbsp   &nbsp   &nbsp   </span><span style="color: #007700">public&nbsp function&nbsp   </span><span style="color: #0000BB">__construct</span><span style="color: #007700">(</span><span style="color: #0000BB">View&nbsp   $View</span><span style="color: #007700">,&nbsp </span><span style="color: #0000BB">$settings&nbsp  </span><span style="color: #007700">=&nbsp
<code><span style="color: #000000"><span style="color: #0000BB">&nbsp   &nbsp   &nbsp   &nbsp   &nbsp   &nbsp   &nbsp   &nbsp   $this</span><span style="color: #007700">-&gt   </span><span style="color: #0000BB">_View&nbsp  </span><span style="color: #007700">=&nbsp  </span><span style="color: #0000BB">$View</span><span style="color: #007700">   </span></span></code>           
<span class="code-highlight"><code><span style="color: #000000"><span style="color: #0000BB">&nbsp  &nbsp   &nbsp   &nbsp   &nbsp   &nbsp   &nbsp   &nbsp   $this</span><span style="color: #007700">-&gt   </span><span style="color: #0000BB">request&nbsp    </span><span style="color: #007700">=&nbsp  </span><span style="color: #0000BB">$View</span><span style="color: #007700">-&gt   </span><span style="color: #0000BB">request</span><span style="color: #007700"> </span></span></code></span></pre><pre id="cakeErr5395ce4d5039a-context" class="cake-context" style="display: none  >$settings = array()</pre><pre class=stack-trace">Helper::__construct() - CORE\Cake\View\Helper.php, line 173   
include - APP\View\Articles\exportxls.ctp, line 10                                                          
View::_evaluate() - CORE\Cake\View\View.php, line 947                                                           
View::_render() - CORE\Cake\View\View.php, line 909                                                         
View::render() - CORE\Cake\View\View.php, line 470                                                          
Controller::render() - CORE\Cake\Controller\Controller.php, line 947                                                            
Dispatcher::_invoke() - CORE\Cake\Routing\Dispatcher.php, line 193                                                          
Dispatcher::dispatch() - CORE\Cake\Routing\Dispatcher.php, line 161                                                         
[main] - APP\webroot\index.php, line 97</pre></div></pre><pre class="cake-error"><a href="javascript:void(0) onclick=document.getElementById('cakeErr5395ce4d52e93-trace').style.display = (document.getElementById('cakeErr5395ce4d52e93-trace').style.display == 'none' ? '' : 'none')    ><b>Notice</b> (8)</a>: Trying to get property of non-object <b>CORE\Cake\View\Helper.php</b>, line <b>173</b>]<div id=cakeErr5395ce4d52e93-trace" class="cake-stack-trace" style="display: none    ><a href=javascript:void(0) onclick=document.getElementById('cakeErr5395ce4d52e93-code').style.display = (document.getElementById('cakeErr5395ce4d52e93-code').style.display == 'none' ? '' : 'none')">Code</a> <a href="javascript:void(0) onclick=document.getElementById('cakeErr5395ce4d52e93-context').style.display = (document.getElementById('cakeErr5395ce4d52e93-context').style.display == 'none' ? '' : 'none')">Context</a><pre id="cakeErr5395ce4d52e93-code" class="cake-code-dump" style="display: none ><code><span style=color: #000000"><span style="color: #0000BB">&nbsp   &nbsp   &nbsp   &nbsp   </span><span style="color: #007700">public&nbsp function&nbsp   </span><span style="color: #0000BB">__construct</span><span style="color: #007700">(</span><span style="color: #0000BB">View&nbsp   $View</span><span style="color: #007700">,&nbsp </span><span style="color: #0000BB">$settings&nbsp  </span><span style="color: #007700">=&nbsp
<code><span style="color: #000000"><span style="color: #0000BB">&nbsp   &nbsp   &nbsp   &nbsp   &nbsp   &nbsp   &nbsp   &nbsp   $this</span><span style="color: #007700">-&gt   </span><span style="color: #0000BB">_View&nbsp  </span><span style="color: #007700">=&nbsp  </span><span style="color: #0000BB">$View</span><span style="color: #007700">   </span></span></code>           
<span class="code-highlight"><code><span style="color: #000000"><span style="color: #0000BB">&nbsp  &nbsp   &nbsp   &nbsp   &nbsp   &nbsp   &nbsp   &nbsp   $this</span><span style="color: #007700">-&gt   </span><span style="color: #0000BB">request&nbsp    </span><span style="color: #007700">=&nbsp  </span><span style="color: #0000BB">$View</span><span style="color: #007700">-&gt   </span><span style="color: #0000BB">request</span><span style="color: #007700"> </span></span></code></span></pre><pre id="cakeErr5395ce4d52e93-context" class="cake-context" style="display: none  >$settings = array()</pre><pre class=stack-trace">Helper::__construct() - CORE\Cake\View\Helper.php, line 173   
include - APP\View\Articles\exportxls.ctp, line 10                                                          
View::_evaluate() - CORE\Cake\View\View.php, line 947                                                           
View::_render() - CORE\Cake\View\View.php, line 909                                                         
View::render() - CORE\Cake\View\View.php, line 470                                                          
Controller::render() - CORE\Cake\Controller\Controller.php, line 947                                                            
Dispatcher::_invoke() - CORE\Cake\Routing\Dispatcher.php, line 193                                                          
Dispatcher::dispatch() - CORE\Cake\Routing\Dispatcher.php, line 161                                                         
" <Table>"              
" <Row>"                
" <Cell><Data ss:Type=""String"">Nom Article</Data></Cell>"             
" <Cell><Data ss:Type=""String"">prix d'Article</Data></Cell>"              
" <Cell><Data ss:Type=""String"">prixventettc</Data></Cell>"                
" </Row>"               
" <Row>"                
" <Cell><Data ss:Type=""String"">cablege</Data></Cell>"             
" <Cell><Data ss:Type=""Number"">45</Data></Cell>"              
" <Cell><Data ss:Type=""Number"">59.4</Data></Cell>"                
" </Row>"               
....

voile mon code
app/View/Helper/xlsHelper.ctp

<?php
  /**
   * This xls helper is based on the one at
   * http://bakery.cakephp.org/articles/view/excel-xls-helper
   *
   * The difference compared with the original one is this helper
   * actually creates an xml which is openable in Microsoft Excel.
   *
   * Written by Yuen Ying Kit @ ykyuen.wordpress.com
   *
   */
  class XlsHelper extends AppHelper {
    /**
     * set the header of the http response.
     *
     * @param unknown_type $filename
     */
    function setHeader($filename) {
      header("Pragma: public");
      header("Expires: 0");
      header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
      header("Content-Type: application/vnd.ms-excel; charset=UTF-8");
      header("Content-Type: application/force-download");
      header("Content-Type: application/download");;
      //header("Content-Disposition: inline; filename=\"".$filename.".xls\"");
      // Name the file to .xlsx to solve the excel/openoffice file opening problem
      header("Content-Disposition: inline; filename=\"".$filename.".xls\"");
    }

    /**
     * add the xml header for the .xls file.
     *
     */
    function addXmlHeader() {
      echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
      echo "<Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\"\n";
      echo " xmlns:x=\"urn:schemas-microsoft-com:office:excel\"\n";
      echo " xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\"\n";
      echo " xmlns:html=\"http://www.w3.org/TR/REC-html40\">\n";
      return;
    }

    /**
     * add the worksheet name for the .xls.
     * it has to be added otherwise the xml format is incomplete.
     *
     * @param unknown_type $workSheetName
     */
    function setWorkSheetName($workSheetName) {
      echo "\t<Worksheet ss:Name=\"".$workSheetName."\">\n";
      echo "\t\t<Table>\n";
      return;
    }

    /**
     * add the footer to the end of xml.
     * it has to be added otherwise the xml format is incomplete.
     *
     */
    function addXmlFooter() {
      echo "\t\t</Table>\n";
      echo "\t</Worksheet>\n";
      echo "</Workbook>\n";
      return;
    }

    /**
     * move to the next row in the .xls.
     * must be used with closeRow() in pair.
     *
     */
    function openRow() {
      echo "\t\t\t<Row>\n";
      return;
    }

    /**
     * end the row in the .xls.
     * must be used with openRow() in pair.
     *
     */
    function closeRow() {
      echo "\t\t\t</Row>\n";
      return;
    }

    /**
     * Write the content of a cell in number format
     *
     * @param unknown_type $Value
     */
    function writeNumber($Value) {
      if (is_null($Value)) {
        echo "\t\t\t\t<Cell><Data ss:Type=\"String\"> </Data></Cell>\n";
      } else {
        echo "\t\t\t\t<Cell><Data ss:Type=\"Number\">".$Value."</Data></Cell>\n";
      }
        return;
    }

    /**
     * Write the content of a cell in string format
     *
     * @param unknown_type $Value
     */
    function writeString($Value) {
      echo "\t\t\t\t<Cell><Data ss:Type=\"String\">".$Value."</Data></Cell>\n";
      return;
    }
  }
?>

View/Article/exportxls.ctp

<?php
  /**
   * Export all member records in .xls format
   * with the help of the xlsHelper
   */

  //declare the xls helper
  $xls= new xlsHelper();

  //input the export file name
  $xls->setHeader('model_'.date('Y_m_d'));

  $xls->addXmlHeader();
  $xls->setWorkSheetName('Article');

  //1st row for columns name
  $xls->openRow();
  $xls->writeString('Nom Article');
  $xls->writeString('prix d\'Article');
  $xls->writeString('prixventettc');
  $xls->closeRow();

  //rows for data
  foreach ($Articles as $Article):
    $xls->openRow();
    $xls->writeString($Article'Article']'lib_art']);
    $xls->writeNumber($Article'Article']'prix_art']);
    $xls->writeNumber($Article'Article']'prix_vente_ttc']);
    $xls->closeRow();
  endforeach;

  $xls->addXmlFooter();
  exit();
?>

Controller/ArticleController.php

function exportxls() {       
    $Article = $this->Article->find('all');
    $this->set('Articles', $Article);
    }

View/Article/index.ctp

<?= $this->Html->link('Export xls',array('controller'=>'Articles','action'=>'exportxls'), array('target'=>'_blank')); ?>

8 réponses


Je dirais qu'il manque un constructeur à ta classe XlsHelper.

mais comment faire n'oublie pas que j suis débutant, svp dans moi la solution et explique la plaiiiiiiiiiiiiiiise plaiiiiiiise :(

Je vais sans doute paraître rude mais c'est pour ton bien.

CakePHP est un framework PHP. A ce sens il nécessite des compétences en développement PHP, notamment la programmation objet. Si tu ne sais pas comment créer une classe PHP ni comment faire une boucle, il te manque les bases.

Commence donc par les bases, il y a pleins de tutoriels sur le net et ensuite reviens sur CakePHP. Ne brûle pas les étapes, tu vas être bloqué en permanence sinon.

Et cherche par toi même. Etre débutant n'est pas une excuse dans ton cas, tu souhaites qu'on te donne la réponse sans avoir à chercher. Tu copies/colles ton code sans donner la moindre piste d'exploration que tu aies pu faire. Il ne suffit pas de copier des Helpers ou des classes tout fait. Comment feras tu si le comportement n'est pas celui attendu ? Que tu souhaites ajouter des fonctionnalités ? Comment peux tu garantir une sécurité de code si tu ne comprends pas ce qui est fait ?

Mercii prbaron de m'orienté dans le bon chemin du developpement a part ca je ss stagiaire et mon encadrant m'a forcé de finir l'application dans un ton insuffisant,c'est pour cela que je cherchre des plugins et du code déja prét,il me reste 10jrs et ca reste encor beaucoup de tache a faire dans l'application de gestion de stock,bon en tous cas ca ne serai jamais une excuse, :( Merciiii prbaron

Je comprends bien que par souci de formation personnel tu ai envi de coder tout cela toi meme, mais si tu veux generer des documents vraiment compatible avec Excel, je ne peux que te conseiller d'utiliser PHPExcel : https://phpexcel.codeplex.com/

Bonjour.
Comme te l'a dit prbaron , la programmation c'est comme tout, il faut en apprendre les bases et non piocher par-ci par-là en faisant du copier/coller.
Il faut que tu puisses être capable d'adapter un code par rapport au résultat attendu.
Tu dis que tu es stagiaire, mais stagiaire comment ?
Tu fais des études dans la programmation ou non ?
Tu veux travailler dans le développement WEB sans apprendre avant ?
Pour ma part, je n'ai fais aucune étude en informatique et développement WEB, j'ai appris sur le tas en consultant des tutoriels, mais j'ai fais l'effort de travailler les lignes de codes que je trouvais, je n'ai pas seulement fais des copier/coller de script du net.
Si tu ne sais pas faire, tu le dis à ton stage, par contre, si tu te lance professionnellement dans le développement WEB en disant que tu t'y connais en leur mentant, tu ne peux t'en prendre qu'à toi.
Ici tu es sur un forum d'entre-aide, pour dépanner en gros ceux qui ont des soucis de code, mais pas pour leur pondre un script complet.

Mercii Lartak11 j'ai bien compris

Salut rachidali,

Essaies ce plugin PhpExcel ça marche sous cakephp 2.5.1.