1 pièce(s) jointe(s)
[Excel] Génération de feuilles
Bonjour,
Je dois réaliser des extraction de requêtes sur une base oracle via php afin d'afficher le résultat dans une feuille Excel.
Pour cela, j'ai utilisé la librairie php_writeexcel qui fonctionne plutôt bien. Cependant, dans une certaine partie de l'application, les requêtes s'affichent mal dans le fichier Excel. Je ne comprends vraiment pas pourquoi, c'est peut être un problème d'encodage mais ce qui m'étonne c'est que dans la partie admin tout marche bien.
Je vous montre ma fonction qui permet de générer le fichier Excel :
A savoir que $requete est le code SQL de la requête, et $libelle le libelle de la requête.
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
| function afficherRequete($requete,$libelle)
{
$fname = tempnam("/tmp", $libelle.".xls"); //Nom du fichier .xls qui va être généré
$workbook = &new writeexcel_workbook($fname); //On créé le fichier xls
$worksheet = &$workbook->addworksheet(); //On ajoute un worksheet
$heading =& $workbook->addformat(array('align' => 'center', 'bold' => 1)); //On défini un format
set_time_limit(300000000); //Eviter que la requete se bloque si elle dure trop longtemps
$result = array();
$req = oci_parse($this->connect, $requete); //On parse la requete
$curseur = oci_execute($req); //On execute la requete
$nrows = oci_fetch_all($req, $results); //On récupère le nombre de résultats
$i=0;
foreach ($results as $key => $val) //On récupère toutes les valeurs du résultat de la requête
{
$worksheet->write(0,$i,$key,$heading);
//echo $i.' | '.$key.' | '.$heading.'<br>';
$i++;
}
$header =& $workbook->addformat();
$header->set_align('left');
for ($i = 0; $i < $nrows; $i++)
{
$j=0;
foreach ($results as $data)
{
$worksheet->write($i+1,$j,$data[$i],$header);
//echo $data[$i].'<br>';
$j++;
}
}
$workbook->close();
header("Content-Type: application/x-msexcel; name=\"".$libelle.".xls\"");
header("Content-Disposition: inline; filename=\"".$libelle.".xls\"");
$fh=fopen($fname, "rb");
fpassthru($fh);
unlink($fname);
} |
Et donc voici le type de fichiers Excel que génère cette fonction : (voir pièce jointe)
On voit donc que malgré le fait que ça soit très mal encodé. Les données sont là. La requête est donc bien effectuée c'est à l'affichage que ça merde.
Voilà donc si vous avez des idées car depuis hier je bloque. Je peux vous fournir d'autres partie de code si nécessaire, n'hésitez pas à me demander.
En vous remerciant d'avance