Tableur genre excel en php pour le csv

0/5 (16 avis)

Vue 21 973 fois - Téléchargée 3 067 fois

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!

Codes Sources

A voir également

Ajouter un commentaire Commentaires
phpmaster31 Messages postés 1 Date d'inscription samedi 6 mars 2010 Statut Membre Dernière intervention 8 mars 2010
8 mars 2010 à 14:53
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.)
mkourkch Messages postés 1 Date d'inscription mercredi 2 mai 2007 Statut Membre Dernière intervention 5 juillet 2007
5 juil. 2007 à 16:12
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.
cs_ben05 Messages postés 37 Date d'inscription vendredi 14 avril 2006 Statut Membre Dernière intervention 4 février 2009
12 janv. 2007 à 21:29
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
cs_ben05 Messages postés 37 Date d'inscription vendredi 14 avril 2006 Statut Membre Dernière intervention 4 février 2009
18 déc. 2006 à 13:10
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
cs_ben05 Messages postés 37 Date d'inscription vendredi 14 avril 2006 Statut Membre Dernière intervention 4 février 2009
28 nov. 2006 à 23:04
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"> </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"> $i </td>";
// Puis en ligne
for($j=0;$j<$col;$j++){
$tableur.= "<td class="clsCEL"></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>


<form action="index.php" method="post" name="frmTABLEUR">
">
">

">



<?
echo $tableur;
?>

</form>


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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.