export php table (non mysql) to excel

Pagina: 1
Acties:

Onderwerpen


  • MarcHeijerman
  • Registratie: December 2007
  • Laatst online: 03-08 21:10
Hi all,

ik heb een halve oplossing gevonden voor het geen dat ik wil.
d.m.v:

PHP:
1
2
3
4
5
// Set headers \\
header('Content-type: application/vnd.ms-excel');
header("Content-Disposition: attachment; filename=report.xls");
header("Pragma: no-cache");
header("Expires: 0");


Wordt de gehele pagina als report.xls gedownload. Dit zou ik graag aan de bezoeker willen overlaten, dus een knop met: Export naar Excel o.i.d.

Ook krijg ik de melding dat het bestand in een different format is dan de extensie (.xls) Hoe kan ik dit van te voren al goed zetten ?

Ook zoek ik nog een manier om alleen de tables te exporteren, en niet de hele pagina.

EDIT: de code wordt wel uitgevoerd, maar niet meer weergegeven op de pagina, alleen nog maar weggeschreven naar het xls bestand, even kijken dus hoe ik de output dus en op de pagina, en in het bestand krijg.

Iemand die mij opweg kan helpen ?

[ Voor 13% gewijzigd door MarcHeijerman op 04-04-2012 11:35 ]


  • Kwastie
  • Registratie: April 2005
  • Laatst online: 17:17

Kwastie

Awesomeness

Dit zorgt er niet voor dat je exporteert naar xls formaat, alleen dat je tegen de browser zegt: "Hierna volgt een bestand in xls formaat en de bestandsnaam is "report.xls". Als jij dan gewoon je html stuurt is het natuurlijk geen xls-bestandsformaat.

Deze tutorial kan je waarschijnlijk wel op weg helpen.

When I get sad i stop being sad and be awesome instead


  • MarcHeijerman
  • Registratie: December 2007
  • Laatst online: 03-08 21:10
Kwastie schreef op woensdag 04 april 2012 @ 11:39:
Dit zorgt er niet voor dat je exporteert naar xls formaat, alleen dat je tegen de browser zegt: "Hierna volgt een bestand in xls formaat en de bestandsnaam is "report.xls". Als jij dan gewoon je html stuurt is het natuurlijk geen xls-bestandsformaat.

Deze tutorial kan je waarschijnlijk wel op weg helpen.
Bedankt, ben nog steeds in de "leer" fase wat betreft php, :-), ik heb in ieder geval weer wat te lezen :p

  • Cascade
  • Registratie: Augustus 2006
  • Laatst online: 13:24
Ligt er net aan wat voor data je in je Excel wil zetten... kom je niet weg met een simpel CSV bestand? Als je dat combineert met het juiste MIME type en Content-Disposition kom je ook een heel eind. De tutorial hierboven is perfect daarvoor (tab-gescheiden bestand) en goed om het besef te krijgen waarom je sommige characters moet escapen.

Voor een meer sjiekere oplossing (celeigenschappen, werkbladen, plaatjes, functies!) kan je een bestaande library pakken. Ik heb persoonlijke goede ervaringen met deze: http://phpexcel.codeplex.com/ , dit maakt Office 2007 Excel bestanden (oftewel Microsoft Office Open XML Format Spreadsheet).

  • MarcHeijerman
  • Registratie: December 2007
  • Laatst online: 03-08 21:10
Even doorgelezen,

en dan een vraag:
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?PHP
  $data = array(
    array("firstname" => "Mary", "lastname" => "Johnson", "age" => 25),
    array("firstname" => "Amanda", "lastname" => "Miller", "age" => 18),
    array("firstname" => "James", "lastname" => "Brown", "age" => 31),
    array("firstname" => "Patricia", "lastname" => "Williams", "age" => 7),
    array("firstname" => "Michael", "lastname" => "Davis", "age" => 43),
    array("firstname" => "Sarah", "lastname" => "Miller", "age" => 24),
    array("firstname" => "Patrick", "lastname" => "Miller", "age" => 27)
  );
?>

Hier worden subarrays aagemaakt, nu wil ik een array aanmaken met een tabel als inhoud. Hoe ga ik dat precies doen ?

