Php / Excel problème de taille de fichier ???

fredo35m Messages postés 244 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 12 juillet 2006 - 24 janv. 2006 à 17:04
fredo35m Messages postés 244 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 12 juillet 2006 - 25 janv. 2006 à 13:58
Bonjour, j'ai un programme php, qui met en liaison deux fichier excel, afin d'en obtenir un en resultat, cela fonctionne bien lorsque j'ai pas beaucoup de ligne et de colonne, en revanche cela semble (je dis semble pas je ne vois pas de résultat, cela plante avant d'avoir fini) ne pas fonctionner si j'ai trop de colonne et/ou ligne. quelqu'un a-t-il déjà eu ce problème?? si oui comment y remedier?? je mets également quelques partie de mon pogramme au cas où cela viendrait du prog (ça ne m'étonnerais pas en même temps) même si ça marche avec les petits fichiers !!!!
Voici ce qui marche :
Fichier point:

<COLGROUP>
<COL span=5 width=80>

----

NOM_POINT,
CLE_VOIE,
CPT01,
CPT03,
CPT05,
----

POINT2,
VOIE2,
2904,
1234,
5678,
----

POINT3,
VOIE3,
42017,
1357,
2468,
----

POINT1,
VOIE1,
7263,
1470,
2581
Fichier formule:


<COLGROUP>
<COL span=7 width=80>

----

CLE_VOIE,
V_annee_xx_niveau,
V_annee_xx_valeur,
P1,
P2,
P3,
P4,
----

,
,
,
,
,
,
,
----

,
,
,
,
,
,
,
----

,
,
,
,
,
,
,
----

VOIE1,
,
,
POINT1,
,
,
,
----

VOIE2,
,
,
POINT2,
,
,
,
----

VOIE3,
,
,
POINT3,
,
,
,
----

VOIE4,
,
,
POINT4

Fichier en resultat :

<COLGROUP>
<COL span=7 width=80>

----

CLE_VOIE,
V_01_niveau,
V_01_valeur,
P1,
P2,
P3,
P4,
----

VOIE1,
0,
7263,
POINT1,
,
,
,
----

VOIE2,
0,
2904,
POINT2,
,
,
,
----

VOIE3,
0,
42017,
POINT3,
,
,
,
----

VOIE4,
0,
,
POINT4


En fin voici une partie de mon code au cas où :
$data->read("../data/$formule");
$datab->read("../data/$point");
.....
for ($i=2; $i<=$data->sheets[0]['numRows'];$i++)
{
for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) {
if ($data->sheets[0]['cells'][1][$j]=="CLE_VOIE")
{ $CLE=$data->sheets[0]['cells'][$i][$j]; } else {$CLE=''; }
if ($data->sheets[0]['cells'][1][$j]=="P1")
{ $P1=$data->sheets[0]['cells'][$i][$j]; } else {$P1=''; }

....

for ($r=2; $r<=$datab->sheets[0]['numRows'];$r++)
{
for ($c = 1; $c <= $datab->sheets[0]['numCols']; $c++) {
if ($datab->sheets[0]['cells'][1][$c]=="NOM_POINT")
{ $NOMP=$datab->sheets[0]['cells'][$r][$c]; }
if ($datab->sheets[0]['cells'][1][$c]=="CLE_VOIE")
{ $CLEP=$datab->sheets[0]['cells'][$r][$c]; }
if ($datab->sheets[0]['cells'][1][$c]==$SELCPT)
{ $CPT=$datab->sheets[0]['cells'][$r][$c]; }


//SELECTION DU COMPTEUR SI IL S'AGIT DU MEME POINT
if ($P1<>'')
{
if ($NOMP===$P1)
{
//ATTRIBUTION DE LA VALEUR DU COMPTEUR
$valeur=$CPT;
}
}
else
{
$VALEUR='0';
}
//ECRITURE DE LA VALEUR CORRESPONDANT AU POINT
$worksheet->write($i, 3, $valeur );
$valeur='';
//FERMETURE DE LA LECTURE DU FICHIER POINT
}
}
//FERMETURE DE LA LECTURE DU FICHIER FORMULE
}
}
$workbook->close();

Par avance merci !!!

11 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
25 janv. 2006 à 10:05
Hello,

qu'est-ce que tu appelles "planter" ? Tu as un message d'erreur, que se passe-t-il au juste ?
0
fredo35m Messages postés 244 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 12 juillet 2006
25 janv. 2006 à 10:21
Ben en fait, au bout d'un certain temps, il me dit impossible d'afficher la page !!
ce qui m'étonne c'est que cela fonctionne lorsque j'ai un petit fichier !!!
peut être faut il libérer des ressources ou truc comme ça !! mais bon je ne suis pas un genie de tout ça !!!
je dois très certainement faire une erreur quelque part mais je ne sais pas où !!! car en gros j'imbrique des conditions et c'est peut être ça qui ne fonctionne pas bien !! je te mets ci-dessous le code peut être que tu verras où se trouve mon erreur d'imbrication !!

