IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[WriteExcel] Sauvegarder avec PHP_WRITEEXCEL


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre régulier
    Inscrit en
    Juin 2005
    Messages
    243
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 243
    Points : 89
    Points
    89
    Par défaut [WriteExcel] Sauvegarder avec PHP_WRITEEXCEL
    Bonjour tout le monde !

    Je viens de trouver une librairie vraiment sympa en php, il s'agit de php_writeexcel.

    J'ai fait un script en PHP me générant un fichier Excel, quand je clique sur un lien permettant de lancer le script j'ai une fenêtre me proposant d'ouvrir, d'enregistrer (le fichier excel généré) ou d'annuler.

    J'aimerai que le lancement de ce script sauvegarde le fichier à un emplacement précis du serveur mais j'ai pas trouvé d'exemple faisant cela.

    Quelqu'un sait-il comment faire cela ?

    D'avance un grand merci et bonne fin de semaine !!

  2. #2
    Membre actif Avatar de JmL40
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 348
    Points : 246
    Points
    246
    Par défaut
    Bonjour,

    J'utilise moi aussi les classes de phpwriteexcel. Cependant j'ai quelques problèmes à ce niveau.

    Tout d'abord, je pense que si tu veux sauvegarder ton fichier Excel tu dois spécifier le repertoire d'enregistrement à la création de ton fichier, ici par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $fname = tempnam("/tmp", "simple.xls");
    $workbook = &new writeexcel_workbook($fname);
    $worksheet = &$workbook->addworksheet();
    Cependant, je souhaiterai savoir quelle est la structure de ton code pour afficher ta page excel, car j'ai bien utilisé la librairie phpwriteexcel mais mon affichage a lieu une fois sur deux et je ne comprend pas pourquoi.

    Je te présente le code que j'ai implémenté :

    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
     
    <?php
     
    // information pour la connection à le DB
    $host = 'localhost';
    $user = 'root';
    $pass = '';
    $db = 'masdb';
     
    // connection à la DB
    $link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
    mysql_select_db($db) or die ('Erreur :'.mysql_error());	
     
    // on selectionne les enregistrements
    $sql = "SELECT * From TbLigIdentite"; 
    $req = mysql_query($sql,$link); 
    $total = mysql_num_rows($req);
     
    set_time_limit(10);
     
    require_once "class.writeexcel_workbook.inc.php";
    require_once "class.writeexcel_worksheet.inc.php";
     
    $fname = tempnam("/tmp", "simple.xls");
    $workbook = &new writeexcel_workbook($fname);
    $worksheet = &$workbook->addworksheet();
     
    $i=0;
    while ($resultat = mysql_fetch_array($req)){
       	$worksheet->write(($i+2), 0, $resultat["NomLignee"]);
       	$worksheet->write(($i+2), 1, $resultat["CatalogueLig"]);
      	$i=$i+1;
    }
     
    $workbook->close();
     
    header("Content-Type: application/x-msexcel; name=\"example-simple.xls\"");
    header("Content-Disposition: inline; filename=\"example-simple.xls\"");
    $fh=fopen($fname, "rb");
    fpassthru($fh);
    unlink($fname);
     
    ?>
    D'après ce que j'ai fait, cela marche sous FIREFOX mais une fois sur deux sur IE. Bref comparons ...

    De plus est ce que tu sais comment intégrer juste une feuille excel genre un graphique ou un tableau excel dans la page sans effectuer une ouverture d'excel comme c'est le cas dans le script ci-dessus.

    MERCI

    Cordialement
    while (true) echo 'comique';
    Du comique de répétition ...
    Pour des questions de lisibilité, utilisez la balise [code]
    Si votre problème est résolu, n'oubliez pas le tag

  3. #3
    Membre régulier
    Inscrit en
    Juin 2005
    Messages
    243
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 243
    Points : 89
    Points
    89
    Par défaut
    Salut !!

    Bah pour tout te dire je fais exactement le même affichage que toi, à savoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    header("Content-Type: application/x-msexcel; name=\"example-simple.xls\"");
    header("Content-Disposition: inline; filename=\"example-simple.xls\"");
    $fh=fopen($fname, "rb");
    Et ça marche très bien, as-tu tester les exemples présents sur le site où tu as téléchargé cette librairie ?

    Sinon pour ta deuxième question, il suffit de mettre en commentaire ces mêmes lignes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    header("Content-Type: application/x-msexcel; name=\"example-simple.xls\"");
    header("Content-Disposition: inline; filename=\"example-simple.xls\"");
    $fh=fopen($fname, "rb");
    Par contre tu seras confronté au même problème que moi, à savoir comment le sauvegarder sans proposé de l'ouvrir. J'ai déjà pensé à ta méthode, j'ai spécifié le chemin :
    [CODE]$fname = tempnam("/home/srv/www/MaJBdD", "merge2.xls");[CODE]

    puis supprimer les lignes de code qui supprime le fichier (car normalement c'est un fichier temporaire, une fois l'ouverture effectué le programme le supprime)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $fh=fopen($fname, "rb");
    fpassthru($fh);
    unlink($fname);
    et là je me retrouve avec un fichier dans le bon répertoire mais du type : merge2.xlsWd8GaJ donc illisible

  4. #4
    Membre actif Avatar de JmL40
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 348
    Points : 246
    Points
    246
    Par défaut
    Re bonjour,

    Il suffit juste de mettre ca en commentaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    header("Content-Type: application/x-msexcel; name=\"example-simple.xls\"");
    header("Content-Disposition: inline; filename=\"example-simple.xls\"");
    $fh=fopen($fname, "rb");
    Je viens de tester et cela ne marche pas du tout !

    Pour la sauvegarde, je ne sais pas du tout comment faire, je préfère oublier pour le moment car je suis occupé à rendre dynamique l'affichage avec phpwriteexcel et c'est pas du gateau !

    Est-ce-que tu crois que cette boucle est juste ?????

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    // J'ai integrer tous les champs de ma requete à afficher 
    // dans un tableau, $col est la taille du tableau
     
    $i=0;
    while($resultat = mysql_fetch_array($sql)){
     
    for($j=0;$j<=$col;$j++){
     
    $worksheet->write($i,$j,$resutat["$champs[$j]"]);
    }
    $i++;
    }
    Logiquement le code ci-dessus doit afficher de la même manière que ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $i=0;
    while($resultat = mysql_fetch_array($req)){
    worksheet->write($i,1,$resultat["var1"]);
    worksheet->write($i,2,$resultat["var2"]);
    worksheet->write($i,3,$resultat["var3"]);
    $i++
    }
    La deuxième solution fonctionne mais pas la première pourquoi .....;

    Au fait pour l'affichage sans ouvrir excel regarde cette exemple :

    http://iut-adour.univ-pau.fr/anciens...es&menu=menu_2

    >> Choisir une promotion sur le site

    Tiens moi au courant,

    Merci
    while (true) echo 'comique';
    Du comique de répétition ...
    Pour des questions de lisibilité, utilisez la balise [code]
    Si votre problème est résolu, n'oubliez pas le tag

  5. #5
    Membre actif Avatar de JmL40
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 348
    Points : 246
    Points
    246
    Par défaut
    Il nous faudrait un TUTAUX pour PHPWRITEEXEL ...
    while (true) echo 'comique';
    Du comique de répétition ...
    Pour des questions de lisibilité, utilisez la balise [code]
    Si votre problème est résolu, n'oubliez pas le tag

  6. #6
    Membre actif Avatar de JmL40
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 348
    Points : 246
    Points
    246
    Par défaut
    Enfin mon export fonctionne bien je vous communiquerai le code ce soir ! Je sors du bureau CONFIANT ...
    while (true) echo 'comique';
    Du comique de répétition ...
    Pour des questions de lisibilité, utilisez la balise [code]
    Si votre problème est résolu, n'oubliez pas le tag

  7. #7
    Membre actif Avatar de JmL40
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 348
    Points : 246
    Points
    246
    Par défaut
    Je vous donne un exemple d'exporation de données vers excel, la feuille excel étant intégrée dans une page web :

    Voici le script :

    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
     
    <?php
     
    //FICHIER D'EXPORTATION DES DONNEES VERS EXCEL
     
    //INCLUSION DU FICHIER DE CONNEXTION BD
    require("connect.php");
     
    //TABLEAU CONTENANT LES CHAMPS DE LA REQUETE (CHAMPS A AFFICHER)
    $champs = array("champ1","champs2" ...);
     
    $taille = count($champs);
     
    //REQUETE DE SELECTION DES DONNEES
    	$select = 'SELECT champ1, champ2 FROM TABLE'; 
     
    //CONNECTION A LA BASE DE DONNEES
    	$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
    	$total = mysql_num_rows($result);
     
    //INCLUSION DE LA CLASSE PHPWRITEEXCEL	
    	require_once "Classes/class.writeexcel_workbook.inc.php";
    	require_once "Classes/class.writeexcel_worksheet.inc.php";
     
    //CREATION DU FICHIER TEMPORAIRE EXCEL + INSTANCIATION D'UN NOUVEL OBJET DE LA CLASSE PHPWRITEEXCEL
    	$fname = tempnam("/tmp", "simple.xls");
    	$workbook = &new writeexcel_workbook($fname);
    	$worksheet = &$workbook->addworksheet();
     
    //ECRITURE SUR LE FICHIER EXCEL GRACE A LA METHODE WRITE DE PHPWRITEEXCEL	
     
    	//ECRITURE DE LA PREMIERE LIGNE (IDENTIFIANT DE CHAQUES CHAMPS)
    	for($j=0;$j<=($taille-1);$j++){
    		$worksheet->write(1,$j,$champs[$j]);
    	}
     
    	//ECRITURE DES DONNEES EN FONCTION DES CHAMPS OU COLONNES
    	$i=2;
        while($row = mysql_fetch_array($result)) {
            for($j=0;$j<=($taille-1);$j++){
    				$worksheet->write($i,$j,$row["$champs[$j]"]);
    		}
    	$i++;	
        }
     
    //FERMETURE DU CLASSEUR TEMPORAIRE EXCEL
    	$workbook->close();
     
    //INTEGRATION DU WORKBOOK EXCEL DANS LA PAGE WEB GRACE A LA FONCTION HEADER DE PHP
    	header("Content-Type: application/x-msexcel; name=\"example-simple.xls\"");
    	header("Content-Disposition: inline; filename=\"example-simple.xls\"");
     
    //OUVERTURE DU FICHIER EXCEL
    	$fh=fopen($fname, "rb");
    	fpassthru($fh);
     
    //DESTRUCTION DE CE FICHIER
    	unlink($fname);
     
    ?>
    Il faut juste adapter la première partie du code, a savoir modifier votre requête et mettre en forme le tableau en fonction de votre requete. Le reste ne change pas normalement !

    A NOTER IL VOUS FAUT UTILISER LA CLASSE PHPWRITEEXCEL !

    Voila

    Cordialement
    while (true) echo 'comique';
    Du comique de répétition ...
    Pour des questions de lisibilité, utilisez la balise [code]
    Si votre problème est résolu, n'oubliez pas le tag

  8. #8
    Membre régulier
    Inscrit en
    Juin 2005
    Messages
    243
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 243
    Points : 89
    Points
    89
    Par défaut
    Merci pour ces infos !!

    Je reviens à mon post de départ, quelqu'un sait comment sauvegarder le fichier en locale et non le proposé en téléchargement ?

    D'avance merci.

  9. #9
    Membre régulier
    Inscrit en
    Juin 2005
    Messages
    243
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 243
    Points : 89
    Points
    89
    Par défaut
    Je me permets de faire remonter un peu le sujet car je n'ai toujours pas trouver, j'ai tapé "php writeExcel + saveAs" dans google mais rien ne répondant à ma requête, pourtant j'ai lu dans un article que cette librairie permettait de générer 200 fichiers en je sais plus combien de seconde..

    Ces 200 fichiers sont bien sauvegardés quelques part... Mais comment ??

  10. #10
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Dans le code de Jml40 on dirait que le fichier est écrit sur le disque (dans le dossier temp mais tu dois pouvoir le mettre ailleurs). Ensuite les headers sont utilisés, on relit le fichier avant de le supprimer.

    Donc si tu ne veux pas le proposer en téléchargement je pense que tu dois juste supprimer la partir avec les headers et la suppression et modifier le dossier de sauvegarde du fichier.

  11. #11
    Membre régulier
    Inscrit en
    Juin 2005
    Messages
    243
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 243
    Points : 89
    Points
    89
    Par défaut
    En effet, ça marche !!

    En faite il faut faire ce que tu as dit koopajah et remplacer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $fname = tempnam("/home/passionbeaute.net/www/", "bigfile.xls");
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $fname = "/home/srv/www/bigfile.xls";
    Car la fonction tempnam utilise des caractères aléatoires après le nom du fichier donc inutilisable

    Merci pour le tuyaux koopajah !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WriteExcel] fopen avec php_writeexcel
    Par Misoss dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 28/07/2010, 07h40
  2. Problème de sauvegardes avec Oracle Enterprise Manager
    Par piotrek30 dans le forum Entreprise Manager
    Réponses: 5
    Dernier message: 30/05/2006, 11h08
  3. Sauvegarder avec IBBackup sous FireBird
    Par tipiweb dans le forum Bases de données
    Réponses: 2
    Dernier message: 30/04/2006, 19h28
  4. automatiser les sauvegardes avec mysql administrator
    Par beckham07 dans le forum Outils
    Réponses: 1
    Dernier message: 09/03/2006, 13h58
  5. Journal de sauvegarde avec crontab
    Par prefna dans le forum Administration système
    Réponses: 3
    Dernier message: 29/11/2005, 15h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo