begin process at 2008 05 16 04:35:38
1 173 215 membres
57 nouveaux aujourd'hui
13 970 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

TABLEUR GENRE EXCEL EN PHP POUR LE CSV


Information sur la source

Catégorie :Base de données Classé sous : csv, tableur, excel Niveau : Débutant Date de création : 07/09/2006 Date de mise à jour : 07/09/2006 19:12:45 Vu / téléchargé: 9 454 / 1 956

Note :
10 / 10 - par 3 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (15)
Ajouter un commentaire et/ou une note

Description

Mon client voulait sur son site un genre de quizz. Mais, il souhaitait aussi pouvoir éditer les questions.
Donc, j'ai fais un tableur genre Excel pour pouvoir éditer le fichier CSV contenant les questions.
J'ai mis cette source en débutant, parce que si on regarde bien, c'est vraiment bateau!

Conclusion

On peut naviguer entre les cellules avec les flèches.
Hum... Par contre, sa ne fonctionne que sous IE, car jutilise des attributs HTML "fait maison".
Il y a un bug que je n'arrive pas à résoudre, c'est quand on va pour naviguer sur une cellule inexistante.
Je n'arrive pas à gérer l'erreur... Si quelqu'un avait la solution, sa m'arrangerait bien!
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

07 septembre 2006 12:22:01 :
Ajout de la capture d'écran
07 septembre 2006 19:12:45 :
Publication du zip sans le bug des cellules.
  • signaler à un administrateur
    Commentaire de Mrreivax le 07/09/2006 12:18:59

    Si quelqu'un a la solution!
    Merci de la faire passer!

  • signaler à un administrateur
    Commentaire de Steph666 le 07/09/2006 17:23:01

    Salut,
    sans trop approfondir j'ai changé certaines lignes de ton code et ça marche sans les bugs sur ie, netscape et firefox (les dernières versions)

    J'ai remplacé :

    >> $tableur.= "<td class=\"clsCEL\"><input col=\"$j\" ligne=\"$i\" type=\"text\" name=\"c".$j."l".$i."\" class=\"clsTextBox\" OnKeyDown=\"txtKeyDown('c".$j."l".$i."');\" value =\"";


    par :

    $tableur.= "<td class=\"clsCEL\"><input type=\"text\" id=\"c_".$j."_".$i."\" name=\"c_".$j."_".$i."\" onblur=\"this.style.background='transparent'\" onfocus=\"this.style.background='#f2f292'\" class=\"clsTextBox\" onkeydown=\"txtKeyDown('c_".$j."_".$i."', event);\" value =\"";


    et :
    >> <script>
    >>   var col_;
    >>   var ligne_;
    >>   // Code JavaScript pour la navigation entre celulles.
    >>   // Quand on utilise les flèches, on change de celulle active.
    >>   // Il semblerait qu'il y ait des problèmes de compatibilités...
    >>   // Voilà donc la liste des explorateurs testés:
    >>   // Testé sous:
    >>   //   - FireFox  : Marche pas
    >>   //   - IE       : Marche très bien!
    >>   //   - NetScape : Marche pas
    >>   //   - Opera    : Marche pas
    >>   // Ceci est sans doute dut aux deux attribus factices ('col' et 'ligne')
    >>   // L'idée n'était pas mauvaise! Mais, à creuser! Mdr!
    >>   function txtKeyDown(txt){
    >>            col_   = document.getElementById(txt).col;
    >>            ligne_ = document.getElementById(txt).ligne;
    >>            // On presse la flèche de gauche
    >>            if(event.keyCode==37){
    >>               col_--;
    >>               focuss();
    >>            }
    >>            // On presse la flèche du haut
    >>            else if(event.keyCode==38){
    >>               ligne_--;
    >>               focuss();
    >>            }
    >>            // On presse la flèche de droite
    >>            else if(event.keyCode==39){
    >>               col_++;
    >>               focuss();
    >>            }
    >>            // On presse la flèche du bas
    >>            else if(event.keyCode==40){
    >>               ligne_++;
    >>               focuss();
    >>            }
    >>   }
    >>   function focuss(){
    >>           // Normalement, ici on met la gestion de l'erreur
    >>           // Mais je n'ai pas encore trouvé comment.
    >>           // Bug: Si on est en tout début ou en fin de tableau,
    >>           // Et qu'il n'y a pas de suivante, il y a une erreur.
    >>           // Par exemple, mettez vous sur 'A1' et pressez la flèche du haut.
    >>           if(document.getElementById("c"+col_+"l"+ligne_).type=="text"){
    >>              document.getElementById("c"+col_+"l"+ligne_).focus();
    >>           }
    >>
    >>   }
    >> </script>

    par :

    <script>
    // Code JavaScript pour la navigation entre celulles.
    // Quand on utilise les flèches, on change de celulle active.
    // Il semblerait qu'il y ait des problèmes de compatibilités...
    // Voilà donc la liste des explorateurs testés:
    // Testé sous:
    //   - FireFox  : Marche pas
    //   - IE       : Marche très bien!
    //   - NetScape : Marche pas
    //   - Opera    : Marche pas
    // Ceci est sans doute dut aux deux attribus factices ('col' et 'ligne')
    // L'idée n'était pas mauvaise! Mais, à creuser! Mdr!
    function txtKeyDown(txt, evt) {
    bouge = false;
    obj    = document.getElementById(txt);
    nomId  = obj.id;
    nomId  = nomId.split("_");
    col_   = nomId[1];
    ligne_ = nomId[2];
    codeClavier = -1;

    if (document.all) {
    codeClavier = event.keyCode;
    codeClavier = event.keyCode;
    } else {
    codeClavier = evt.which;
    codeClavier = evt.which;
    }
    // On presse la flèche de gauche
    if (codeClavier == 37) {
    col_--;
    bouge = true;
    }
    // On presse la flèche du haut
    else if(codeClavier == 38){
    ligne_--;
    bouge = true;
    }
    // On presse la flèche de droite
    else if(codeClavier == 39){
    col_++;
    bouge = true;
    }
    // On presse la flèche du bas
    else if(codeClavier == 40){
    ligne_++;
    bouge = true;
    }
    if (bouge && document.getElementById("c_"+col_+"_"+ligne_) != null) {
    objDest = document.getElementById("c_"+col_+"_"+ligne_);
    objDest.focus();
    }
    }
    </script>

  • signaler à un administrateur
    Commentaire de Mrreivax le 07/09/2006 19:08:17

    Merci beaucoup pour l'info!
    Sa marche super maintenant!
    Bravo!

  • signaler à un administrateur
    Commentaire de vincseize le 08/09/2006 11:31:23

    Salut


    Du coup as tu mis ta source à jour avec les correctifs
    de Steph666 !???

    Merci de nous tenir informé!

  • signaler à un administrateur
    Commentaire de Mrreivax le 08/09/2006 18:33:34

    Ben oui, comme sa, le zip est déja débugué!

  • signaler à un administrateur
    Commentaire de stef1589 le 08/09/2006 20:13:44

    sympa ton code

  • signaler à un administrateur
    Commentaire de Mrreivax le 08/09/2006 20:50:40

    Merci!

  • signaler à un administrateur
    Commentaire de boakim le 08/09/2006 22:02:26

    Il n'est pas possible d'enregistrer des données qui contiennent des guillemets.  

  • signaler à un administrateur
    Commentaire de MrTHX le 10/09/2006 16:32:59

    Je l'ai testé pour le fun et ça marche. Cela pourrait me servir un jour. Bon travail ;-)

  • signaler à un administrateur
    Commentaire de kangoo75 le 15/09/2006 09:01:51

    Excellent ca vas me servir pour ma boite qui voulais justement ce genre dinterface ! merci !

  • signaler à un administrateur
    Commentaire de 2dtension le 24/09/2006 18:55:20

    'lu,
    Je vais continuer dans la série des mercie. J'ai un petit projet dans mon coin et je me demandais comment réaliser ce genre de chose utile.
    Donc, bah merci !
    ciao

  • signaler à un administrateur
    Commentaire de ben05 le 28/11/2006 23:04:47

    Bonsoir,

    Voila, j'ai pu remarquer que quand on ouvre la page une seconde fois, les modifications apportés n'apparaisent pas en ligne (ce qui est un peu génant pour ma part).
    Si vous voulez que les modifications faites auparavant apparaissent à la prochaine ouverture vous pouvez changer le fichier index.php avec cela.

    ------------------------------------------------


    <?php
    //Config du tableur par défaut
    $col   = 5;
    $ligne = 100;


    if(isset($_POST["action"]) && $_POST["action"]=="enreg" ){

       // On prend la valeur 'Ligne' et la valeur 'col'
       $ligne = $_POST["ligne"];
       $col = $_POST["col"];
       // Ensuite, on épure le tableau:
       // On a plus besoin de 'col', 'ligne' ,'action', et 'doc'
       // donc, on les efface.
       $_GET["doc"]=$_POST["doc"];
       array_splice($_POST, 0, 4);
       // Ensuite, nous reste le tableau contenant les valeurs des cellules.
       // On va donc charger ces données dans une variables bi-dimensionnelle
       // afin de pouvoir la traiter
       $tblDB    = array();
       $varCol   = 0;
       $varLigne = 1;
       reset ($_POST);
       while (list ($key, $val) = each ($_POST)) {
              $varCol++;
              $tblDB[$varLigne][$varCol]=$val;
              if($varCol==$col){
                      $varCol=0;
                      $varLigne++;
              }
       }

       // Maintenant que le tableau a été créé, il faut le traiter.
       // Il se peut qu'il y ait des lignes à la fin non utilisée,
       // et donc ce n'est pas la peine de les enregistrer, donc,
       // il faut les supprimer.

       $etiquette = "";
       $num = count($tblDB); // Retourne le nombre de lignes
       // Tant qu'on a pas terminé
       while($etiquette<>"fin"){
          $var = "";
          // On met dans une variable chaque colonnes
          for($a=1;$a<=count($tblDB[$num]);$a++){
              $var.=$tblDB[$num][$a];
          }
          // Si la somme de toutes les colonnes de la ligne
          // est vide, alors, on supprime cette ligne
          // et on enlève '1' au compteur '$num'
          // Sinon, c'est que c'est bon
          if($var==""){
             array_splice($tblDB, $num, 1);
             $num--;
          }else{
             $etiquette="fin";
          }
          // Si il n'y a aucun enregistrement, on sort
          if($num==0){
             $etiquette="fin";
          }
       }


       // Ensuite, on enregistre!
       // (Même technique que l'affichage)
       $texte = "";
       $fp=fopen($_GET["doc"],"w");
       for($a=0;$a<count($tblDB);$a++){
           for($b=1;$b<=count($tblDB[$a]);$b++){
               $texte.=$tblDB[$a][$b].";";
           }
           // Comme à la fin de chaque ligne il y a ';'
           // (une cellule de trop), on la supprime
           fputs($fp,substr($texte,0,-1)."\r\n");
           $texte="";
       }
       fclose($fp);
    }



    // On regarde si il y a un fichier à ouvrire:
       // Si oui, on charge ce fichier
       // dans une variable bi-dimensionnelle.
       $fp=fopen("tableau.csv","r+");
       $dim1=0;
       while(!feof($fp)){
              $dim1++;
              $tmp=fgets($fp,1000);
              if($tmp!=""){
                 $tbl[$dim1] = explode(";",$tmp);
                 $col=sizeof($tbl[$dim1]);
              }
       }
       fclose($fp);




    // Dabord, on va créer la ligne du haut qui contient les lettres
    // $asc=65 donne 'A', donc, à chaque fois, on incrémente de 1 pr monter dans l'alphabet
    $tableur = "<tr>";
    $asc=65;
    $tableur.= "<td class=\"clsFOND\">&nbsp;</td>\n";
    for($a=$asc;$a<($asc+$col);$a++){
        $tableur.="<td class=\"clsFOND\">".chr($a)."</td>\n";
    }
    $tableur.= "</tr>\n\n";

    // Maintenant, on va tracer le tableau en colone
    for($i=1;$i<=$ligne;$i++){
        $tableur.= "<tr>";
        $tableur.= "<td class=\"clsFOND\" style=\"width:32px\">&nbsp;$i&nbsp;</td>";
        // Puis en ligne
        for($j=0;$j<$col;$j++){
                $tableur.= "<td class=\"clsCEL\"><input type=\"text\" id=\"c_".$j."_".$i."\" name=\"c_".$j."_".$i."\" onblur=\"this.style.background='transparent'\" onfocus=\"this.style.background='#f2f292'\" class=\"clsTextBox\" onkeydown=\"txtKeyDown('c_".$j."_".$i."', event);\" value =\"";
                // On regarde si il existe une valeur pour cette cellule.
                // Si oui, on l'affiche
                if(isset($tbl[$i][$j])){
                   $tableur.=$tbl[$i][$j];
                }
                $tableur.="\"></td>\n";
        }
        $tableur.= "</tr>\n\n";
    }
    ?>

    <html>

    <head>
      <title>Tableur</title>
      <style>
      .clsTextBox{
          border-top:0px solid black;
          border-bottom:0px solid black;
          border-right:0px solid black;
          border-left:0px solid black;
      }

      .clsFOND{
          border-top:0px solid black;
          border-bottom:1px solid black;
          border-right:1px solid black;
          border-left:0px solid black;
          background:url('images/fond.jpg');
          font:bold;
          text-align:center;
      }

      .clsCEL{
          text-align:center;
          border-bottom:1px solid black;
          border-right:1px solid black;
      }

      .clsTABLE{
          border-left:1px solid black;
          border-top:1px solid black;
      }
      </style>

    <script>
    // Code JavaScript pour la navigation entre celulles.
    // Quand on utilise les flèches, on change de celulle active.
    // Il semblerait qu'il y ait des problèmes de compatibilités...
    // Voilà donc la liste des explorateurs testés:
    // Testé sous:
    //   - FireFox  : Marche pas
    //   - IE       : Marche très bien!
    //   - NetScape : Marche pas
    //   - Opera    : Marche pas
    // Ceci est sans doute dut aux deux attribus factices ('col' et 'ligne')
    // L'idée n'était pas mauvaise! Mais, à creuser! Mdr!
    function txtKeyDown(txt, evt) {
           bouge = false;
           obj    = document.getElementById(txt);
           nomId  = obj.id;
           nomId  = nomId.split("_");
           col_   = nomId[1];
           ligne_ = nomId[2];
           codeClavier = -1;

           if(document.all){
               codeClavier = event.keyCode;
               codeClavier = event.keyCode;
           }else{
               codeClavier = evt.which;
               codeClavier = evt.which;
           }
           // On presse la flèche de gauche
           if (codeClavier == 37) {
               col_--;
               bouge = true;
           }
           // On presse la flèche du haut
           else if(codeClavier == 38){
               ligne_--;
               bouge = true;
           }
           // On presse la flèche de droite
           else if(codeClavier == 39){
               col_++;
               bouge = true;
           }
           // On presse la flèche du bas
           else if(codeClavier == 40){
               ligne_++;
               bouge = true;
           }
           if (bouge && document.getElementById("c_"+col_+"_"+ligne_) != null) {
               objDest = document.getElementById("c_"+col_+"_"+ligne_);
               objDest.focus();
           }
    }
    </script>
    </head>

    <body>
    <form action="index.php" method="post" name="frmTABLEUR">
    <input type="hidden" name="col" value="<?= $col?>">
    <input type="hidden" name="ligne" value="<?= $ligne?>">
    <input type="hidden" name="action" value="enreg">
    <input type="hidden" name="doc" value="<?if(isset($_GET["doc"])){echo $_GET["doc"];}else{echo "tableau.csv";}?>">
    <button alt="Enregistrer" OnClick="frmTABLEUR.submit();"><img src="images/disk.gif"></button><br><br>
    <table cellspacing="0" cellpadding="0" padding="0" border="0" class="clsTABLE">
    <?
    echo $tableur;
    ?>
    </table>
    </form>
    </body>

    </html>


    ------------------------------


    Cette modification n'est pas de moi, mais grâce à un ami.

    Merci à lui.

    Ben.


    PS: merci à M rreivax car ta source est tout simplement géniale...

  • signaler à un administrateur
    Commentaire de ben05 le 18/12/2006 13:10:47

    Salut,

    Il y a un projet dans le même style à la page suivante :
    www.javascriptfr.com/codes/TABLEUR-TYPE-EXCEL_40676.aspx

    C'est un tableur en ligne avec des fonctions intéresssantes comme le calcul...

    Il serait peut etre intéressant que vous collaboriez.

    Ben

  • signaler à un administrateur
    Commentaire de ben05 le 12/01/2007 21:29:42

    Salut,

    Situ veux créer des fichiers excel avec ta source, ca pourrait t'intéresser :

    www.phpcs.com/codes/LECTURE-FICHIER-EXCEL_41045.aspx

    Cordialement,

    Ben

  • signaler à un administrateur
    Commentaire de mkourkch le 05/07/2007 16:12:40

    Votre script est parfait mais j'aime bien l'etendre un peu pour rendre des celulles resizable en fonction du text qu'elles contiennent .
    Quelqu'un a t'il une idée pour ça (des que on sort de la celulle onBlur() sa taille doit changer ) .

    merci.  

Ajouter un commentaire

Appels d'offres

Pub



CalendriCode

Mai 2008
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Boutique

Boutique de goodies CodeS-SourceS