TABLEUR GENRE EXCEL EN PHP POUR LE CSV

Mrreivax Messages postés 100 Date d'inscription mercredi 9 juin 2004 Statut Membre Dernière intervention 26 juin 2010 - 7 sept. 2006 à 12:18
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
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/39473-tableur-genre-excel-en-php-pour-le-csv

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...
2dtension Messages postés 4 Date d'inscription samedi 19 juillet 2003 Statut Membre Dernière intervention 24 septembre 2006
24 sept. 2006 à 18:55
'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
kangoo75 Messages postés 47 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 28 mai 2008
15 sept. 2006 à 09:01
Excellent ca vas me servir pour ma boite qui voulais justement ce genre dinterface ! merci !
MrTHX Messages postés 1 Date d'inscription mercredi 24 mars 2004 Statut Membre Dernière intervention 10 septembre 2006
10 sept. 2006 à 16:32
Je l'ai testé pour le fun et ça marche. Cela pourrait me servir un jour. Bon travail ;-)
cs_boakim Messages postés 8 Date d'inscription samedi 26 août 2006 Statut Membre Dernière intervention 14 juin 2010
8 sept. 2006 à 22:02
Il n'est pas possible d'enregistrer des données qui contiennent des guillemets.
Mrreivax Messages postés 100 Date d'inscription mercredi 9 juin 2004 Statut Membre Dernière intervention 26 juin 2010 7
8 sept. 2006 à 20:50
Merci!
stef1589 Messages postés 44 Date d'inscription dimanche 19 mars 2006 Statut Membre Dernière intervention 27 mars 2008
8 sept. 2006 à 20:13
sympa ton code
Mrreivax Messages postés 100 Date d'inscription mercredi 9 juin 2004 Statut Membre Dernière intervention 26 juin 2010 7
8 sept. 2006 à 18:33
Ben oui, comme sa, le zip est déja débugué!
vincseize Messages postés 113 Date d'inscription mardi 25 février 2003 Statut Membre Dernière intervention 28 mars 2010
8 sept. 2006 à 11:31
Salut


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

Merci de nous tenir informé!
Mrreivax Messages postés 100 Date d'inscription mercredi 9 juin 2004 Statut Membre Dernière intervention 26 juin 2010 7
7 sept. 2006 à 19:08
Merci beaucoup pour l'info!
Sa marche super maintenant!
Bravo!
Steph666 Messages postés 74 Date d'inscription jeudi 6 mars 2003 Statut Membre Dernière intervention 5 juin 2008
7 sept. 2006 à 17:23
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">> <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>
Mrreivax Messages postés 100 Date d'inscription mercredi 9 juin 2004 Statut Membre Dernière intervention 26 juin 2010 7
7 sept. 2006 à 12:18
Si quelqu'un a la solution!
Merci de la faire passer!