Eerst mijn probleem
Zoals je kunt zien schrijft dit script de excel cellen weg in het "xlsWriteLabel" formaat (xlsWriteNumber is niet de oplossing). Nu vermoed ik dat er voor datavelden een ander packformaat bestaat. Echter kan ik dit nergens vinden. Kan iemand mij hier aan helpen? of me in de goede richting sturen?
Nu vermoed ik dat de fout dus in mijn PHP verhaal zit, aangezien ik data vanuit hier exporteer. Om eerst een beeld te geven, dit zijn de functies die ik gebruik.Liqued schreef op zondag 11 april 2010 @ 20:31:
Ik loop tegen het volgende probleem aan. Ik open in excel een bestand en in dat bestand staat een kolom met allemaal datums (dd-mm-jjjj). Het probleem is dat excel 2003 deze niet herkend als datum waardoor het geen datumveld wordt. Ook als ik deze "hard" instel dmv rechtermuisknop->celeigneschappen->datum en dan een type aan geef wordt deze niet herkend. Het vreemde is dat als ik in de cel sta en in de formule balk ga sta en achter de datum een enter geef hij deze het wel herkend. Aangezien het om een paar duizend stuks gaat zou ik toch graag een snellere oplossing willen.
Suggesties?
Edit: Ik ben ondertussen iets verder. Als ik het bestand open in OpenOffice dan zie ik dat er een ' voor de datum staat (die zie ik in excel 2003 niet terug).
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
| function xlsBOF() { echo pack("ssssss", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0); return; } function xlsEOF() { echo pack("ss", 0x0A, 0x00); return; } function xlsWriteNumber($Row, $Col, $Value) { echo pack("sssss", 0x203, 14, $Row, $Col, 0x0); echo pack("d", $Value); return; } function xlsWriteLabel($Row, $Col, $Value ) { $L = strlen($Value); echo pack("ssssss", 0x204, 8 + $L, $Row, $Col, 0x0, $L); echo $Value; return; } // Send Header header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream"); header("Content-Type: application/download");; header("Content-Disposition: attachment;filename=export.xls "); header("Content-Transfer-Encoding: binary "); xlsBOF(); $xlsRow = 1; // een SQL query die ik om het simpel te houden even heb weg gelaten while($rij =mysql_fetch_object($result)) { //LogDatum is al in het nederlands formaat ( dd-mm-jjjj ) xlsWriteLabel($xlsRow,0,$rij->LogDatum); $xlsRow++; } xlsEOF(); exit(); |
Zoals je kunt zien schrijft dit script de excel cellen weg in het "xlsWriteLabel" formaat (xlsWriteNumber is niet de oplossing). Nu vermoed ik dat er voor datavelden een ander packformaat bestaat. Echter kan ik dit nergens vinden. Kan iemand mij hier aan helpen? of me in de goede richting sturen?