Tu n'as peut être pas besoin de tout et c'est un peu long mais je préfère tout mettre au cas où !!!
merci d'avance !!

//LECTURE DES AUTRES LIGNES DU FICHIER FORMULE
for ($i=2; $i<=$data->sheets[0]['numRows'];$i++)
{
for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) {
if ($data->sheets[0]['cells'][1][$j]=="CLE_VOIE")
{ $CLE=$data->sheets[0]['cells'][$i][$j]; } else {$CLE=''; }
if ($data->sheets[0]['cells'][1][$j]=="P1")
{ $P1=$data->sheets[0]['cells'][$i][$j]; } else {$P1=''; }
if ($data->sheets[0]['cells'][1][$j]=="P2")
{ $P2=$data->sheets[0]['cells'][$i][$j]; } else {$P2=''; }
if ($data->sheets[0]['cells'][1][$j]=="P3")
{ $P3=$data->sheets[0]['cells'][$i][$j]; } else {$P3=''; }
if ($data->sheets[0]['cells'][1][$j]=="P4")
{ $P4=$data->sheets[0]['cells'][$i][$j]; } else {$P4=''; }
if ($data->sheets[0]['cells'][1][$j]=="P5")
{ $P5=$data->sheets[0]['cells'][$i][$j]; } else {$P5=''; }
if ($data->sheets[0]['cells'][1][$j]=="P6")
{ $P6=$data->sheets[0]['cells'][$i][$j]; } else {$P6=''; }
if ($data->sheets[0]['cells'][1][$j]=="P7")
{ $P7=$data->sheets[0]['cells'][$i][$j]; } else {$P7=''; }
if ($data->sheets[0]['cells'][1][$j]=="P8")
{ $P8=$data->sheets[0]['cells'][$i][$j]; } else {$P8=''; }
if ($data->sheets[0]['cells'][1][$j]=="P9")
{ $P9=$data->sheets[0]['cells'][$i][$j]; } else {$P9=''; }
if ($data->sheets[0]['cells'][1][$j]=="P10")
{ $P10=$data->sheets[0]['cells'][$i][$j]; } else {$P10=''; }
if ($data->sheets[0]['cells'][1][$j]=="E1F")
{ $E1F=$data->sheets[0]['cells'][$i][$j]; } else {$E1F=''; }
if ($data->sheets[0]['cells'][1][$j]=="E1P1")
{ $E1P1=$data->sheets[0]['cells'][$i][$j]; } else {$E1P1=''; }
if ($data->sheets[0]['cells'][1][$j]=="E1P2")
{ $E1P2=$data->sheets[0]['cells'][$i][$j]; } else {$E1P2=''; }
if ($data->sheets[0]['cells'][1][$j]=="E2F")
{ $E2F=$data->sheets[0]['cells'][$i][$j]; } else {$E2F=''; }
if ($data->sheets[0]['cells'][1][$j]=="E2P1")
{ $E2P1=$data->sheets[0]['cells'][$i][$j]; } else {$E2P1=''; }
if ($data->sheets[0]['cells'][1][$j]=="E2P2")
{ $E2P2=$data->sheets[0]['cells'][$i][$j]; } else {$E2P2=''; }
if ($data->sheets[0]['cells'][1][$j]=="E3F")
{ $E3F=$data->sheets[0]['cells'][$i][$j]; } else {$E3F=''; }
if ($data->sheets[0]['cells'][1][$j]=="E3P1")
{ $E3P1=$data->sheets[0]['cells'][$i][$j]; } else {$E3P1=''; }
if ($data->sheets[0]['cells'][1][$j]=="E3P2")
{ $E3P2=$data->sheets[0]['cells'][$i][$j]; } else {$E3P2=''; }

if ($P1<>'')
{
$niveau='0';
}
else if ($P1=='' and $E1F=='moy')
{
$niveau='1';
}
else if ($P1=='' and $E1F=='dif')
{
$niveau='2';
}
else if ($P1=='' and $E1F=='som')
{
$niveau='3';
}
else if ($P1=='' and $E1F=='mem')
{
$niveau='4';
}
else if ($P1=='' and $E1F=='')
{
$niveau='';
}


$worksheet->write($i, 1, $CLE );
$worksheet->write($i, 2, $niveau );


$worksheet->write($i, 4, $P1 );
$worksheet->write($i, 5, $P2 );
$worksheet->write($i, 6, $P3 );
$worksheet->write($i, 7, $P4 );
$worksheet->write($i, 8, $P5 );
$worksheet->write($i, 9, $P6 );
$worksheet->write($i, 10, $P7 );
$worksheet->write($i, 11, $P8 );
$worksheet->write($i, 12, $P9 );
$worksheet->write($i, 13, $P10 );
$worksheet->write($i, 14, $E1F );
$worksheet->write($i, 15, $E1P1 );
$worksheet->write($i, 16, $E1P2 );
$worksheet->write($i, 17, $E2F );
$worksheet->write($i, 18, $E2P1 );
$worksheet->write($i, 19, $E2P2 );
$worksheet->write($i, 20, $E3F );
$worksheet->write($i, 21, $E3P1 );
$worksheet->write($i, 22, $E3P2 );



//JUSQUE LA L'ECRITURE SE PASSE BIEN


//ENSUITE JE SOUHAITE RECUPERER LA VALEUR DU COMPTEUR EN FONCTION DU POINT


//LECTURE DES LIGNES DU FICHIER POINT (AUTRES QUE LA PREMIERE LIGNE) AFIN DE RECUPERER LA VALEUR DU COMPTEUR DU POINT
//MISE EN RELATION DE P1=POINT N°1 DU SEGMENT (FICHIER FORMULE) ET NOMP=POINT (FICHIER POINT)
//POUR L'INSTANT PAS DE FORMULE JUSTE POUR TESTER LA RECUPERATION DE LA BONNE VALEUR DU COMPTEUR EN FONCTION DU POINT


for ($r=2; $r<=$datab->sheets[0]['numRows'];$r++)
{
for ($c = 1; $c <= $datab->sheets[0]['numCols']; $c++) {
if ($datab->sheets[0]['cells'][1][$c]=="NOM_POINT")
{ $NOMP=$datab->sheets[0]['cells'][$r][$c]; }
if ($datab->sheets[0]['cells'][1][$c]=="CLE_VOIE")
{ $CLEP=$datab->sheets[0]['cells'][$r][$c]; }
if ($datab->sheets[0]['cells'][1][$c]==$SELCPT)
{ $CPT=$datab->sheets[0]['cells'][$r][$c]; }


//SELECTION DU COMPTEUR SI IL S'AGIT DU MEME POINT
if ($P1<>'')
{
if ($NOMP===$P1)
{
//ATTRIBUTION DE LA VALEUR DU COMPTEUR
$valeur=$CPT;
echo "POINT=";
echo $NOMP;
echo "VOIE=";
echo $CLEP;
echo "COMPTEUR=";
echo $valeur;
}
}
else
{
$VALEUR='0';
}
//ECRITURE DE LA VALEUR CORRESPONDANT AU POINT
$worksheet->write($i, 3, $valeur );
$valeur='';
$P1='';
$NOMP='';
//FERMETURE DE LA LECTURE DU FICHIER POINT
}
}
//FERMETURE DE LA LECTURE DU FICHIER FORMULE
}
}
$workbook->close();
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
25 janv. 2006 à 10:24
Ca ressemble un peu à un timeout ton problème. Tu as la main sur le serveur web ? Si oui, change le max_execution_time, mais le à 0 (pas de limite), et vois si tu as le même problème.
0
fredo35m Messages postés 244 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 12 juillet 2006
25 janv. 2006 à 10:27
ben non j'ai pas la main sur le serveur web, mais je peux mettre ça dans mon code non ?? enfin je dis ça mais j'suis pas un champion !!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fredo35m Messages postés 244 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 12 juillet 2006
25 janv. 2006 à 10:28
mais ça m'étonne un peu car mon fichier n'est pas si gros que ça non plus !!! c'est ça qui me chagrine !!
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
25 janv. 2006 à 10:34
Non tu ne peux pas. Essaye : set_time_limit (0); dans ton code, mais à mon avis, ça ne marchera pas.
Sinon, il ne te restera plus qu'à optimiser ton code...ce qui ne va pas être évident puisque tu utilises une classe excel apparemment, que tu n'as sans doute pas programmée toi-même.
Mais bon, sur ton code, il y a sans doute des trucs à faire.
Par exemple, ta 1ère série de if() me laisse rêveur... ;-) à mon avis tu t'emmerdes pour pas gd chose...
0
fredo35m Messages postés 244 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 12 juillet 2006
25 janv. 2006 à 10:44
ben oui j'ai chopé classe excel sur internet !!!
ben ma 1ère série de if c'est pour réconnaitre les champs dans les colonnes!!! je trouvait ça pas mal moi ....!!!! mais bon je te dis je ne suis pas un as donc je tatonne pas mal !!!


