Spreadsheet_Excel_Reader Datum probleem

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • fl1p
  • Registratie: Juli 2005
  • Laatst online: 21-03 13:42
Ik moet een Excel-werkblad importeren in MYSQL.

Nu is er voor een aantal kolommen een bepaald invoermasker vooropgezet, namelijk dd.mm.yyyy.

Het probleem met Spreadsheet_Excel_Reader is dat hij het importeert als dd.mm.yyyy, en niet als de waarde in die cel.

Ik heb al alle functies overlopen, maar vind niet meteen een oplossing. Heeft iemand ervaring met deze functies?

Acties:
  • 0 Henk 'm!

  • muppet99
  • Registratie: Juli 2002
  • Laatst online: 16:52
Je kunt ook de datum notatie veranderen van de kolom. Selecteer kolom, ga naar celeigenschappen en kies daar de juiste datumnotatie. Excel zet alle data netjes om van 14-3-2012 naar 3-14-2012. Lost dit je probleem op?

Carpe Diem


Acties:
  • 0 Henk 'm!

  • fl1p
  • Registratie: Juli 2005
  • Laatst online: 21-03 13:42
Jammer genoeg niet.

Gebruikers exporteren hun gegevens van een site die ik niet beheer, naar een excel-werkmap. Ze openen dat bestand zelf niet, het dient enkel om te importeren in mijn site. Dit hen laten aanpassen zou een grote stap achteruit zijn, vandaar dat ik het graag oplos via de website...

Acties:
  • 0 Henk 'm!

  • muppet99
  • Registratie: Juli 2002
  • Laatst online: 16:52
Is er wel een mogelijkheid om de excel bestanden van de voren te bewerken, voordat ze in jou database worden gezet? Dan zou je nog een voorbewerking kunnen doen.

excel uploaden --> converten naar csv --> convertslag over de datum kolommen laten lopen --> csv importeren in database.

Ik dnek nu even 'out the box' waarbij ik het voor de klanten zo makkelijk mogelijk probeer te houden.

Carpe Diem


Acties:
  • 0 Henk 'm!

  • fl1p
  • Registratie: Juli 2005
  • Laatst online: 21-03 13:42
Als dat achter de schermen, via mijn website, dus op het web, kan, ja :-)
Maar ik vrees er een beetje voor? Heb hier nog niet op gezocht...

Acties:
  • 0 Henk 'm!

  • Evilbee
  • Registratie: November 2002
  • Laatst online: 18-07 11:08
Als je iets als PHPExcel gebruikt, kan je excel bestanden redelijk simpel met php bewerken en eventueel opnieuw opslaan als csv.

LinkedIn - Collega worden?


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Uit mijn hoofd gezegd : Je kan met phpexcel ook het invoermasker opvragen van een cel (of een kolom) en aan de daarvan de data die in die cel staat opmaken, maar dat is wel moeilijke weg (je moet achtergrondkleuren etc er dan weer uitfilteren etc etc etc.

Maar als alles in die opmaak is dan kan je toch ook gewoon in php de datum omdraaien voordat je het naar mysql schopt?

Maar sowieso als je hier al niet uitkomt dan zou ik me sterk af gaan vragen of je wel excel bestanden wilt accepteren, je moet daar echt 1001 guard-clausules voor schrijven (wat doe je bijv met 2 samengevoegde cellen waarbij de text rechts uitgelijnd is, of met rode achtergronden in je cellen (waarbij de gebruiker bedoelt dat die niet meetellen) etc etc)
Ik bedoel normale gebruikersinput moet je al 100% valideren voordat je het in je db pompt (wat je vermoedelijk nog niet doet, anders had je in die validatie ook gelijk de conversieslag kunnen zetten) maar excel moet je echt 10.001% controleren anders heb je gewoon invalid data in je db staan.

Acties:
  • 0 Henk 'm!

  • fl1p
  • Registratie: Juli 2005
  • Laatst online: 21-03 13:42
Ik ga het sowieso inderdaad controleren :)
Voordeel is dat het uit een programma komt, en de user daar niets aan hoeft te veranderen. Doen ze het wel, zal het niet door de validatie geraken (die ik nog moet schrijven :p)

Mijn collega en ik hebben het samen kunnen oplossen!

Hieronder de code die we gebruikt hebben:
code:
1
2
3
4
5
6
7
8
9
10
if($data->val($x,$j,$sheet=0) == "dd.mm.yyyy") 
{//omvormen naar datum
    $rawdate = $data->raw($x,$j,$sheet=0);
    //verschil berekenen van huidige datum tot 70 jaar ervoor
    //heeft te maken met het verschil startdatum excel (1900) en PHP (1970)
    $aantal_dagen_UNIX = $rawdate - 25569;
    $mijntimestamp = $aantal_dagen_UNIX * 24*60*60;
    
    $sql .= "'" . date("d-m-Y", $mijntimestamp) . "',";
}

De RAW value was blijkbaar een unix timestamp, maar in Excel-formaat. Die moet dan nog omgezet worden naar PHP, en voila!

Het is ruwe code, hoor :) Zoals gezegd moet er nog validatie op gebeuren, juiste output, enz enz... :)

[ Voor 13% gewijzigd door fl1p op 17-10-2012 18:21 ]


Acties:
  • 0 Henk 'm!

  • wackmaniac
  • Registratie: Februari 2004
  • Laatst online: 18-07 10:05
Zoals Evilbee al zei zou ik eens naar PHPExcel kijken. Spreadsheet_Excel_Reader is voor het laatst bijgewerkt in 2007 volgens de Sourceforge pagina en dat leverde voor mij nogal wat issues op, zoals ook de issue die jij noemt. PHPExcel is een projectje van een aantal Microsoftmedewerkers, die is wat flexibeler in gebruik (ondersteunt ook xlsx en dergelijke zaken).

Read the code, write the code, be the code!


Acties:
  • 0 Henk 'm!

  • curvemod
  • Registratie: Maart 2009
  • Laatst online: 16-07 07:44
wackmaniac schreef op donderdag 18 oktober 2012 @ 23:40:
Zoals Evilbee al zei zou ik eens naar PHPExcel kijken.
Eens, dit soort problemen zijn in PHP_Excel gewoon voor je opgelost, scheelt veel tijd. Je hebt daarin op ieder veld een soort convert functie die de ruwe Excel data omzet naar iets leesbaars in PHP :)
Pagina: 1