PHP:
1
2
3
4
5
6
7
$data=array(
 <table>
 <tr><td></td></tr>
 <tr><td></td></tr>
 <tr><td></td></tr>
 <tr><td></td></tr>
 </table>

Zoiets ?

Cascade schreef op woensdag 04 april 2012 @ 12:02:
Ligt er net aan wat voor data je in je Excel wil zetten... kom niet weg met een simpel CSV bestand? Als je dat combineert met het juiste MIME type en Content-Disposition kom je ook een heel eind. De tutorial hierboven is perfect daarvoor (tab-gescheiden bestand) en goed om het besef te krijgen waarom je sommige characters moet escapen.

Voor een meer sjiekere oplossing (celeigenschappen, werkbladen, plaatjes, functies!) kan je een bestaande library pakken. Ik heb persoonlijke goede ervaringen met deze: http://phpexcel.codeplex.com/ , dit maakt Office 2007 Excel bestanden (oftewel Microsoft Office Open XML Format Spreadsheet).
de pagina produceert wat tabellen, en deze tabellen wil ik dus in een excel bestand weg schrijven, ik ben dus nog even zoet :D, even goed inlezen dus.



Wat gebeurd hier precies?

PHP:
1
preg_match("/^\d{4}.\d{1,2}.\d{1,2}/", $str)

[ Voor 36% gewijzigd door MueR op 04-04-2012 12:36 ]


  • Cascade
  • Registratie: Augustus 2006
  • Laatst online: 13:24
Voor Excel moet je geen HTML code gaan gebruiken, is totaal wat anders. Enige dat je moet doen is de inhoud van wat je normaal in een HTML table cell zet (dus wat in <td></td> staat), nu in een Excel cel gaan zetten. Die $data array is precies dat; een verzameling rijen (het array zelf) met per rij een verzameling van kolomkop -> waarde paren (het subarray). Dat is zoals het in Excel werkt.

Als je meerdere tabellen in 1 Excelbestand wil proppen, dat kan prima maar dan zul je een hoop extra lege rijen en cellen moeten toevoegen aan dat array. Wil je dat echt?

Die preg_match... als je begint met PHP zou ik me daar nog niet aan wagen (LVL, leuk voor later). Hiermee kan je kijken of een (string)waarde voldoet aan een patroon. Zo'n patroon wordt hier vastgelegd met een 'regular expression'. Wat er in bovenstaande code gebeurt is dat er gekeken wordt of de stringwaarde van variabele $str begint met iets dat op een datum lijkt (dus: 4 cijfers voor het jaar, een scheidingsteken, 2 cijfers voor de maand, een scheidingsteken, 2 cijfers voor de dag).

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 19:46

MueR

Admin Devschuur® & Discord

is niet lief

Ik heb net je driedubbelpost maar even tot 1 post samengevoegd. Gebruik de edit knop ( Afbeeldingslocatie: http://tweakimg.net/g/forum/images/icons/edit.gif ) als je iets toe te voegen hebt; je topic herhaaldelijk omhoogschoppen is niet nodig en die melding staat er niet voor niets :)
Afbeeldingslocatie: http://tweakers.net/ext/f/93OGDVn8zio6RrIck1qYj8ne/full.png

[ Voor 7% gewijzigd door MueR op 04-04-2012 12:37 ]

Anyone who gets in between me and my morning coffee should be insecure.


  • MarcHeijerman
  • Registratie: December 2007
  • Laatst online: 03-08 21:10
Cascade schreef op woensdag 04 april 2012 @ 12:30:
Voor Excel moet je geen HTML code gaan gebruiken, is totaal wat anders. Enige dat je moet doen is de inhoud van wat je normaal in een HTML table cell zet (dus wat in <td></td> staat), nu in een Excel cel gaan zetten. Die $data array is precies dat; een verzameling rijen (het array zelf) met per rij een verzameling van kolomkop -> waarde paren (het subarray). Dat is zoals het in Excel werkt.

Als je meerdere tabellen in 1 Excelbestand wil proppen, dat kan prima maar dan zul je een hoop extra lege rijen en cellen moeten toevoegen aan dat array. Wil je dat echt?

Die preg_match... als je begint met PHP zou ik me daar nog niet aan wagen (LVL, leuk voor later). Hiermee kan je kijken of een (string)waarde voldoet aan een patroon. Zo'n patroon wordt hier vastgelegd met een 'regular expression'. Wat er in bovenstaande code gebeurt is dat er gekeken wordt of de stringwaarde van variabele $str begint met iets dat op een datum lijkt (dus: 4 cijfers voor het jaar, een scheidingsteken, 2 cijfers voor de maand, een scheidingsteken, 2 cijfers voor de dag).
preg_match uitleg is duidelijk, thanks

Wat ik "echt" wil is de volgende table downloaden als .csv bestand :
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<table>

<tr><td></td><td></td></tr><br>
<tr><td></td><td></td></tr><br>
<tr><td></td><td></td></tr><br>
<tr><td></td><td></td></tr><br>
<tr><td></td><td></td></tr><br>
<tr><td></td><td></td></tr><br>
</table>

// write to file:
$f=fopen("<path>/<to>/<file.csv", 'w');
fputs($f, $out); // bij wijze van, zal eerst $out moeten definieren.
fclose($f);

print "<a href='<path>/<to>/<file.csv>'>Download</a> 

[ Voor 3% gewijzigd door MarcHeijerman op 04-04-2012 12:40 ]


  • CurlyMo
  • Registratie: Februari 2011
  • Laatst online: 19:36
MarcHeijerman schreef op woensdag 04 april 2012 @ 12:38:
[...]


preg_match uitleg is duidelijk, thanks

Wat ik "echt" wil is de volgende table downloaden als .csv bestand :
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<table>

<tr><td></td><td></td></tr><br>
<tr><td></td><td></td></tr><br>
<tr><td></td><td></td></tr><br>
<tr><td></td><td></td></tr><br>
<tr><td></td><td></td></tr><br>
<tr><td></td><td></td></tr><br>
</table>

// write to file:
$f=fopen("<path>/<to>/<file.csv", 'w');
fputs($f, $out); // bij wijze van, zal eerst $out moeten definieren.
fclose($f);

print "<a href='<path>/<to>/<file.csv>'>Download</a> 
Om aan de HTML kant te beginnen (ondanks dat eerder is gezegd dat je je daar voor excel niet op moet richten) zou ik alle <br> weghalen. Die horen daar helemaal niet thuis.

Sinds de 2 dagen regel reageer ik hier niet meer


  • MarcHeijerman
  • Registratie: December 2007
  • Laatst online: 03-08 21:10
CurlyMo schreef op woensdag 04 april 2012 @ 12:42:
[...]

Om aan de HTML kant te beginnen (ondanks dat eerder is gezegd dat je je daar voor excel niet op moet richten) zou ik alle <br> weghalen. Die horen daar helemaal niet thuis.
Ja ik ga inderdaad het html laten vervallen, en kijken hoe ik het met die array's aan de praat ga krijgen.

[ Voor 44% gewijzigd door MarcHeijerman op 13-03-2013 08:09 ]


  • CurlyMo
  • Registratie: Februari 2011
  • Laatst online: 19:36
MarcHeijerman schreef op woensdag 04 april 2012 @ 12:44:
[...]


Ja ik ga inderdaad het html laten vervallen, en kijken hoe ik het met die array's aan de praat ga krijgen.
Daarnaast is het wegschrijven van de output naar een bestand helemaal niet nodig. Als jij je php op de juiste manier hebt opgebouwd dat er een excel bestand uitrold, dan kan je net zo makkelijk direct naar dat php bestand verwijzen. Deze zal zich dan aanbieden als excel bestand.

Zoals eerder is aangegeven, eerst even goed inlezen in het onderwerp.

Sinds de 2 dagen regel reageer ik hier niet meer


  • MarcHeijerman
  • Registratie: December 2007
  • Laatst online: 03-08 21:10
Bedankt voor de reacties, ik heb de komende dagen wat te doen :)

Ben met het volgende gekomen:

PHP:
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
$hosts="some code"
$numsubhosts="some code";
$max_subhosts="some code";
$subhosts_left="some code";
$head="<b>Testing </b>";

$td0="Environment: ";
$td1="Total num hosts: ";
$td2="Number of subhosts: ";
$td3="Max subhosts: ";
$td4="Subhosts left: ";

$data=array(
        array("td1" => $td0, "td2" => $head),
        array("td1" => $td1, "td2" => $hosts),
        array("td1" => $td2, "td2" => $numsubhosts),
        array("td1" => $td3, "td2" => $max_subhosts),
        array("td1" => $td4, "td2" => $subhosts_left),
);
$flag=false;
foreach($data as $row){
        if(!$flag) {
                $flag=true;
        }
        print implode("\t", array_values($row)) . "\r\n";
}

$count=1;
foreach($hostfile as $host) {

      // find all instances of $host from $file
      $host=trim($host); // remove any white space from $host.
      $file=file_get_contents('/<path>/<to>/<file>') or die($php_errormsg);
      $numvms=substr_count($file,$host );

$datalist=array(
           array("td1" => $count, "td2" => $host, "td3" => htmlspecialchars($host), "td4" => $numvms),
);
$count++;
}

foreach($datalist as $row1){
        if(!$flag) {
                $flag=true;
        }
        print implode("\t", array_values($row1)) . "\r\n";
}


Nu zou je zeggen dat de output getabt zou moeten zijn + een \n achter iedere rij, ik krijg maar 1 rij te zien met alle gegevens netjes achter elkaar.

EDIT:

\r\n werden genegeerd door html, vervange door <br>, nu werkt het wel.

[ Voor 94% gewijzigd door MarcHeijerman op 04-04-2012 13:35 ]

Pagina: 1