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é: 12 407 / 2 142

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

Cliquez pour voir la capture en taille normale
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!
 

Fichier Zip

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

Historique

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.

Commentaires et avis

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

Discussions en rapport avec ce code source dans le forum

Ouvrir un fichier csv [Excel] [ par xactise ] Bonjours j'ai creer une requete PHP qui envoie des champs d'une table SQL dans un fichier *.csv (Excel) donc jouvre le fichierj'insere le contenuje le export vers excel [ par nariel1 ] Bonjour,Je sais que cette question à deja ete possé mais je n'ai pas trouvé mon bonheurvoila je veux faire un export d'une vers excel . J'ai donc fait EXCEL --> CSV [ par sidf ] Bonjour,read excel  que je pensais utiliser ne conserve pas certains caractères - genre N° tel (66) 250-693  transformé en 66250693et je suis donc obl generer un fichier world ou excel [ par Perace ] salut c'est la premiere application serieuse que je fais avec php(en incluant javascript) et je voudrais savoir s'il est possible d'avoir les resultat comment faire pour supprimer des lignes dans un fichier csv [ par tokk ] Bonjour a tousje debute avec php et je ne sais pas comment faire pour traiter un fichier csv ,je m'explique:je genere avec un formulaire de 10 lignes exporter des données de la base vers excel [ par haythemsorbonne ] slt!Je suis entrain de travailler sur une base de données clientèle où il sera possible d'exporter les coordonnées des clients sur un fichier Excel. J lire les donnees d'un fichier excel [ par nouriia4esti ] Bonjour:Je voudrais des lignes de commandes (sed,awk,perl....) permettant de lire les donnees du fichier excel.Pour les inserer dans des tables Mysql. Php et Excel [ par ndoyegallas ] Slt je debute un projet sur php et j'aimerais connaitre comment lire un fichier excel avec du php pour charger ma base de données .Je rappel que je tr recupérer les champs d'un fichier csv pour les mettre dans une bdd [ par hannao ] Bonjour a tous, voilà je vais tenter de vous expliquez mon pb qui pour certains je suis sur sera très simple, mais j'avoue ramer grave.J'ai un fichier salut [ par chebbi58 ] salutation:j ai un ensemble de donne sous excel avec lequel je veux faire un site qui permet d'estimer des valeurs selon le modele de donne que je pos


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,437 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.