je pense qu'il s'agit de mes boucles !!


Car en fait mon but est de lire le 1er fichier (formules), et pour chaque point aller voir dans le 2ème fichier (points) et récupérer une valeur de ce point si il trouve les mêmes valeurs de point !!
en diminuant mon code (des trucs inutiles) ça donne ça :

$data->read("../data/$formule");
$datab->read("../data/$point");
....

//LECTURE DES LIGNES DU FICHIER FORMULE

for ($i=2; $i<=$data->sheets[0]['numRows'];$i++)
{
for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++)
{

if ($data->sheets[0]['cells'][1][$j]=="CLE_VOIE")
{ $CLE=$data->sheets[0]['cells'][$i][$j]; } else {$CLE=''; }
if ($data->sheets[0]['cells'][1][$j]=="P1")
{ $P1=$data->sheets[0]['cells'][$i][$j]; } else {$P1=''; }
....

for ($r=2; $r<=$datab->sheets[0]['numRows'];$r++)
{
for ($c = 1; $c <= $datab->sheets[0]['numCols']; $c++)
{
if ($datab->sheets[0]['cells'][1][$c]=="NOM_POINT")
{ $NOMP=$datab->sheets[0]['cells'][$r][$c]; }
if ($datab->sheets[0]['cells'][1][$c]=="CLE_VOIE")
{ $CLEP=$datab->sheets[0]['cells'][$r][$c]; }
if ($datab->sheets[0]['cells'][1][$c]==$SELCPT)
{ $CPT=$datab->sheets[0]['cells'][$r][$c]; }

//FERMETURE DE LA LECTURE DU FICHIER POINT
}
}
//FERMETURE DE LA LECTURE DU FICHIER FORMULE
}
}
0
fredo35m Messages postés 244 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 12 juillet 2006
25 janv. 2006 à 11:28
alors maintenant j'ai carrement l'explorer qui se ferme !! enfin il me dit qu'il a rencontrer une erreur !!!! de pire en pire !!!!!!!!!
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
25 janv. 2006 à 13:29
et ça marche sur de petits fichiers toujours ?
Là, t'as un écrasement mémoire sans doute, remet ton code d'équerre, comme avant.
IL faut le nettoyer mais mieux lol
0
fredo35m Messages postés 244 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 12 juillet 2006
25 janv. 2006 à 13:54
ben oui ça marche toujours pour les petits fichiers !!!!
j'avais juste rajouté un echo pour voir un peu ce qu'il faisait !!! donc je crois que Internet explorer pete un cable à un moment donnée !!! (je pense pas pouvoir faire planté IE !!!)

