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.