Bonjour,
Est-il possible d'utiliser cette bibliothèque avec Excel 2010 ?
Merci d'avance pour votre réponse et bon réveillon.
beegees
Bonjour,
Est-il possible d'utiliser cette bibliothèque avec Excel 2010 ?
Merci d'avance pour votre réponse et bon réveillon.
beegees
Il faut toujours viser la lune, car même en cas d'échec on arrive dans les étoiles. O.Wilde
Mes Articles/Critiques :
Merise - Guide pratique
PHPExcel
PostgreSQL : Administration et exploitation d'une base de données
PostgreSQL : Entraînez-vous à créer et programmer une base de données relationnelle
Bonjour,
Bonne année et merci pour ta réponse.
beegees
Bonjour et Bonne Année à tous.
Merci pour ce sympathique tutoriel.
Bien que débutant depuis peu avec PHP, je n'ai eu aucun mal à générer un fichier Excel en suivant les explications.
Par contre, je rencontre un problème à l'ouverture du fichier dans Excel 2003.
Le choix technique s'est porté sur un fichier de type Excel 5 car nos clients peuvent exploiter à peu près n'importe quelle version du tableur.
Le fichier s'ouvre sans la moindre difficulté en employant Open Office Calc. Par contre, en utilisant Excel 2003, j'obtiens un message indiquant que le fichier est endommagé et qu'il a tenté de récupérer les informations.
Je récupère bien les données, mais les styles ont disparu.
Un test d'ouverture du fichier généré avec Excel 2007 ne semble pas présenter de problème.
Pour appliquer les styles, j'utilise applyFromArray() de la façon suivante :
Le style est défini de la façon suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part $workSheet->getStyle($cellCoordinates)->getFont()->applyFromArray($normalStyle);
Nous utilisons actuellement PHPExcel 1.6.7.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 $normalStyle = array( 'name' => 'Arial', 'bold' => false, 'italic' => false, 'underline' => PHPExcel_Style_Font::UNDERLINE_NONE, 'strike' => false, 'color' => array( 'rgb' => '00FF00' ) );
Quelqu'un aurait-il une piste vers laquelle m'orienter ?
D'avance merci.
[RESOLU] J'ai fini par mettre PHPExcel à jour avec la version 1.7.6 et ça marche comme sur des roulettes.
Bonjour,
À partir de PHPExcel j'aimerai pouvoir ouvrir un fichier .xlsm en lecture puis sauvegarder une copie de ce fichier après que l'ensemble des macros aient été interprétées.
Le but est de générer ce nouveau xls à partir du xlsm depuis le serveur qui lui possède l'accès à la BDD nécessaire.
Est-ce une opération possible ?
Sachant que le fichier xlsm de base est vraiment bourré de macros et que la plupart accèdent à la BDD.
d'avance merci.
bonjour merci pour ce tuto il m'as bien aider mais je bloque sur un point actuellement
j'utilise phpexcel sans la class maitrephylos
j'obtien le même message d'erreur que la personne sur la page précédente
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 $workbook = new PHPExcel; $sheet = $workbook->getActiveSheet(); $sheet->duplicateStyleArray(array('alignment'=>array('wrap'=>true), $tableau_lettres[$i].'2:'.$tableau_lettres[$i].$ligne)); //version d'origine $sheet->duplicateStyleArray(array('alignment'=>array('wrap'=>true), "A5:K5"));//version de test pour debug
Fatal error: Uncaught exception 'Exception' with message 'Cell coordinate can not be zero-length string.' in /var/svn/staff/adrien/socle-site/class/PHPExcel/PHPExcel_Cell.class.php on line 506
Exception: Cell coordinate can not be zero-length string. in /var/svn/staff/adrien/socle-site/class/PHPExcel/PHPExcel_Cell.class.php on line 506
PHPExcel_Worksheet->duplicateStyleArray( $pStyles = array ('alignment' => array ('wrap' => TRUE), 0 => 'A5:K5'), $pRange = ???, $pAdvanced = ??? )
PHPExcel_Style->applyFromArray( $pStyles = array ('alignment' => array ('wrap' => TRUE), 0 => 'A5:K5'), $pAdvanced = TRUE )
PHPExcel_Cell::coordinateFromString( $pCoordinateString = '' )
voici les étapes de passages des fonctions avec mes coordonnée de debug en dure j'ai oublier un point pour initialiser les coordonnée je n'ai rien vu a ce sujet dans la page 4 du tuto
edit : je vien de trouver en fait
il y a une erreur de code dans ton tuto dans la partie
4.2.1.3. Les autres styles de PHPExcel_Style_Alignment
c'est pareil pour tous les codes duplicateStyleArray de la page dailleur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 $sheet->duplicateStyleArray(array( 'alignment'=>array( 'wrap'=>true), 'A21:F37');//ta version il manque une parenthèse fermante $sheet->duplicateStyleArray(array( 'alignment'=>array( 'wrap'=>true)), 'A21:F37');//corrigé ^^
@scorpking vérifie que le variables $tableau_lettres et $ligne ne sont pas vide ou null
Il faut toujours viser la lune, car même en cas d'échec on arrive dans les étoiles. O.Wilde
Mes Articles/Critiques :
Merise - Guide pratique
PHPExcel
PostgreSQL : Administration et exploitation d'une base de données
PostgreSQL : Entraînez-vous à créer et programmer une base de données relationnelle
@MaitrePylos je viens d’éditer mon message quand tu a répondu j'ai trouver d'où venais l'erreur
merci
Il faut toujours viser la lune, car même en cas d'échec on arrive dans les étoiles. O.Wilde
Mes Articles/Critiques :
Merise - Guide pratique
PHPExcel
PostgreSQL : Administration et exploitation d'une base de données
PostgreSQL : Entraînez-vous à créer et programmer une base de données relationnelle
Salut Pylos,
Ton tuto m'a été très utile, merci.Je rencontre maintenant le même problème que 2 personnes y a environ 2 ans et demi de ça maintenant que vous n'aviez pas résolu, en tout cas pas dans ces commentaires. Lorsque que j'enregistre mon fichier sur le serveur, aucun problème, il s'ouvre normalement.
Mais lorsque je veux le télécharger depuis mon site, j'ai un message d'erreur d'Excel lors de l'ouverture qui me dit Format ou extension invalide.
Avez-vous pu trouver une solution depuis ?
Cordialement,
Fabien.
Je peux avoir le lien du site ?
Il faut toujours viser la lune, car même en cas d'échec on arrive dans les étoiles. O.Wilde
Mes Articles/Critiques :
Merise - Guide pratique
PHPExcel
PostgreSQL : Administration et exploitation d'une base de données
PostgreSQL : Entraînez-vous à créer et programmer une base de données relationnelle
Il s'agit d'un intranet donc tu n'aurais pas pu essayer, merci quand même.
Cependant j'ai résolu le problème. J'ai trouvé un enième bout de code sur internet destiné à ouvrir le fichier et là, ça marche ! Pour ceux à qui ça pourrait servir, le voilà:
Merci Pylos !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 <?php $file = 'nom_du_fichier_sur_votre_serveur_que_vous_voulez_dl.xlsx'; if (file_exists($file)) { header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename='.basename($file)); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); header('Content-Length: ' . filesize($file)); ob_clean(); flush(); readfile($file); exit; } ?>
Salut MaitrePylos (et les autres),
Je viens vers vous car j'ai un petit problème avec PHPExcel.
Tout d'abord un grand merci à MaitrePylos pour ce superbe tuto qui m'a vraiment bien aidé.
Voici mon problème :
J'ai une durée en bdd SQL que je récupère dans mon script php (cette durée est un varchar(50)).
Ensuite, je mets cette durée dans une feuille Excel, en précisant bien que ma cellule est une date.
Cependant, dans Excel, je ne peux faire aucun calcul sur cette durée (j'aimerais faire une somme), et la durée est collée à gauche de la cellule, lorsque je double clique dessus et fais uniquement "entrée" pour valider, le nombre se remet à droite de la cellule et la somme fonctionne.
J'imagine donc que c'est une bêtise dans le format de la durée (je l'ai en H:i:s en PHP). Cependant, modifier le format de la cellule est inutile, cela ne change rien, je dois vraiment modifier le contenu "manuellement" pour que cela fonctionne, et vu que c'est une boucle, cela serait un peu long de faire cela.
Voici un petit bout de code, j'espère avoir été clair sur mon problème :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 <?php include ('include/config.php'); include('auth.php'); include 'Classes/PHPExcel.php'; include 'Classes/PHPExcel/Writer/Excel2007.php'; include 'Classes/PHPExcel/Writer/Excel5.php'; //Recup données en session pour construire requete $datedeb = $_SESSION['DateDeb']; $datefin = $_SESSION['DateFin']; $prestataire = $_SESSION['User_recherche']; $reqstr = $_SESSION['reqstr']; //Instanciation de l'objet excel $workbook = new PHPExcel; $sheet = $workbook->getActiveSheet(); $sheet->getStyle('H2:H999')->getNumberFormat()->applyFromArray( array( 'code' => PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME6 ) ); //Paramétrage de la premiere ligne, pour les titres $cpt_lig = 1; $sheet->setCellValueByColumnAndRow(0, $cpt_lig, 'Date Debut'); $sheet->setCellValueByColumnAndRow(1, $cpt_lig, 'Date Fin'); $sheet->setCellValueByColumnAndRow(2, $cpt_lig, 'Description'); $sheet->setCellValueByColumnAndRow(3, $cpt_lig, 'Catégorie'); $sheet->setCellValueByColumnAndRow(4, $cpt_lig, 'Prestataire'); $sheet->setCellValueByColumnAndRow(5, $cpt_lig, 'Code Client'); $sheet->setCellValueByColumnAndRow(6, $cpt_lig, 'Code Etat'); $sheet->setCellValueByColumnAndRow(7, $cpt_lig, 'Duree'); $sheet->setCellValueByColumnAndRow(8, $cpt_lig, 'Lieu'); $cpt_lig = 2; if ($prestataire == "-"){ // Requete si pas de prestataire choisi $query = mysql_query("SELECT * FROM vieilles_presta WHERE IsArchive = 0 AND DateDeb >= '".$_SESSION['DateDeb']."' AND DateFin <= '".$_SESSION['DateFin']."' ".$_SESSION['reqstr']." "); } else{ //Requete avec le choix du prestataire $query = mysql_query("SELECT * FROM vieilles_presta WHERE Prestataire='".$_SESSION['User_recherche']."' AND DateDeb >= '".$_SESSION['DateDeb']."' AND DateFin <= '".$_SESSION['DateFin']."' ".$_SESSION['reqstr']." "); } while($resul = mysql_fetch_array($query)){ //Récup du résultat et construction des cellules du fichier excel $dateDeb = date("d/m/Y H:i:s",strtotime($resul['DateDeb'])); $sheet->setCellValueByColumnAndRow(0, $cpt_lig, $dateDeb); $dateFin = date("d/m/Y H:i:s",strtotime($resul['DateFin'])); $sheet->setCellValueByColumnAndRow(1, $cpt_lig, $dateFin); $description = ($resul['Description']); $sheet->setCellValueByColumnAndRow(2, $cpt_lig, $description); $categ = $resul['Categ']; $sheet->setCellValueByColumnAndRow(3, $cpt_lig, $categ); $id = $resul['IDAuto']; $Presta = $resul['Prestataire']; $sheet->setCellValueByColumnAndRow(4, $cpt_lig, $Presta); $Client = $resul['CodeClient']; $sheet->setCellValueByColumnAndRow(5, $cpt_lig, $Client); $Etat = $resul['CodeEta']; $sheet->setCellValueByColumnAndRow(6, $cpt_lig, $Etat); $duree = $resul['Duree']; $duree = date("H:i:s", strtotime($duree)); $sheet->setCellValueByColumnAndRow(7, $cpt_lig, $duree); $lieu = ($resul['Lieu']); $sheet->setCellValueByColumnAndRow(8, $cpt_lig, $lieu); $cpt_lig++; } $sheet->setCellValueByColumnAndRow(9, 1,'=SUM(H1:H999)'); //Définition de la taille des cellules $sheet->getColumnDimension('A')->setWidth(19); $sheet->getColumnDimension('B')->setWidth(19); $sheet->getColumnDimension('C')->setWidth(40); $sheet->getColumnDimension('D')->setWidth(5); $sheet->getColumnDimension('E')->setWidth(5); $sheet->getColumnDimension('F')->setWidth(8); $sheet->getColumnDimension('G')->setWidth(8); // $sheet->setCellValueByColumnAndRow(7, $cpt_lig, $Client); $sheet->getPageSetup()->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE); //Formatage de la sortie, pour pouvoir télécharger le fichier $writer = new PHPExcel_Writer_Excel2007($workbook); //$writer->setOffice2003Compatibility(true); header('Content-type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition:inline;filename=Prestations-'.$prestataire.'.xlsx '); $writer->save('php://output'); ?>
Je précise que faire la cellule "somme" à la main dans le fichier Excel ne fonctionne pas non plus. J'utilises Excel 2003.
Voilà, j'espère ne pas vous avoir dérangé pour une grosse bêtise, bonne journée/soirée à tous et merci de m'avoir lu.
Salut,
Je dois éditer des fichiers Excel5 (pas le choix) pour vérifier qu'ils contiennent un certain nombre d'informations obligatoires, notamment dans les propriétés personnalisées.
Hors, le code suivant ne me renvoie rien :
L'objet $oExcel est correct, j'accède par exemple aux métadonnées, à la liste des feuilles...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $prop = $oExcel->getProperties(); $perso = $prop->getCustomProperties(); $prop->isCustomPropertySet("Révision");
Par contre, dès que j'attaque les "CustomProperties", je n'ai plus rien. Pas d'erreur, je récupère juste des chaînes vides alors que les propriétés sont bien renseignées.
Si quelqu'un avait un exemple de lecture/écriture de propriétés personnalisées, ça m'arrangerait.
Une dernière chose pendant que j'y suis : y a-t-il un moyen de lire le contenu de textes situés dans des "shapes" ?
A+
Gilles
Pour mon problème de dates(et d'addition des heures en particulier), j'ai trouvé la solution ici
En gros, j'ai juste rajouté
Et du coup, mon heure est vraiment considérée comme une heure, et je peux donc effectuer des calculs dessus, si cela peut aider d'autres personnes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 PHPExcel_Cell::setValueBinder( new PHPExcel_Cell_AdvancedValueBinder() ); //Définition du format $sheet->getStyleByColumnAndRow(10, 1) ->getNumberFormat() ->setFormatCode("[h]:mm");.
Bonne journée à tous.
J'ai crée un sujet mais je préfère également poster mon problème ici
je viens vers vous car j'ai un problème d'indice qui ne débute pas à zero lorsque j'utilise PhpExcel
Je vous fourni le code
code des fonctions
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145 <?php session_start(); require_once 'PHPExcel.php'; require_once 'PHPExcel/Writer/Excel5.php'; require_once 'includes/identifiants.php'; require_once 'includes/fonction.php'; //error_reporting(E_ALL & ~E_NOTICE); $connect=connect(); $sql = "select * from shp_export where document = '19' order by code_commu, nom"; $rs=pg_exec($connect,$sql); $k=0; while ($val = pg_fetch_array($rs)) { if($k%118 == 0) { $tableau[$k] = $val; //permet d'avoir l'enregistrement en double, pour pouvoir afficher le nom de la commune regroupant les Lieux dits $k++; $tableau[$k] = $val; $k++; } else if($val['code_commu'] != $comm) { $tableau[$k] = $val; $k++; $tableau[$k] = $val; $k++; } else { $tableau[$k] = $val; $k++; } $comm = $val['code_commu']; } $NbreData = $k; $NbrLigne = 118; if ($NbreData != 0) { $workbook = new PHPExcel(); $sheet = $workbook->getActiveSheet(); //---------------------------------En tête----------------------------------------------/ $sheet->getPageSetup()->setPaperSize(PHPExcel_Worksheet_PageSetup::PAPERSIZE_A3); //format A3 $sheet->getPageSetup()->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_PORTRAIT); //orientation Portrait //--------------------Initialisation des tailles des colonnes------------------------------------// $sheet->getColumnDimension('A')->setWidth(0.9595); $sheet->getColumnDimension('B')->setWidth(15.85); $sheet->getColumnDimension('C')->setWidth(5.69); $sheet->getColumnDimension('D')->setWidth(3.28); $sheet->getColumnDimension('E')->setWidth(3.28); $sheet->getColumnDimension('F')->setWidth(0.9595); $sheet->getColumnDimension('G')->setWidth(15.85); $sheet->getColumnDimension('H')->setWidth(5.69); $sheet->getColumnDimension('I')->setWidth(3.28); $sheet->getColumnDimension('J')->setWidth(3.28); $sheet->getColumnDimension('K')->setWidth(0.9595); $sheet->getColumnDimension('L')->setWidth(15.85); $sheet->getColumnDimension('M')->setWidth(5.69); $sheet->getColumnDimension('N')->setWidth(3.28); $sheet->getColumnDimension('O')->setWidth(3.28); $sheet->getColumnDimension('P')->setWidth(0.9595); $sheet->getColumnDimension('Q')->setWidth(15.85); $sheet->getColumnDimension('R')->setWidth(5.69); $sheet->getColumnDimension('S')->setWidth(3.28); $sheet->getColumnDimension('T')->setWidth(3.28); $sheet->getColumnDimension('U')->setWidth(0.9595); $sheet->getColumnDimension('V')->setWidth(15.85); $sheet->getColumnDimension('W')->setWidth(5.69); $sheet->getColumnDimension('X')->setWidth(3.28); $sheet->getColumnDimension('Y')->setWidth(3.28); $sheet->getColumnDimension('Z')->setWidth(0.9595); //------------------------------Marge de la page----------------------------// $sheet->getPageMargins()->setTop(0.20); //Valeur en inches $sheet->getPageMargins()->setRight(0.156); $sheet->getPageMargins()->setLeft(0.2535); $sheet->getPageMargins()->setBottom(0.20); $compteurPage = 1; $ligneEntete = 0; $colEntete = 0; $i = 0; for ($i=0; $i<$NbrLigne; $i++) { $j = 0; while (($i+($j*$NbrLigne))%$NbrLigne==$i && ($i+($j*$NbrLigne))<$NbreData) { $k = ($i+($j*$NbrLigne)); $ligneExcel = lineExcel($i, $compteurPage); $colExcel = colExcel($j); $sheet->setCellValueByColumnAndRow($colExcel, $ligneExcel, $k); $j++; if($k%590 == 0 && $k>0) { $compteurPage++; } } } $writer = new PHPExcel_Writer_Excel5($workbook); $records = './fichiertest.xls'; $writer->save($records); unset($workbook); ob_clean(); echo'<a href="./fichiertest.xls">Fichier Excel</a>'; } else {} ?>
J'utilise la méthode pour ranger les données par colonne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 function lineExcel($vali, $Page) { $linex = ($vali+1) + (2 * $Page) + (118 * ($Page - 1)); return $linex; } function colExcel($valj) { $modulo = $valj%5; $colex = ($modulo + 1) + (5 * $modulo) - $modulo; return $colex; }//fin fonction
Voici le lien de téléchargement du fichier XLS
http://www.toofiles.com/fr/oip/docum...hiertest7.html
Merci
EDIT : Problème résolu, je n'ai pas utiliser de modulo dans le While.
Tout d'abord, bonjour à tous et merci aux utilisateurs de forum que je consulte régulièrement.
je suis également utilisateur de cette superbe librairies PHP Excel en version 1.7.6 et je viens de parcourir toutes les pages de ce topic
je génère régulièrement des exports mais il y a toujours une chose que je n'arrive pas à faire fonctionner correctement.
voici par exemple un bout de code :
j'obtiens donc comme résultat : la date du jour dans des cellules Excel.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $date = mdate("%d/%m/%Y",strtotime(now())); $sheet->setCellValueByColumnAndRow($myCol++,$myRow, $date);
mais le problème , c'est que ce n'est pas reconnu en tant que date
car même si l'affichage est correcte : je n'arrive pas à faire des filtres de la date la plus récente à la plus ancienne par exemple ,
Des idées SVP ?
@LTF_MIKE = on en parle deux post plus haut avec la solution
@gfevrier = fais un var_dump de $perso pour voir
Il faut toujours viser la lune, car même en cas d'échec on arrive dans les étoiles. O.Wilde
Mes Articles/Critiques :
Merise - Guide pratique
PHPExcel
PostgreSQL : Administration et exploitation d'une base de données
PostgreSQL : Entraînez-vous à créer et programmer une base de données relationnelle
merci beaucoup pour ta réponse,
après étude et relecture , j'ai utilisé cette méthode qui fonctionne parfaitement :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $sheet->setCellValueByColumnAndRow($myCol++, $myRow, PHPExcel_Shared_Date::stringToExcel(trim($myData['date'])));
Partager