je crois vraiment que ça de mes boucles !!! car en gros pour chaque colonne et pour chaque ligne du 1er fichier il doit regarder pour chaque colonne et chaque ligne du second !! je crois que ça fait trop de trucs à faire !!!!
0
fredo35m Messages postés 244 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 12 juillet 2006
25 janv. 2006 à 13:58
yaaaalaaaaaaaa !!! ça marche !!!!!! c'était bien mes histoire de boucles !!!!!!! il fallait fermer pour la lecture du second fichier lorqu'il a lu les colonnes !!!!
merci de ton aide !!!
je vais reessayer quand même mais normalement ça fonctionne :!!!!

for ($r= 2; $r<=$datab->sheets[0]['numRows'];$r++)
{
for ($c = 1; $c <= $datab->sheets[0]['numCols']; $c++) {
if ($datab->sheets[0]['cells'][1][$c]=="NOM_POINT")
{ $NOMP=$datab->sheets[0]['cells'][$r][$c]; }
if ($datab->sheets[0]['cells'][1][$c]=="CLE_VOIE")
{ $CLEP=$datab->sheets[0]['cells'][$r][$c]; }
if ($datab->sheets[0]['cells'][1][$c]==$SELCPT)
{ $CPT=$datab->sheets[0]['cells'][$r][$c]; }
}

//SELECTION DU COMPTEUR SI IL S'AGIT DU MEME POINT
if ($P1<>'')
{
if ($NOMP ===$P1)
{
//ATTRIBUTION DE LA VALEUR DU COMPTEUR
$valeur=$CPT;
}
}


//ECRITURE DE LA VALEUR CORRESPONDANT AU POINT
//echo "POINT=";
//echo $NOMP;
//echo "VOIE=";
//echo $CLEP;
///echo "COMPTEUR=";
//echo $valeur;
$worksheet->write($i, 3, $valeur );
$valeur='';
//FERMETURE DE LA LECTURE DU FICHIER POINT
}
}
//FERMETURE DE LA LECTURE DU FICHIER FORMULE


}
$workbook->close();
0
Rejoignez-nous