[php] excel en de enter

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • whitehouse
  • Registratie: Maart 2000
  • Laatst online: 18-09-2019
ik heb informatie uit een DB die ik middels PHP in een excel-sheet zet.

Nu gaat er iets mis, namelijk dat volgens mij de enters uit sommige velden lastig doen... hoe haal ik ze eruit ?

ff een stukje code wat me DB-gegevens in een excel-document zet :

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
<?php

$getpeople="select * from relatie left join rel_info on (relatie.rel_id=rel_info.rel_id)";
$result=mysql_query($getpeople);
$y=mysql_num_fields($result);
for ($x=0; $x<$y; $x++) {
    $headers[]=mysql_field_name($result, $x);
   $excel .=mysql_field_name($result, $x).' ';
} 


$excel .="\r\n";
$i=0;
$c=0;
$headercount = count($headers);
while($oRow=mysql_fetch_array($result)) {
    foreach($headers as $key=>$value) { 
        $c++;
        $value=stripslashes($oRow[$key]);   
        $excel.= (($value!='')?$value." ":" ");
        
    }
    if($c!=$headercount) {
        $difference=$headercount-$c; 
        for($ch=0;$ch<=$difference;$ch++ ) { echo " "; }
    }
$i++;

$excel .= "\r\n";
}

 
 
 header("Content-type: application/octet-stream"); 
 header("Content-Disposition: attachment; filename=totalexport.xls"); 
 header("Pragma: no-cache"); 
 header("Expires: 0"); 
 
 echo $excel; 
 ?>

| www.everythingisspiritual.com | www.mosaic.org |


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
Weet je zeker dat dit het excel-formaat is?? Als ik een .xls in een text-editor open ziet dat er heel anders uit. Maar dat terzijde...

Je kunt enters uit je database-waarden vissen door een str_replace uit te voeren op \n en \r.
PHP:
1
2
3
$value = str_replace("\n", '', $value);
//en
$value = str_replace("\r", '', $value);


Uiteraard kun je dit netter oplossen, maar hier komt het wel op neer...

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • dajappie
  • Registratie: Januari 2005
  • Laatst online: 20:47
Weet je zeker dat dit het excel-formaat is??
Simpel CSV-achtig formaat werkt het beste met enkele \n om een regel te beeindigen en \t (een tabje) om de velden te scheiden. Kort voor bv veld 1 t/m 8 waarna je naar een nieuwe regel gaat (kan vast mooier maar goed):

PHP:
1
2
3
4
5
6
7
for ($i = 0; $i <= 8; $i++) {
      if ($i == 8) {
        echo "$data_s033[$i]\n";
      } else {
        echo "$data_s033[$i]\t";
      }
    }

Acties:
  • 0 Henk 'm!

Verwijderd

waarom niet je array implode:
$regel = implode("\t", $data)."\n";

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
Verwijderd schreef op maandag 14 februari 2005 @ 20:37:
waarom niet je array implode:
$regel = implode("\t", $data)."\n";
Als het daarom gaat kun je nog beter vast concateneren in je query:
code:
1
SELECT CONCAT (`veld1`,"\t",`veld2`,"\t", etc) AS line FROM table

Dan moet je alleen wel van te voren weten welke velden je gaat ophalen (wat ik sowieso een gezond uitgangspunt vind, maar in het geval van TS misschien niet bruikbaar is vanwege de SELECT * in zijn query). Als het gaat om veel data kan dit een aardige performancewinst opleveren tegenover de implode methode.

Regeren is vooruitschuiven