[PHP] Export naar Excel, telefoon nummer wordt getal

Pagina: 1
Acties:
  • 65 views sinds 30-01-2008

  • Tijsje
  • Registratie: Februari 2001
  • Laatst online: 23-05 06:39
Ik laat een php pagina een export maken van een mysql database naar een Excel file.
Alleen van het telefoon nummer wordt een getal gemaakt in excel (Eerste nul wordt dus weggelaten).
Weet iemand hoe ik dit kan verhelpen?
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
41
42
43
44
<?php 
mysql_connect('localhost','login','ww'); 

mysql_select_db('database'); 


$select = "SELECT * FROM aanvragen";                 
$export = mysql_query($select); 
$fields = mysql_num_fields($export);
$header = "";
$data = "";

 
for ($i = 0; $i < $fields; $i++) { 
    $header .= mysql_field_name($export, $i) . "\t"; 
} 

while($row = mysql_fetch_row($export)) { 
    $line = ''; 
    foreach($row as $value) {                                             
        if ((!isset($value)) OR ($value == "")) { 
            $value = "\t"; 
        } else { 
            $value = str_replace('"', '""', $value); 
            $value = '"' . $value . '"' . "\t"; 
        } 
        $line .= $value; 
    } 
    $data .= trim($line)."\n"; 
} 
$data = str_replace("\r","",$data); 

if ($data == "") { 
    $data = "\n(0) Records Found!\n";                         
} 

header("Content-type: application/octet-stream"); 
header("Content-Disposition: attachment; filename=extraction.xls"); 
header("Pragma: no-cache"); 
header("Expires: 0"); 
print "$header\n$data"; 


?>

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20:27

gorgi_19

Kruimeltjes zijn weer op :9

' er voor zetten?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

er een single quote voor plaatsen in Excel?
offtopic:
mmm, het is moeilijk om sneller te zijn dan gorgi_19

[ Voor 47% gewijzigd door Verwijderd op 25-06-2004 11:56 ]


  • Tijsje
  • Registratie: Februari 2001
  • Laatst online: 23-05 06:39
Kan dat ook direct vanuit het script?
Ik heb nu dus zo een poging gedaan:
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
for ($i = 0; $i < $fields; $i++) { 
    $header .= mysql_field_name($export, $i) . "\t"; 
} 

while($row = mysql_fetch_row($export)) { 
    $line = ''; 
    foreach($row as $value) {                                             
        if ((!isset($value)) OR ($value == "")) { 
            $value = "\t"; 
            
        } else { 
            
            $aap = substr($value, 0,1);
            IF ($aap == '0')
            {
            $value = str_replace('"', '""', $value); 
            $value = '"\'' . $value . '"' . "\t";
            }
            ELSE
            {
            $value = str_replace('"', '""', $value); 
            $value = '"' . $value . '"' . "\t";
            }
        } 
        $line .= $value; 
    } 
    $data .= trim($line)."\n"; 
} 
$data = str_replace("\r","",$data); 

if ($data == "") { 
    $data = "\n(0) Records Found!\n";                         
} 

header("Content-type: application/octet-stream"); 
header("Content-Disposition: attachment; filename=extraction.xls"); 
header("Pragma: no-cache"); 
header("Expires: 0"); 
print "$header\n$data";


Ik laat er nu dus een ' voor plaatsen als de cell ($value) met een 0 begint.
Maar als ik de file nu open in Excel zie ik gewoon '0123456789 staan als telefoon nummer.

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-05 18:53

Bosmonster

*zucht*

Het enige dat je doet voor zover ik zie is een CSV file genereren met XLS extensie. In CSV heb je geen controle over hoe Excel de data ziet.

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Zie http://pear.php.net/package/Spreadsheet_Excel_Writer hiermee kan je wel een goed excel bestand aanmaken waarmee je dus ook zelf de celtypes kan definieren.

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02-2025

SchizoDuckie

Kwaak

