Exporter un tableau html en Excel

matrix154 Messages postés 3 Date d'inscription mercredi 22 octobre 2008 Statut Membre Dernière intervention 28 octobre 2008 - 23 oct. 2008 à 16:44
matrix154 Messages postés 3 Date d'inscription mercredi 22 octobre 2008 Statut Membre Dernière intervention 28 octobre 2008 - 28 oct. 2008 à 12:08
Salut tout le monde!

j'ai un problème pour exposrter un tableau html (creé par PHP) en Excel!
Avec un script PHP contenant un <form> pour parcourir et séléctioner le fichier à lire. En cliquant sur le boutton le fichier est lu et filtrer comme je veux.
Dans ce resultat il y a un 2ème boutton pour l'éxporter. En cliquant ce 2ème boutton une fenêtre apparait (comme je veux) pour télécharger/sauvegarder ce fichier d'excel, auf que cet Excel est vide:
j'éspère que vous pourriez m'aider!

voici mon code:

1. main page:
<form enctype="multipart/form-data" action="action_browse.php" method="POST">

Choose a file to upload:

</form>

2. action_browse.php:
<?
if ($_FILES[meinedatei] !="")
{
    @copy($_FILES[meinedatei][tmp_name], "./".$_FILES[meinedatei][name]) or die("Couldn't copy the file.");
}
else
{
    die(mysql_error());
}
$temp_datei = $_FILES[meinedatei][tmp_name];
$dateiname = $_FILES[meinedatei][name];
echo "temporerer Name mit Pfad: "; print ($temp_datei); echo "
";
echo "Dateiname: "; print ($dateiname); echo "
";
$path = $_FILES[meinedatei][tmp_name];
$open = fopen($path,"r+");
echo "<form name='exporter' action='export.php' method='post'>
    ";
