CSV met o.a. telefoonnummers naar Excel

Pagina: 1
Acties:
  • 953 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben bezig met een PHP project.
Hierbij is een van de functies dat records uit de database worden geconverteerd naar CSV zodat deze in Excel kan worden ingelezen. Op zich niets exotisch aan.

Echter, bevatten de records ook telefoonnummers.
Een voorbeeld van een telefoonnummer is 0612345678.
Wanneer dit telefoonnummer wordt ingelezen in Excel wordt dit gewijzigd in 612345678, waar andere telefoonnummers die een spatie en/of streepje bevatten gewoon worden afgedrukt zoals ze in de database staan.

Heeft iemand hier een oplossing voor ?

Dit is de code die momenteel wordt gebruikt om de CSV te genereren:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
function medewerker_convertUsersToCSV() {
 $csv = fopen("medewerkers.csv", "w");
    $csv_string = "Achternaam; Voornaam; Functie; Email; Telefoon\n";
    foreach(medewerker_getUsers() as $medewerker) {
        $csv_string .= $medewerker->getAchternaam() . "; ";
        $csv_string .= $medewerker->getVoornaam() . "; ";
        $csv_string .= $medewerker->getFunctie() . "; ";
        $csv_string .= $medewerker->getEmail() . "; ";
        $csv_string .= $medewerker->getTelefoon() . "\n";
    }
    
    fwrite($csv, $csv_string) or die("Error: could not generate Excel file.");
  }


kolommen worden gescheiden door ; (komma (,) werkt om een of andere duistere reden niet)

Acties:
  • 0 Henk 'm!

  • matthijsln
  • Registratie: Augustus 2002
  • Nu online
Dit is meer een Excel vraag. Je moet het csv bestand niet direct met Excel openen maar het csv bestand importeren in een nieuw Excel bestand via het menu Data, Import External Data, Import Data. Daar kan je aangeven wat het scheidingsteken is en wat de datatypes van een kolom zijn. Voor de kolom waar het telefoonnummer in staat moet je voor Text kiezen.

De reden dat Excel bij jou alleen ; accepteert als scheidingsteken komt omdat bij het direct openen Excel het scheidingsteken gebruikt dat is ingesteld bij de landinstellingen in het configuratiescherm.

[ Voor 10% gewijzigd door matthijsln op 23-10-2006 19:41 ]


Acties:
  • 0 Henk 'm!

  • Obliterator
  • Registratie: November 2000
  • Laatst online: 08-07 15:12
Aanhalingstekens om het telefoonnummer zou ervoor moeten zorgen dat het als string gezien word voor zover ik weet.

Acties:
  • 0 Henk 'm!

  • matthijsln
  • Registratie: Augustus 2002
  • Nu online
Obliterator schreef op maandag 23 oktober 2006 @ 19:40:
Aanhalingstekens om het telefoonnummer zou ervoor moeten zorgen dat het als string gezien word voor zover ik weet.
Door Excel niet.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Inderdaad gebeurt dat in Excel niet. Het kan wel, maar dan hou je de quotes eromheen en dat schiet dus niet op. Het is de bedoeling dat bezoekers op de website direct het CSV bestand kunnen downloaden en dus een Excel sheet kunnen zien. Het moet niet zo zijn dat ze dit zelf allemaal moeten importeren.

Acties:
  • 0 Henk 'm!

  • WormLord
  • Registratie: September 2003
  • Laatst online: 01-08 12:04

WormLord

Devver

Als het niet perse via csv moet, dan zou je ook eens naar http://pear.php.net/package/Spreadsheet_Excel_Writer kunnen kijken. Daarmee kun je direct een excel bestand maken vanuit php.
Het is wel in het formaat van een wat oudere excel versie, maar werkt prima.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ja, maar er moet toch ook een oplossing zijn om dit in PHP op te lossen ?

Acties:
  • 0 Henk 'm!

  • zwippie
  • Registratie: Mei 2003
  • Niet online

zwippie

Electrons at work

Verwijderd schreef op maandag 23 oktober 2006 @ 19:04:
[...]
Een voorbeeld van een telefoonnummer is 0612345678.
Wanneer dit telefoonnummer wordt ingelezen in Excel wordt dit gewijzigd in 612345678, waar andere telefoonnummers die een spatie en/of streepje bevatten gewoon worden afgedrukt zoals ze in de database staan.

Heeft iemand hier een oplossing voor ?
[...]
De allersimpelste hack die ik kan bedenken, is om elke telefoonnummer een spatie of streepje mee te geven, aangezien je zegt dat het importeren dan wel goed gaat.
Mooi is het natuurlijk niet.

How much can you compute with the "ultimate laptop" with 1 kg of mass and 1 liter of volume? Answer: not more than 10^51 operations per second on not more than 10^32 bits.


Acties:
  • 0 Henk 'm!

  • WormLord
  • Registratie: September 2003
  • Laatst online: 01-08 12:04

WormLord

Devver

Verwijderd schreef op dinsdag 24 oktober 2006 @ 13:50:
Ja, maar er moet toch ook een oplossing zijn om dit in PHP op te lossen ?
Inderdaad. Die PEAR-package is dan ook een collectie van php-scripts 8)

Acties:
  • 0 Henk 'm!

  • ripexx
  • Registratie: Juli 2002
  • Laatst online: 10:27

ripexx

bibs

Ik heb het opgelost door een text bestand te maken wat er ongeveer zo uitziet:
code:
1
2
="Voornaam" ="Tussenvoegsel"    ="Achternaam"   ="Functie"  ="Telefoon" ="Mobiel"   ="Email"    
="Test" ="" ="Account"  ="Test Account" ="" ="Some" ="dd@disney.com"    ="0201234567"

De PHP code is als volgt:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
header("Content-type: excel/ms-excel");
header("Content-Disposition: attachment; filename={$filename}.xls");
    
foreach($cols as $k_row => $v_row)
{
    foreach($cols[$k_row] as $k_col => $v_col)
    {
        // door gebruik te maken van ="" worden ook datums en integers (bijv telefoonnummer) 
        print "=\"".$v_col."\"\t";
    };
    print "\r\n";
    };

Dit is echt oude code, maar werkt nog steeds prima.

buit is binnen sukkel


Acties:
  • 0 Henk 'm!

  • Reinier
  • Registratie: Februari 2000
  • Laatst online: 16:55

Reinier

\o/

En een enkele quote voor het telefoonnummer? Werkt dat?

Acties:
  • 0 Henk 'm!

  • flashin
  • Registratie: Augustus 2002
  • Laatst online: 17-12-2023
Wat je ook kon doen is bij ieder telefoonnummer de 0 eraf halen en er +31 voor zetten. klaar.

Acties:
  • 0 Henk 'm!

  • JJvG
  • Registratie: Juli 2003
  • Laatst online: 31-05 13:43
Kleine tip: je header heeft extra quotes nodig voor de filename
nu schrijf je:
PHP:
1
header("Content-Disposition: attachment; filename={$filename}.xls");

dit moet iets worden als:
PHP:
1
header("Content-Disposition: attachment; filename=\"{$filename}.xls\"");

N.B.: Ik heb geen PHP ervaring, maar wel Excel-downloaden-uit-script-ervaring in ASP. Internet Explorer pikt het wel als er geen quotes omheen staan, maar Firefox niet (wat volgens de RFC goed is). Met spaties in een filename kun je hier tegen aan lopen. Misschien moet het niet met \" erbij, maar iets anders. Mijn php-kennis is verder nihil.

[ Voor 0% gewijzigd door JJvG op 26-10-2006 12:41 . Reden: typo ]

Pagina: 1