Ik heb zelf exact dezelfde irritante )@*(^%@)(#$^* fouten gehad, óf je halve excelfile ligt overhoop, óf je gaat je fields enclosen met een bepaald veld, waardoord e andere helft weer fout gaat.

prut dus.

Gelukkig vond ik een class:

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
<?
if( !defined( "PHP_SIMPLE_XLS_GEN" ) ) { 
   define( "PHP_SIMPLE_XLS_GEN", 1 ); 

   class  XLSDoc { 
      var  $class_ver = "0.2";    // class version 
      var  $xls_data   = "";      // where generated xls be stored 
      var  $default_dir = "";     // default directory to be saved file 
      var  $filename  = "tempxls";       // save filename 
      var  $fname    = "";        // filename with full path 
      var  $crow     = 0;         // current row number 
      var  $ccol     = 0;         // current column number 
      var  $totalcol = 0;         // total number of columns 
      var  $get_type = 0;         // 0=stream, 1=file 
      var  $errno    = 0;         // 0=no error 
      var  $error    = "";        // error string 
      var  $dirsep   = "/";       // directory separator 
      var  $header   = 1;         // 0=no header, 1=header line for xls table 

     // Default constructor 
     function  XLSDoc() 
     { 
       $os = getenv( "OS" ); 
       $temp = getenv( "TEMP"); 
       // check OS and set proper values for some vars. 
       if ( stristr( $os, "Windows" ) ) { 
          $this->default_dir = $temp; 
          $this->dirsep = "\\"; 
       } else { 
         // assume that is Unix/Linux 
         $this->default_dir = "/tmp"; 
         $this->dirsep =  "/"; 
       } 
       // begin of the excel file header 
       $this->xls_data = pack( "ssssss", 0x809, 0x08, 0x00,0x10, 0x0, 0x0 ); 
       // check header text 
       if ( $this->header ) { 
         $this->Header(); 
       } 
     } 

     function Header( $text="" ) 
     { 
        if ( !empty($text))
        { 
           if ( $this->totalcol < 1 )
            { 
                $this->totalcol = 1; 
                $this->InsertText( $text ); 
                $this->crow += 2; 
                $this->ccol = 0; 
            } 
        }
     }

     // end of the excel file 
     function End() 
     { 
       $this->xls_data .= pack( "ss", 0x0A, 0x00 ); 
       return; 
     } 

     // write a Number (double) into row, col 
     function WriteNumber_pos( $row, $col, $value ) 
     { 
        $this->xls_data .= pack( "sssss", 0x0203, 14, $row, $col, 0x00 ); 
        $this->xls_data .= pack( "d", $value ); 
        return; 
     } 

     // write a label (text) into Row, Col 
     function WriteText_pos( $row, $col, $value ) 
     { 
        $len = strlen( $value ); 
        $this->xls_data .= pack( "s*", 0x0204, 8 + $len, $row, $col, 0x00, $len ); 
        $this->xls_data .= $value; 
        return; 
     } 

     // insert a number, increment row,col automatically 
     function InsertNumber( $value ) 
     { 
        if ( $this->ccol == $this->totalcol ) { 
           $this->ccol = 0; 
           $this->crow++; 
        } 
        $this->WriteNumber_pos( $this->crow, $this->ccol, &$value ); 
        $this->ccol++; 
        return; 
     } 

     // insert a number, increment row,col automatically 
     function InsertText( $value ) 
     { 
        if ( $this->ccol == $this->totalcol ) { 
           $this->ccol = 0; 
           $this->crow++; 
        } 
        $this->WriteText_pos( $this->crow, $this->ccol, &$value ); 
        $this->ccol++; 
        return; 
     } 

     // Change position of row,col 
     function ChangePos( $newrow, $newcol ) 
     { 
        $this->crow = $newrow; 
        $this->ccol = $newcol; 
        return; 
     } 

     // new line 
     function NewLine() 
     { 
        $this->ccol = 0; 
        $this->crow++; 
        return; 
     } 

     // send generated xls as stream file 
     function SendFile($filename) 
     { 
        $this->End(); 
        header ( "Expires: Mon, 1 Apr 1974 05:00:00 GMT" ); 
        header ( "Last-Modified: " . gmdate("D,d M YH:i:s") . " GMT" ); 
        header ( "Cache-Control: no-cache, must-revalidate" ); 
        header ( "Pragma: no-cache" ); 
        header ( "Content-type: application/x-msexcel" ); 
        header ( "Content-Disposition: attachment; filename={$filename}.xls" ); 
        header ( "Content-Description: PHP Generated XLS Data" ); 
        print $this->xls_data; 
     } 

     // change the default saving directory 
     function ChangeDefaultDir( $newdir ) 
     { 
       $this->default_dir = $newdir; 
       return; 
     } 

     // Save generated xls file 
     
     // Save generated xls file 
     function SaveFile() 
     { 
        $this->End(); 
        $this->fname = $this->default_dir."$this->dirsep".$this->filename; 
        if ( !stristr( $this->fname, ".xls" ) ) { 
          $this->fname .= ".xls"; 
        } 
        $fp = fopen( $this->fname, "wb" ); 
        fwrite( $fp, $this->xls_data ); 
        fclose( $fp ); 
        return; 
     } 

     // Get generated xls as specified type 
     function GetXls( $type = 0 ) { 
         if ( !$type && !$this->get_type ) { 
            $this->SendFile(); 
         } else { 
            $this->SaveFile(); 
         } 
     } 
   } // end of the class PHP_SIMPLE_XLS_GEN 
} 
?>



usage example:

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
$xlsfile = new XLSDoc(); 
                    $xlsfile->totalcol = 15; 
                    
                    $xlsfile->insertText("Projectnummer");
                    $xlsfile->insertText("ReproID");
                    $xlsfile->insertText("Cursusnaam");
                    $xlsfile->insertText("RVE");
                    $xlsfile->insertText("Opdrachtgever");
                    $xlsfile->insertText("Doorlooptijd");
                    $xlsfile->insertText("Doorlooptijd 2");
                    $xlsfile->insertText("Afgeleverd");
                    $xlsfile->insertText("Type Drukwerk");
                    $xlsfile->insertText("Kopieën");
                    $xlsfile->insertText("Uren Voorbereiding");
                    $xlsfile->insertText("Uren handwerk");
                    $xlsfile->insertText("Uren DTP");
                    $xlsfile->insertText("Uren Totaal");
                    $xlsfile->insertText("Bedrag Totaal");


                    for ($i=0; $i<sizeof($input); $i++)
                    {
                        $opdracht = new reproOpdracht($input[$i]['reproID']);
                        $xlsfile->insertNumber($opdracht->projectnr);
                        $xlsfile->insertNumber($opdracht->reproID);
                        $xlsfile->insertText($opdracht->cursus);
                        $xlsfile->insertText($opdracht->RVE);
                        $xlsfile->insertText($opdracht->eigenaar);
                        $xlsfile->insertNumber($opdracht->doorlooptijd);
                        $xlsfile->insertNumber($opdracht->doorlooptijd2);
                        $xlsfile->insertText($opdracht->afsluitInfo['Manier van afleveren']);
                        $xlsfile->insertText($opdracht->opdrachtType);
                        $xlsfile->insertNumber($opdracht->kopieen);
                        $xlsfile->insertNumber($opdracht->afsluitInfo['Aantal uren voorbereiding / restauratie werk']);
                        $xlsfile->insertNumber($opdracht->afsluitInfo['Aantal uren hand werk']);
                        $xlsfile->insertNumber($opdracht->afsluitInfo['Aantal uren DTP werk:']);
                        $xlsfile->insertNumber($opdracht->totaalUren);
                        $xlsfile->insertNumber($opdracht->kosten);
                    }
                    throw_error($opdracht);
                    $xlsfile->SendFile("Repro statistieken FB {$_POST['Startdatum']} tot {$_POST['Einddatum']}");


Hope that helps :) 't kostte mij úren :S

