• Consiglio Direttivo

    Excel to Db mysql - Problema nell'importazione della data

    Salve a tutti 😉
    Appena iscritto e già vi rompo XD
    non ho beccato nulla al riguardo, pertanto mi permetto di aprire un topic.
    Ho il seguente problema:
    devo importare il contenuto di un file xls in un Db Mysql 5...fin qui' ancora ci arrivo....
    Il mio problema pero' sorge quando il campo da importare è un campo data che, da formato excel, o Open Office (Inglese o Italiano che si usi), mi presenta i dati nei seguenti formati:
    DD/MM/YYYY (Italiano)
    YYYY/MM/DD (Inglese)

    Dato che PHP, giustamente (:p), mi legge questi dati nel seguente modo:
    D=giorno della settimana in 3 caratteri, ed in inglese
    M=mese a tre caratteri, ed in inglese
    Y=anno a 4 numeri
    e che il risultato per LUI quindi è, nel caso di 10/01/2007: ThuThu/JanJan/2007200720072007 (❌x❌x) (invertito nel caso di data all'inglese 200720072007.....etc etc)....Sapreste darmi qualche dritta al riguardo?

    Ho già pensato al formattare il campo data come testo in excel, ma la cosa poteva servire se il file partiva da ex novo, ahime' l'implementazione che cerco di fare parte da un file che ha un bel po di righe 😢 (andarmele a ricaricare è un'utopia XD e poi si rischia troppo di incorrere in errori di digitazione).

    questa è la stringa che mi estrae i dati di quel campo:
    $date = $data->sheets[0]['cells']*[2];

    Non sono un esperto di programmazione, ne ho provate un po devo dire, ma ora son veramente fermo :?:?. Tutti gli altri campi, testo o numerici che siano, mi vanno dentro il Db che è una meraviglia....ma il campo data mi sta straziando XD

    HELP!!!!:impiccato:


  • User Attivo

    Ciao Samyorn,
    purtroppo non conosco la classe con la quale estrai i dati dal foglio elettronico. Nel caso fosse possibile leggere il dato come semplice stringa di testo, potresti rimaneggiarla successivamente per fornire a php la stringa data in modo corretto.

    Alternativamente potresti fare tale operazione modifcando la classe stessa.

    Se ci dai più coordinate forse riusciamo a darti maggior aiuto.
    :ciauz:


  • Consiglio Direttivo

    Purtroppo da excel non posso far molto, se trasformo il campo data in campo testo mi trasforma la data in numero (10/01/2007=39092).

    ti posto quì di seguito il codice di prova, il file che dovrei trasferire ha altri campi, per ora stavo provando l'importazione con un campo testo, uno data ed uno numerico:

    require_once 'Excel/reader.php';
    $data = new Spreadsheet_Excel_Reader();
    $data->setOutputEncoding('CP1251'); 
    $data->read('fileexcel.xls');
    for ($i = 2; $i <= $data->sheets[0]['numRows']; $i++)
    { 
    $nome = "".$data->sheets[0]['cells']*[1]."";
    $date = "".$data->sheets[0]['cells']*[2]."";
    $importo = "".$data->sheets[0]['cells']*[3]."";
    $query="INSERT INTO prova (nome,data,importo) VALUES ('$nome','$date','$importo')"; 
    $dati=@mysql_query($query) or die (mysql_error());
    } 
    

    io sono sinceramente ad un punto morto XD

    che consigli?

    Sam 😄

    P.S.OT ma come si fa a postare il codice come "Codice PHP"? 😄


  • User Attivo

    Non intendevo di rimaneggiare la data da excel, ma di leggerla con php come stringa e di rimaneggiarla da php stesso... hai provato?

    @Samyorn said:

    P.S.OT ma come si fa a postare il codice come "Codice PHP"? 😄

    In modalità avanzata, quartultima icona della seconda riga, quella con scritto php...;)


  • Consiglio Direttivo

    @ceccus said:

    Non intendevo di rimaneggiare la data da excel, ma di leggerla con php come stringa e di rimaneggiarla da php stesso... hai provato?
    ops.....avevo capito male. No.....mi sfugge come fare a dire la verità, se la riesco ad importare come stringa non ho problemi a rimaneggiarla.
    Devo impostare la variabile $date come stringa o cosa?
    (Non sono un esperto, scusa se magari la domanda è stupida :2:

    @ceccus said:

    In modalità avanzata, quartultima icona della seconda riga, quella con scritto php...;)
    Beccato 😄
    Grazie infinite 😉


  • Consiglio Direttivo

    Dato che non trovo il modo di importarmi il campo data di excel come stringa ho risolto in altro modo, bruttissimo già al solo pensiero :mmm:
    Lo posto, non si sa mai possa servire a qualcun'altro ;): (almeno in attesa che si risolva l'arcano :D)

    primo passo:
    1)identificare a cosa corrisponde il giorno 0 in Excel (31/12/1899), per Open Office invece 30/12/1899 (meglio non fare commenti al riguardo....evitiamo :?);
    2)identificare a cosa corrisponde il giorno 0 per l'SQL in uso (nel mio caso una data strana, ma mooooolto strana:24/11/1833 :?)
    3)trasformare in campo di testo le celle di excel che contengono le date (verrà fuori il numero di gg partendo dal giorno 0 di riferimento, Es. per il 10/01/2007 corrispondono, almeno quì nel mio PC :?, 39092 giorni)

    fatto cio':

    [php]$date = "".$data->sheets[0]['cells']*[2]."";
    $diff='2085868800'; /** timestamp dell'intervallo 24/11/1833->30/12/1899 /
    $secondi='86400'; /
    * numero di secondi in un giorno /
    $date = ($secondi * $date) + $diff; /
    * moltiplico il numero di gg che mi separata dal 30/12/1899 (in questo caso 39092) per i secondi che compongono un giorno ed infine aggiungo l'intervallo in secondi di prima */
    $date=strftime('%Y-%m-%d', $date);[/php]

    Già il solo pensare di aver fatto una boiata simile mi fa star male, ma non ho trovato altro metodo :arrabbiato:
    Alla fine funziona........pero' è una porcata già al solo vederla :rollo:

    Spero che qualcuno riesca ad aiutarmi, credo che si debba smanettare sull'Excel Reader, ma gli ho dato un'occhiata ed è ben oltre le mie capacità (tre semafori rossi ed uno lampeggiante almeno :D).

    Sam 😄


  • User Newbie

    so che il post è vecchissimo ma visto che ci ho sbattuto la tasta anche io posso dire che con la nuova versione che trovate qui

    code.google.com/p/php-excel-reader/downloads/list

    il problema è risolto 🙂