8768 sujets

Développement web côté serveur, CMS

Bonjour à tous,

J'ai créé une page "exportation.php" qui doit exporter une table MySQL hébergé sur un serveur PHP 5.5 chez 1and1.

Voici le code :

<?php
 
$hostname="localhost:/tmp/mysql5.sock";
$username="XXXXXXXXXXXXXXXXXXXX";
$password="XXXXXXXXXXXXXXXXXXXX";
$link = mysql_connect("$hostname", "$username", "$password") or die('Connexion impossible !<br>'.$sql.'<br>'.mysql_error());;
 
 
 
// Sélection des donnees
mysql_select_db('XXXXXXXXXXXXXXXXX');       // sélection de la base
$result=mysql_query("select * from invites order by id_invite asc") or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
 
 
 
 
 
 
    // Fonctions d'exportation vers Excel.
    function xlsBOF() {
        echo pack("ssssss", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0);
        return;
    }
     
    function xlsEOF() {
        echo pack("ss", 0x0A, 0x00);
        return;
    }
     
    function xlsWriteNumber($Row, $Col, $Value) {
        echo pack("sssss", 0x203, 14, $Row, $Col, 0x0);
        echo pack("d", $Value);
        return;
    }
     
    function xlsWriteLabel($Row, $Col, $Value ) {
        $L = strlen($Value);
        echo pack("ssssss", 0x204, 8 + $L, $Row, $Col, 0x0, $L);
        echo $Value;
        return;
    }
     
    header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Content-Type: application/force-download");
    header("Content-Type: application/octet-stream");
    header("Content-Type: application/download");
    header("Content-Disposition: attachment;filename=inscription.xls");
    header("Content-Transfer-Encoding: binary ");
 
    xlsBOF();
 
    // Insertion de la ligne 1 : Titre de la feuille
    xlsWriteLabel(0,0,"Inscriptions");
 
    // Insertion des entêtes de colonnes.
    xlsWriteLabel(2,0,"ID");
    xlsWriteLabel(2,1,"NOM");
    xlsWriteLabel(2,2,"PRENOM");
 
    $xlsRow = 4;
 
    // Insertion des données dans chaque ligne
    while($row=mysql_fetch_array($result)){
        xlsWriteLabel($xlsRow,0,$row['id_invite']);
    xlsWriteLabel($xlsRow,1,$row['nom_invite']);
        xlsWriteLabel($xlsRow,2,$row['prenom_invite']);
 
         
        $xlsRow++;
    }
    xlsEOF();
    exit();
 
?>


Malheureusement, le résultat de la requête s'affiche bien, mais dans la page web et sans formatage.

Je souhaiterais avoir un fichier excel *.xls qui se télécharge au terme de la requête.
Ce qui n'est pas le cas pour le moment.

J'ai regardé chaque ligne de code, et je ne vois pas d'où vient le problème.

Merci d'avance.
Moi j'utilise OpenOffice, pour faire ce que tu fais.

OpenOffice est plus facile à mon sens pour configurer l'importation de donnée.

J'importe du .CSV et ça roule super bien.
Moi ceci marche
:

 <?php 
 
    // Fonctions d'exportation vers Excel.
    function xlsBOF() {
        echo pack("ssssss", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0);
        return;
    }
     
    function xlsEOF() {
        echo pack("ss", 0x0A, 0x00);
        return;
    }
     
    function xlsWriteNumber($Row, $Col, $Value) {
        echo pack("sssss", 0x203, 14, $Row, $Col, 0x0);
        echo pack("d", $Value);
        return;
    }
     
    function xlsWriteLabel($Row, $Col, $Value ) {
        $L = strlen($Value);
        echo pack("ssssss", 0x204, 8 + $L, $Row, $Col, 0x0, $L);
        echo $Value;
        return;
    }
     
    header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Content-Type: application/force-download");
    header("Content-Type: application/octet-stream");
    header("Content-Type: application/download");
    header("Content-Disposition: attachment;filename=inscription.xls");
    header("Content-Transfer-Encoding: binary ");
 
    xlsBOF();
 
 
    // Insertion des entêtes de colonnes.
    xlsWriteLabel(2,0,"ID");
 
 
    // Insertion des données dans chaque ligne
	for ($i = 0; $i < 10 ; $i++){
        xlsWriteLabel($i,0,"TEST" . $i);
	}
    xlsEOF();
    exit();
	?>


J'ai uniquement changer la partie boucle while, par une boucle for (et les title des colonnes)
Par contre niveau formatage ça fait n'importe quoi... Smiley decu

upload/56013-z.PNG
Il faut configurer OpenOffice autrement ça ne fonctionne pas. Bien réglé aucun problème d'affichage.

Un peu galère au début pour trouver les bons réglages mais ça fonctionne.