[ Voor 9% gewijzigd door SchizoDuckie op 25-06-2004 13:29 ]

Stop uploading passwords to Github!


  • Tijsje
  • Registratie: Februari 2001
  • Laatst online: 23-05 06:39
Papa Eend schreef op 25 juni 2004 @ 13:28:
Ik heb zelf exact dezelfde irritante )@*(^%@)(#$^* fouten gehad, óf je halve excelfile ligt overhoop, óf je gaat je fields enclosen met een bepaald veld, waardoord e andere helft weer fout gaat.

prut dus.

Gelukkig vond ik een class:


Hope that helps :) 't kostte mij úren :S
Wat geef ik dan als $input?
Ik krijg het namelijk niet aan de praat.
Zo zou hij toch zeker moeten werken?

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
<?
$xlsfile = new XLSDoc(); 
                    $xlsfile->totalcol = 15; 
                    
                    $xlsfile->insertText("Projectnummer"); 
                    $xlsfile->insertText("ReproID"); 
                    $xlsfile->insertText("Cursusnaam"); 
                    $xlsfile->insertText("RVE"); 
                    $xlsfile->insertText("Opdrachtgever"); 
                    $xlsfile->insertText("Doorlooptijd"); 
                    $xlsfile->insertText("Doorlooptijd 2"); 
                    $xlsfile->insertText("Afgeleverd"); 
                    $xlsfile->insertText("Type Drukwerk"); 
                    $xlsfile->insertText("Kopieën"); 
                    $xlsfile->insertText("Uren Voorbereiding"); 
                    $xlsfile->insertText("Uren handwerk"); 
                    $xlsfile->insertText("Uren DTP"); 
                    $xlsfile->insertText("Uren Totaal"); 
                    $xlsfile->insertText("Bedrag Totaal"); 


                    
                    $xlsfile->SendFile("Repro statistieken FB");

?> 


Maar krijg dan allemaal: Warning: Cannot modify header information - headers already sent by (output started at C:\Program Files\Apache Group\Apache2\virtual\.......

  • Tijsje
  • Registratie: Februari 2001
  • Laatst online: 23-05 06:39
Iemand een idee?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20:27

gorgi_19

Kruimeltjes zijn weer op :9

Die foutmelding is al vaker voorbij gekomen en behandeld; en deze foutmelding lijkt me ook vrij duidelijk. :) Je kan de headers niet meer veranderen als er al content naar de browser is gestuurd.
Ook een spatie of een enter is content welke de boel kan verstieren. :)

Kijk dus op de regel van de foutmelding waar het fout gaat en waar al eerder content wordt gestuurd. :) Pas deze aan, of verwijder evt. spaties e.d.

Omdat dit probleem al vaak is besproken, gaat deze dicht. :)

[ Voor 5% gewijzigd door gorgi_19 op 04-07-2004 19:49 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo

Pagina: 1

Dit topic is gesloten.