Convertire le date dal formato Excel a quello standard con Python

I file Excel memorizzano le date come numeri seriali, rappresentando il numero di giorni trascorsi dal 1 gennaio 1900 (sistema Windows) o dal 1 gennaio 1904 (sistema Mac). Per lavorare correttamente con le date in Python, è necessario convertire questi numeri in oggetti datetime.

1. Installare la Libreria necessaria

La libreria openpyxl è comunemente utilizzata per leggere i file Excel (.xlsx). Per installarla:

pip install openpyxl

2. Esempio di Conversione

Nel seguente esempio, leggeremo un file Excel e convertiremo i valori delle celle contenenti date nel formato standard ISO (YYYY-MM-DD).

from openpyxl import load_workbook
from datetime import datetime, timedelta

# Carica il file Excel
workbook = load_workbook('esempio.xlsx')
sheet = workbook.active

# Funzione per convertire numero Excel in data
def excel_date_to_datetime(excel_serial, date_system='windows'):
    if date_system == 'windows':
        start_date = datetime(1899, 12, 30)  # Excel considera 1900 come anno bisestile
    elif date_system == 'mac':
        start_date = datetime(1904, 1, 1)
    else:
        raise ValueError("Sistema non valido. Usa 'windows' o 'mac'.")

    return start_date + timedelta(days=excel_serial)

# Estrae e converte le date dalla prima colonna
for row in sheet.iter_rows(min_row=2, max_col=1, values_only=True):
    excel_value = row[0]
    if isinstance(excel_value, (int, float)):
        date = excel_date_to_datetime(excel_value)
        print(date.strftime('%Y-%m-%d'))
    else:
        print(f'Valore non convertibile: {excel_value}')

3. Considerazioni

  • Verifica sempre il sistema di riferimento delle date (Windows o Mac).
  • Le celle con valori non numerici o già in formato datetime non devono essere convertite.
  • Excel considera il 1900 come anno bisestile, il che introduce un errore di 1 giorno per date anteriori a marzo 1900.

Conclusione

Con Python è possibile convertire facilmente le date in formato Excel in oggetti datetime standard. Questo consente di gestire e manipolare correttamente le date in applicazioni e analisi successive.

Torna su