Potrei aver scritto questo post 45 volte, ormai, e tutte le volte ci ricasco. E bestemmio.

Prima o poi ti capita che il cliente ti chieda “l’export per excel” di qualche tabulato. Tu al volo allora gli proponi l’export in csv che tanto Excel lo apre come fosse un xls, sperando di svincolarti dai micragnosi (e fino a poco tempo fa) misteriosi formati proprietati Microsoft. Capra e cavoli? Tutto liscio? Certo, come no.

Prepari il tuo bell’export CSV come tutti sanno fare e magari approfondisci anche il discorso.

Con OpenOffice, ovviamente, tutto liscio.

Ecco invece i problemi con Excel (sarei tentato di dire “qualsiasi versione”, ma in realtà ho provato solo con MS Office 2003)

  • per Excel la “C” di “CSV” sta per “semicolon” e non per “comma”. Già. Occorre separare i campi con un punto e virgola, non con una virgola (ancora una volta OOo non fa una piega cambiando questo “default” – si limita a dire “Oh, OK.”; giuro che l’ho sentito) [edit: come dice calca nei commenti questo comportamento potrebbe essere una impostazione del locale... boh]
  • il problema più grave, però, è che per Excel un CSV può essere soltanto in LATIN1 e niente altro. Avete codificato il CSV in UTF8? Tempo perso. No way. Niente da fare. Da qualche parte si legge che aggiungendo il dovuto BOM all’inizio del file il signorino dovrebbe onorarlo… a me non è sembrato.

La cosa curiosa, per quanto riguarda quest’ultimo punto, è che se da Excel stesso esporti uno sheet in fomato CSV contenente dei caratteri non ASCII, il CSV che ottieni è appunto non in formato UTF8, e dunque avrai le famose accentate sminchiate. Va da sé che non esiste opzione per modificare questo comportamento.

Se sei stato più fortunato di me, fammelo sapere e te ne sarò grato.