bonjour,
je crois que le titre est asser explicite...
connaissez vous un moyen "simple" de manipuler des fichiers excel sous linux avec php ?
( oui je sais, excel, linux ça fais 8O mais je ne peux pas "demenager" un serveur juste pour ça )
Version imprimable
bonjour,
je crois que le titre est asser explicite...
connaissez vous un moyen "simple" de manipuler des fichiers excel sous linux avec php ?
( oui je sais, excel, linux ça fais 8O mais je ne peux pas "demenager" un serveur juste pour ça )
je precise que j'ai vu ceci dans mes recherches :
je ne suis pas tres fort en anglais, mais :
( http://pear.php.net/package/Spreadsheet_Excel_Writer )
signifie bien que tout ce que je ferais avec ça sous PHP pour excel derniere version ne fonctionnera pas ?Citation:
Spreadsheet_Excel_Writer was born as a porting of the Spreadsheet::WriteExcel Perl module to PHP.
It allows writing of Excel spreadsheets without the need for COM objects.
It supports formulas, images (BMP) and all kinds of formatting for text and cells.
It currently supports the BIFF5 format (Excel 5.0), so functionality appeared in the latest Excel versions is not yet available.
( je ne peux pas non plus installer un vieux excel sur les potes clients. )
de plus, il n'y a visiblement pas beaucoup de documentation en français ( je les lirais en anglais, mais si vous avez une autre solution, je preferrerais ... )
merci d'avance
:wink:
Cette phrase veut dire que tu ne pourras exploiter que les fonctionnalités d'excel 5.0. Mais microsoft n'étant tout de même pas le diable, il assure une compatibilité des vieux fichiers excel avec les nouvelles versions de l'applications.Citation:
It currently supports the BIFF5 format (Excel 5.0), so functionality appeared in the latest Excel versions is not yet available
Bon, ceci dit je ne sais dans quel but tu veux créer des fichiers excel, mais si c'est pour balancer un tableau de 4 colonnes et 30 lignes tourne toi plutot vers le CSV ou les formats du même genre. Cela te prendre 40 fois moins de temps.
ce n'est pas un tableau de 4 colonnes et 30lignes, mais 20feuilles
et 4graphiques...
( et peut-etre des macros faites par quelqu'un d'autre... )
ah ouais vaut mieux que tu passes par une librairie la. Et avant de me lancer dedans par mesure de sécurité je vérifierais que Excel manges bien les fichiers excel créé avec PEAR, on est jamais trop prudent ;)
oui c'est sur,Citation:
Envoyé par ePoX
mais si jamais quelqu'un a une autre solution a me proposer que PEAR, je suis preneur !
et si quelqu'un a deja essayer/relaiser des choses avec PEAR, je suis aussi preneur du retour d'experience...
Une url intéressante :
http://www.theleehousehold.com/serendipity/index.php?/archives/4-Workable-package-of-PHP-Spreadsheet-Writer..html
j'ai finalement choisi d'installer un serveur Apache + PHP + Mysql sous windows, juste pour ça...
mon nouveau probléme, l'objet COM "rame"
auriez vous une idée d'ou peut venir ce probléme ?
le code source est un copier / coller integral du tutoriel
http://stephaneey.developpez.com/tutoriel/php/phpexcel/
( code n°1, apres avoir prealablement creer la base phpexcel et rentré les données qui vont bien... )
quand tu dis qu'il rame ca veut dire quoi ....
ça veut dire page blanch, barre de progression qui charge, mais rien ne s'affiche...
j'ai essayé de mettre un
echo 'toto';
dans la boucle qui genere les lignes/cellules
suivit d'un flush();
et je ne voi pas toto...
la page charge, sans s'arreter.
je remet le code au cas ou .. :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93 <? define("FILENAME","test.xls"); //constante: nom du fichier à générer $conn=mysql_connect('localhost','root','') or die('Probleme lors de la connexion a la BD MYSQL'); mysql_select_db('phpexcel') or die('Problème lors de la sélection de la BD MYSQL');//Sélection de la DB "phpexcel" $query="SELECT DATE_APPEL,NOM_CLIENT,XID_CLIENT FROM APPELS_CLIENTS INNER JOIN CLIENTS ON "; $query.="ID_CLIENT=XID_CLIENT ORDER BY XID_CLIENT,DATE_APPEL";//Requête faisant une jointure sur les 2 tables $res=mysql_query($query) or die('Problème lors de la réception des enregistrements '.$query);//Exécution de la requête if(mysql_num_rows($res)>0){ //Si au moins une ligne est retournée $excel=new COM("Excel.application"); //Instanciation de l'objet COM $excel->sheetsinnewworkbook=1;//1 seule feuille de calcul dans le document $excel->Workbooks->Add();//Ajout d'un classeur $book=$excel->Workbooks(1);//$book contient le classeur actif $sheet=$book->Worksheets(1);//$sheet contient la feuille active $sheet->Name="Rapport appel des clients";//Attribution d'un nom à la feuille $j=64;//C'est ici qu'on va jouer sur les codes ascii $jj=64; $client_prec=0; $nombre_ligne=0; while($row=mysql_fetch_object($res)){//Parcours du résultat de la requête echo 'toto';flush(); if($client_prec != $row->XID_CLIENT){//Rupture sur le numéro de client $j++; $i=3; if($nombre_ligne>0){ $lignes[]=$nombre_ligne;//le tableau $lignes contiendra le nbre d'appels par client $nombre_ligne=0; } //Ce bloc if vérifie si il s'agit d'une colonne de type "A" "B" ou "AA" "AB"... if($jj==64){ $cell=$sheet->Range(chr($j).'1');//chr, renvoie la lettre correspondant au code ASCII } else{ $cell=$sheet->Range(chr($jj).chr($j).'1'); } $cell->value=$row->NOM_CLIENT;//Attribution d'une valeur à la cellule $cell->HorizontalAlignment=-4108;//On centre le texte $cell->Font->ColorIndex = 41;//Coloration } $nombre_ligne++;//$nombre_ligne sert à calculer le nbre d'appels par client if($jj==64){ $cell=$sheet->Range(chr($j).$i); } else{ $cell=$sheet->Range(chr($jj).chr($j).$i); } //Si $j représentant la colonne simple = "Z", alors incrémenter $jj qui représente la 2ème colonne if(chr($j)=='Z'){ $jj++; $j=64; } $cell->value=$row->DATE_APPEL;//Attribution de la date et de l'heure à la cellule $cell->NumberFormat="jj/mm/aaaa hh:mm:ss";//Définition du format de la cellule /* Notez que selon vos paramètres régionnaux et la configuration d'Excel, vous devez peut-être utiliser un format de cellule comme ceci: dd/mm/yyyy hh:mm:ss (anglais)*/ $client_prec=$row->XID_CLIENT;//gestion de la rupture sur le numéro de client $i++; } } else{ die('Les tables sont vides ou pas de jointure possible');//si la requête ne retourne rien } $lignes[]=$nombre_ligne;//ajout des appels du dernier client dans $lignes $sorted=$lignes; //on copie le nombre d'enreg par client dans un autre tableau sort($sorted); //on trie cet autre tableau //on récupère le plus grand nombre de record, pour pouvoir aligner les résultats dans Excel $max_val=5+$sorted[count($sorted)-1]; $colonne=65; $colonne2=64; //Boucle allant afficher le nombre total d'appels par client for($i=0;$i<count($lignes);$i++){ if($colonne2>64){ $cell=$sheet->Range(chr($colonne2).chr($colonne).$max_val); } else{ $cell=$sheet->Range(chr($colonne).$max_val); } if(chr($colonne)=='Z'){ $colonne2++; $colonne=64; } $cell->value="Total: ".$lignes[$i]; $cell->HorizontalAlignment=-4108; $cell->Font->ColorIndex=3; $colonne++; } $book->saveas(FILENAME);//Sauvegarde du fichier unset($sheet);//Libération de $sheet unset($book);//Libération de $book $excel->Workbooks->Close();//Fermeture du classeur $excel->Quit();//On quitte Excel unset($excel);//Libération de l'instance $excel ?>