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...
Afficher les 16 commentaires