echo "            ----
,
            ACL Name,
            Rule,
            Protocol,
            Source IP / Netmask,
            Destination IP / Netmask,
            Service, \";
        while(!feof($open))
        {
            $zeile = fgets($open,255);
            $hostname = \"/hostname/iU\";
            $remark = \"/remark/iU\";
            $extended = \"/extended/iU\";
            $permit = \"/permit/iU\";
            $deny = \"/deny/iU\";
            if (preg_match_all($remark,$zeile,$matches,PREG_SET_ORDER))
            {
                $wort = preg_split(\"/ /\", $zeile, -1, PREG_SPLIT_NO_EMPTY);
                echo \"----
$wort[2] $wort[3] $wort[4] $wort[5] $wort[6] $wort[7] $wort[8] $wort[9] $wort[10], \";
            }
            //ASA
            elseif     (preg_match_all($extended,$zeile,$matches,PREG_SET_ORDER))
            {
                $i++;
                $wort = preg_split(\"/ /\", $zeile, -1, PREG_SPLIT_NO_EMPTY);
                if (\"$wort[5]\" == \"$wort[6]\")
                echo \"----
$i,
                    $wort[1],
                    $wort[3],
                    $wort[4],
                    $wort[5],
                    $wort[5],
                    $wort[6],
                    $wort[6],
                    $wort[7],
                    $wort[8] $wort[9], \";
                elseif (\"$wort[5]\" == \"any\")
                echo \"----
$i,
                    $wort[1],
                    $wort[3],
                    $wort[4],
                    $wort[5],
                    $wort[5],
                    $wort[6],
                    $wort[7],
                    $wort[8],
                    $wort[9] $wort[10], \";
                elseif (\"$wort[7]\" == \"any\")
                echo \"----
$i,
                    $wort[1],
                    $wort[3],
                    $wort[4],
                    $wort[5],
                    $wort[6],
                    $wort[7],
                    $wort[7],
                    $wort[8],
                    $wort[9] $wort[10], \";
                else
                echo \"----
$i,
                    $wort[1],
                    $wort[3],
                    $wort[4],
                    $wort[5],
                    $wort[6],
                    $wort[7],
                    $wort[8],
                    $wort[9],
                    $wort[10] $wort[11]";
            }
            //PIX
            elseif     (preg_match_all($permit,$zeile,$matches,PREG_SET_ORDER))
            {
                $i++;
                $wort = preg_split("/ /", $zeile, -1, PREG_SPLIT_NO_EMPTY);
                if ("$wort[4]" == "$wort[5]")
                echo "----, $i</td>
                    $wort[1],
                    $wort[2],
                    $wort[3],
                    $wort[4],
                    $wort[4],
                    $wort[5],
                    $wort[5],
                    $wort[6],
                    $wort[7] $wort[8], \";
                elseif (\"$wort[4]\" == \"any\")
                echo \"----
$i,
                    $wort[1],
                    $wort[2],
                    $wort[3],
                    $wort[4],
                    $wort[4],
                    $wort[5],
                    $wort[6],
                    $wort[7],
                    $wort[8] $wort[9], \";
                elseif (\"$wort[6]\" == \"any\")
                echo \"----
$i,
                    $wort[1],
                    $wort[2],
                    $wort[3],
                    $wort[4],
                    $wort[5],
                    $wort[6],
                    $wort[6],
                    $wort[7],
                    $wort[8] $wort[9], \";
                else
                echo \"----
$i,
                    $wort[1],
                    $wort[2],
                    $wort[3],
                    $wort[4],
                    $wort[5],
                    $wort[6],
                    $wort[7],
                    $wort[8],
                    $wort[9] $wort[10]";
            }
            elseif     (preg_match_all($deny,$zeile,$matches,PREG_SET_ORDER))
            {
                $i++;
                $wort = preg_split("/ /", $zeile, -1, PREG_SPLIT_NO_EMPTY);
                if ("$wort[4]" == "$wort[5]")
                echo "----, $i</td>
                    $wort[1],
                    $wort[2],
                    $wort[3],
                    $wort[4],
                    $wort[4],
                    $wort[5],
                    $wort[5],
                    $wort[6],
                    $wort[7] $wort[8], \";
                elseif (\"$wort[4]\" == \"any\")
                echo \"----
$i,
                    $wort[1],
                    $wort[2],
                    $wort[3],
                    $wort[4],
                    $wort[4],
                    $wort[5],
                    $wort[6],
                    $wort[7],
                    $wort[8] $wort[9], \";
                elseif (\"$wort[6]\" == \"any\")
                echo \"----
$i,
                    $wort[1],
                    $wort[2],
                    $wort[3],
                    $wort[4],
                    $wort[5],
                    $wort[6],
                    $wort[6],
                    $wort[7],
                    $wort[8] $wort[9], \";
                else
                echo \"----
$i,
                    $wort[1],
                    $wort[2],
                    $wort[3],
                    $wort[4],
                    $wort[5],
                    $wort[6],
                    $wort[7],
                    $wort[8],
                    $wort[9] $wort[10]";
            }
        }
        echo "
";
        fclose ($open);
        echo "

        </form>";
?>

et dérnièrement voici l'export.php:
<?php
header("Content-type: application/vnd-ms-excel");
header("Content-Disposition: attachment; filename=Export_ACL.xls");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Unbenanntes Dokument</title>
</head>

<?php
include ("action_browse.php");
?>

</html>

3 réponses

fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
23 oct. 2008 à 17:03
salut,

J'ai repris un code existant. En fait, ce que lit une base MySQL (dans ton cas on dira que tu scrute ton tableau) et stocke les données dans un fichier temporaire au format CSV (données séparée par des ; ).

Voici le chargement du fichier par excel :
        header("Content-disposition: inline; filename=$file");
        header("Content-Type: application/force-download");
        //header("Content-Type: application/ms-excel");
        header("Content-Transfer-Encoding: application/octet-stream\n"); // Surtout ne pas enlever le \n
        header("Content-Length: ".filesize("./temp/" . $file));
        header("Pragma: no-cache");
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public");
        header("Expires: 0");
        readfile("./temp/" . $file);

J'espère que ca t'aidera.
0