begin process at 2012 05 28 15:03:42
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Base de données

 > TABLEUR GENRE EXCEL EN PHP POUR LE CSV

TABLEUR GENRE EXCEL EN PHP POUR LE CSV


 Information sur la source

Note :
9,25 / 10 - par 4 personnes
9,25 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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é :16 922 / 2 417

Auteur : Mrreivax

Ecrire un message privé
Commentaire sur cette source (16)
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

Les Membres Club peuvent 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.

 Sources du même auteur

CONVERSION RGB <-> TSL
Source avec Zip LIRE LES CONFIGURATIONS D'UN FICHIER XML
RECHERCHE SUR GOOGLE
ENVOYER DES FICHIERS SUR LE SERVEUR
PROTÉGER UNE PAGE AVEC UN CODE+PSEUDO AVEC UNE FORM WINDOWS

 Sources de la même categorie

Source avec Zip ORM : DAO, ACTIVERECORD ET DBLIST par Reldan
Source avec une capture CET EXTRAIT PERMET D'AJOUTER DANS UN TABLEAU UNE AGRÉGATION ... par Denis007
EXPORT DE BASE AU FORMAT CSV par remib74
Source avec Zip RECHERCHE DES DOUBLONS DANS UNE TABLE MYSQL EN SÉLECTIONNANT... par aladec2007
[CRON] INSERT ON DUPLICATE KEY UPDATE par pierreSabatier

 Sources en rapport avec celle ci

EXPORT DE BASE AU FORMAT CSV par remib74
Source avec Zip Source avec une capture GESTIONNAIRE D'ELEVES OU CARNET D'ADRESSE AVEC EXPORT XLS par cod57
Source avec Zip IMPORT FICHIERS CSV DANS UNE BASE DE DONNÉES par shannara
Source avec Zip Source avec une capture IMPORT CSV VERS BDD MYSQL AVEC CHOIX CHAMPS CSV / CHAMP BDD ... par caviar
Source avec Zip Source avec une capture GÉNÉRATION DE DOCUMENT OPENOFFICE 2.0 SPREADSHEET par rekam

Commentaires et avis

Commentaire de Mrreivax le 07/09/2006 12:18:59

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

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>

Commentaire de Mrreivax le 07/09/2006 19:08:17

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

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é!

Commentaire de Mrreivax le 08/09/2006 18:33:34

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

Commentaire de stef1589 le 08/09/2006 20:13:44

sympa ton code

Commentaire de Mrreivax le 08/09/2006 20:50:40

Merci!

Commentaire de boakim le 08/09/2006 22:02:26

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

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 ;-)

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 !

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

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...

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

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

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.  

Commentaire de phpmaster31 le 08/03/2010 14:53:34 7/10

Je trouve le script très intéressant et je rejoins le commentaire de MKOURKCH. Avez vous eu des pistes pour adapter la largeur ou la hauteur du tableau pour que l'on puisse voir l'intégralité du contenu des cellules?

Autre modification sur laquelle je cherche une solution: éviter que le tableau ne soit édité sur la même cellule par 2 personnes à la fois (accès concurrent) l'idée est de relire le fichier juste avant la sauvegarde et d'interdire l'écrasement d'une cellule modifiée entre temps.)

 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 Exécuter des requêtes mysql depuis un fichier excel ou csv [ par mbik ] Bonjours chers amis, Je suis dans la détresse faute de ne pouvoir résalier un projet qu'on a confié.Je suis un jeune stagiaire et novice en php. Voici Problème export csv [ par senateur17 ] Bonjour , J'ai essayé en local export de fichier en csv(program php) ,ça a marché mais en ligne il affiche les données directement sur le navigateur m Ecraser des données de champ d'une table php [ par senateur17 ] Bonjour , J'ai un table avec des champs par exemple nom,prenom,adresse Et ici j'ai un fichier en csv qui comporte ces trois champs Mon souci c'est d mettre a jour une table mysql grace a un fichier excel [ par antoinesoler ] Bonjour, ayant préalablement rempli une table grâce a une fichier excel, j'aimerai pouvoir la mettre a jour également avec un fichier excel (modifier [BAR]Importation de fichier Excel vers table Interbase [ par jjnsadis ] Comment procéder pour importer le contenu d'un fichier Excel vers une table Interbase ayant les mêmes colonnes ou champs [^^happy10] Erreur en ouvrant excel [ par senateur17 ] Bonjour, J'ai fait un export des données dans un fichier excel; Avant d'ouvrir excel,il ya les messages suivants: Le format du fichier que vous tentez Format nombre excel [ par senateur17 ] Bonjour, J'ai fait export des données à excel. Les nombres s'affichent comme ceux-ci:3,6615E+11 au lieu de 366149574443 par exemple. Comment gérer ce


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 6,833 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales