Il diavolo si annida nei dettagli

Excel e la macchina del tempo

“Se avessi un po’ più di tempo… Ehi, un momento! Ho tutto il tempo che voglio: ho una macchina del tempo!”
(Marty McFly, Ritorno al futuro, 1985)

Office, si sa, è il pacchetto di programmi da ufficio più diffuso al mondo. Di conseguenza , si sa, è l’applicazione per la produzione di fogli di calcolo più usata al mondo. Per questa ragione (e solo per questa, come vedremo) i formati di file prodotti da sono largamente utilizzati per la gestione di dati.

Capita assai spesso che questi dati debbano essere utilizzati anche da altre applicazioni. Immaginiamo, per fare un esempio, un programma che utilizzi la cronologia delle operazioni effettuate su un conto corrente bancario, memorizzata su un file .xls, per effettuare analisi finanziarie di un qualunque tipo. Supponiamo che quel programma sia stato scritto in Python. Il suo autore molto probabilmente utilizzerà il modulo xlrd, che contiene gli strumenti utilizzabili dal codice in Python per estrarre e manipolare correttamente i dati contenuti nei fogli di calcolo scritti nei formati proprietari di Microsoft.

Leggendo la documentazione relativa al modulo xlrd saltano subito agli occhi del lettore sufficientemente smaliziato alcune “bizzarre” peculiarità dei formati proprietari di Excel, soprattutto per quanto riguarda la gestione dei dati temporali.

La prima bizzarra peculiarità riguarda il fatto che Excel non memorizza le date come date (cioè, come sarebbe logico, come anno-mese-giorno-ora-minuti-secondi, che sono numeri interi), ma come numeri in virgola mobile, ad esempio 42860.5.

La seconda bizzarra peculiarità riguarda la data scelta come origine di questo bizzarro sistema di riferimento temporale. Anzi, “le” date: Excel per Windows usa come “zero” il 31 dicembre 1899, alle ore 00:00:00 (per cui il numero 1 corrisponde al 1° gennaio 1900, e così via; nell’esempio precedente il numero 42860.5 corrisponde proprio al 5 maggio 2017, a mezzogiorno), mentre Excel per Mac usa il 1° gennaio del 1904, alla stessa ora (almeno quella). Se vi siete spaventati pensando a quanti file .xls prodotti su sistemi diversi vi siete scambiati in questi anni, tranquillizzatevi: il sistema di riferimento usato è memorizzato nel file, ed Excel ne tiene conto automaticamente. Il nostro programma per l’analisi finanziaria scritto in Python, invece, deve andarlo a guardare nel file, utilizzando proprio gli strumenti disponibli nel modulo xlrd, la cui documentazione “simpaticamente” diffida lo sviluppatore dal tirare ad indovinare, pena lavorare con date sbagliate di ben 1462 giorni. Spiegare la ragione di tutte queste complicazioni supera il nostro bagaglio di conoscenze storico-informatiche e anche la nostra capacità di immaginazione.

La terza bizzarra peculiarità riguarda il fatto che secondo Excel per Windows, per il quale, appunto, il numero 0 è il 31/12/1899, l’1 è il 01/01/1900, il 2 è il 02/01/1900 e così via, il numero 61 corrisponde al 29 febbraio 1900, che però… non è mai esistito nella storia del mondo, dato che il 1900 non fu un anno bisestile. Per gli amanti delle spiegazioni: sono bisestili solo gli anni multipli di 4, con eccezione dei centenari (i multipli di 100) che non sono anche multipli di 400. Quindi sono bisestili il 1600 e il 2000 (multipli di 4, di 100 e di 400), ma non il 1900 (multiplo di 4, di 100 ma non di 400). La cosa si fa seria, in quanto non si tratta di un problema insito nel formato del file, dove le date sono semplicemente numeri reali, ma creato dall’applicazione stessa, che è il luogo dove i numeri reali sono convertiti nel formato data. Infatti creando un file .xls con qualsiasi altra applicazione (ad esempio LibreOffice Calc), il numero 61 corrisponderà correttamente al 1° marzo 1900, introducendo di fatto una insanabile incompatibilità tra il formato di file proprietario di Excel ed Excel. E al nostro sviluppatore di programmi di analisi finanziaria scritti in Python, ignaro del fatto che il file .xls da cui attinge i i dati sia stato creato (in modo scorretto) da MS Excel o (correttamente) da un altro programma, apparirà finalmente chiaro il significato del detto: “anno bisesto, anno funesto”.

La documentazione del modulo xlrd mostra ancora altre bizzarrie, che lasciamo alla libera volontà di approfondimento dei nostri lettori. A noi ciò basta per constatare che la fama del formato (ma bisognerebbe dire “i” formati) di file per fogli di calcolo più usato e diffuso al mondo appare assai mal riposta, e che l’ampiezza della sua diffusione (che qualcuno confonde con lo status di “standard”) non dipende dalla sua qualità, ma solo dall’ampiezza della diffusione dell’applicativo che lo utilizza. Sulle cui ragioni ci interrogheremo, forse, un’altra volta.

Marco Alici

Marco Alici

Ingegnere meccanico, lavora come progettista presso la Videx. Affascinato dai computer fin da bambino, quando gli regalarono un Commodore 16, negli anni dell’università scopre Linux e il mondo del Software Libero e Open Source, dapprima come semplice utente, poi come convinto sostenitore. A metà strada tra la formazione tecnica e la passione informatica si inseriscono i suoi interessi nel mondo della computer-grafica e della stampa 3D. È vice-presidente del Fermo Linux Users Group e membro dell’associazione LibreItalia.

Clicca per commentare

Commenti e reazioni su:

Loading Facebook Comments ...

Lascia una replica

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

No Trackbacks.

Inizio
Share This