Vai al contenuto

Come creare un calendario con Python in Excel

    COME_CREARE_CALENDARIO_PYTHON_EXCEL_MARCOFILOCAMO_VISUALIZZAZIONE_FINALE
    Tag:

    Python in Excel può essere una valida alternativa per automatizzare numerosi calcoli e processi, come ad esempio la creazione di un calendario da zero.

    COME_CREARE_CALENDARIO_PYTHON_EXCEL_MARCOFILOCAMO_VISUALIZZAZIONE_FINALE

    Se non hai mai visto Python in Excel, devi sapere che il codice Python va inserito seguendo questa sequenza:

    • Inizi a scrivere la formula =PY
    • Una volta che ti appare =PY, devi cliccare su TAB per poter scrivere codice
    • Ultimata la scrittura del codice, devi cliccare su CTRL+ENTER, non solo ENTER

    Fatta questa premessa, vediamo ora qual è la formula che ci serve per creare un calendario. Avremo un array calendario, in Excel, che prevede:

    • Giorno
    • Anno
    • Mese
    • Mese in formato testuale
    • Giorno
    • Giorno della settimana

    Tutto ciò, riusciremo a farlo in un colpo solo, grazie alla potenza di Python.

    COME_CREARE_CALENDARIO_PYTHON_EXCEL_MARCOFILOCAMO_SCELTA_ANNO_RIFERIMENTO

    Selezioniamo l'anno 2026 per fare un esempio e per rendere il calendario dinamico.

    La formula per creare il calendario con Python in Excel

    COME_CREARE_CALENDARIO_PYTHON_EXCEL_MARCOFILOCAMO_DATAFRAME

    Il codice necessario per creare il calendario con Python in Excel è la seguente, anche se chiaramente esistono numerose alternative per arrivare a questo risultato:

    import pandas as pd

    anno = xl("D2")
    date = pd.date_range(start=f"{anno}-01-01", end=f"{anno}-12-31", freq="D")

    # Utilizza i nomi locali per mesi e giorni
    mesi_it = {
    1:"Gennaio", 2:"Febbraio", 3:"Marzo", 4:"Aprile", 5:"Maggio", 6:"Giugno",
    7:"Luglio", 8:"Agosto", 9:"Settembre", 10:"Ottobre", 11:"Novembre", 12:"Dicembre"
    }

    giorni_it = {
    0:"Lunedì", 1:"Martedì", 2:"Mercoledì", 3:"Giovedì",
    4:"Venerdì", 5:"Sabato", 6:"Domenica"
    }

    # Crea il DataFrame calendario
    calendario = pd.DataFrame({
    "Data": date,
    "Anno": date.year,
    "Mese": date.month,
    "Mese_Nome": [mesi_it[m] for m in date.month],
    "Giorno": date.day,
    "Giorno_Settimana": [giorni_it[d] for d in date.dayofweek],
    })

    # Restituisce il calendario
    calendario

    Vediamola nel dettaglio, separandola per blocchi, iniziando dall'intervallo di date

    import pandas as pd

    anno = xl("D2")
    date = pd.date_range(start=f"{anno}-01-01", end=f"{anno}-12-31", freq="D")

    Qui stiamo dichiarando che utilizzeremo pandas, fra le librerie installate in Excel. L'anno sarà preso dalla cella D2 del nostro foglio, essendo una formula dinamica. Avremmo comunque potuto inserire anno=2035 e il risultato sarebbe stato comunque corretto.

    L'ultimo punto, con date, è il più ostico. In sostanza stiamo creando un range di date in pandas utilizzando date_range con un inizio pari a anno-01-01 e finale anno-12-31, seguendo la notazione americana anno-mese-giorno. La f"{anno indica che stiamo usando le F-string, che permettono di utilizzare un parametro dinamico, un po' come se fossero dei nomi definiti su Excel. Facendo f"{anno}-01-01" vuol dire che 01-01 sarà fisso, ma cambierà l'anno, se lo modifichiamo in D2.

    La frequenza è definita come D, cioè giornaliera (D = Day), ma alternative sarebbero comunque possibili, se richiesto.

    # Utilizza i nomi locali per mesi e giorni
    mesi_it = {
    1:"Gennaio", 2:"Febbraio", 3:"Marzo", 4:"Aprile", 5:"Maggio", 6:"Giugno",
    7:"Luglio", 8:"Agosto", 9:"Settembre", 10:"Ottobre", 11:"Novembre", 12:"Dicembre"
    }

    giorni_it = {
    0:"Lunedì", 1:"Martedì", 2:"Mercoledì", 3:"Giovedì",
    4:"Venerdì", 5:"Sabato", 6:"Domenica"
    }

    Qui ho trovato uno scoglio in Python in Excel, dato che non sembra riconoscere le impostazioni locali per i nomi dei mesi. Creiamo quindi un mapping che faccia corrispondere ai singoli mesi i nomi italiani, così come ai giorni della settimana i relativi nomi italiani. Come noti, i giorni partono da 0 perchè la numerazione predefinita, in Python, comincia proprio da zero.

    # Crea il DataFrame calendario
    calendario = pd.DataFrame({
    "Data": date,
    "Anno": date.year,
    "Mese": date.month,
    "Mese_Nome": [mesi_it[m] for m in date.month],
    "Giorno": date.day,
    "Giorno_Settimana": [giorni_it[d] for d in date.dayofweek],
    })

    Dichiariamo che vogliamo creare un DataFrame, simile a una tabella Excel con una struttura di intestazioni di colonna e righe dedicate. In particolare, avremo:

    • La colonna Data, ottenuta dalla date creata in precedenza
    • La colonna Anno, che prende l'anno della date con date.year
    • La colonna Mese, che recupera il mese di riferimento con date.month
    • La colonna Mese_Nome, che fa un passaggio in più. Stiamo dicendo che per ogni mese che troviamo in date.month, vogliamo restituire il nome corrispondente italiano che abbiamo creato prima. La m è la nostra variabile temporanea, poteva essere x,y,z, non fa differenza, ma va tenuta coerente perchè recupera il mapping - se trova 1 = Gennaio, 2 = Febbraio e così via
    • La colonna Giorno, che estrae il giorno dalla data con date.day
    • La colonna Giorno_Settimana, che fa un operazione simile a mese_nome, recuperando il nome del giorno della settimana dalla data in date

    Come noti, varie operazioni sono simili a quelle che faresti in Excel con =ANNO, =MESE, =GIORNO, =GIORNO.SETTIMANA, =SEQUENZA e così via. L'unico tema che viene sempre escluso in questi casi è la settimana, perchè crea delle complicazioni spesso fuorvianti, dovute anche al calcolo in diversi paesi.

    # Restituisce il calendario
    calendario

    L'ultimo punto è quello della visualizzazione del nostro nuovo DataFrame. Scriviamo calendario e vedremo il nostro nuovo calendario!

    COME_CREARE_CALENDARIO_PYTHON_EXCEL_MARCOFILOCAMO_TRASFORMAZIONE_DATAFRAME

    Arrivati a questo punto, magari rimaniamo un po' straniti perchè non riusciamo a visualizzare il nostro calendario. Il tema è che al momento stiamo vedendo il DataFrame, che è un oggetto di Python, mentre noi vogliamo visualizzare i dati in Excel. Dovrai quindi cliccare accanto a PY e selezionare Valore di Excel.

    COME_CREARE_CALENDARIO_PYTHON_EXCEL_MARCOFILOCAMO_VISUALIZZAZIONE_FINALE

    A questo punto, vedrai il nostro calendario con tutte le informazioni inserite in precedenza! Il risultato sarà un array che potrai utilizzare come preferisci - avendolo creato in C4, ti basterà fare =C4# per poi selezionare le singole parti che ti interessano e, se vuoi, caricarlo in Power Query.

    Alternativa per creare il calendario in Python in Excel

    Un approccio alternativo e più compatto per creare il calendario in Python in Excel potrebbe essere questo:

    import pandas as pd

    anno = int(xl("D2"))
    date = pd.date_range(start=f"{anno}-01-01", end=f"{anno}-12-31", freq="D")

    mesi_it = {
    1:"Gennaio", 2:"Febbraio", 3:"Marzo", 4:"Aprile", 5:"Maggio", 6:"Giugno",
    7:"Luglio", 8:"Agosto", 9:"Settembre", 10:"Ottobre", 11:"Novembre", 12:"Dicembre"
    }
    giorni_it = {
    0:"Lunedì", 1:"Martedì", 2:"Mercoledì", 3:"Giovedì",
    4:"Venerdì", 5:"Sabato", 6:"Domenica"
    }

    calendario = pd.DataFrame({"Data": date})

    # "Data" è una Series, si usa .dt
    calendario["Anno"] = calendario["Data"].dt.year
    calendario["Mese"] = calendario["Data"].dt.month
    calendario["Mese_Nome"] = calendario["Mese"].map(mesi_it)
    calendario["Giorno"] = calendario["Data"].dt.day
    calendario["Giorno_Settimana"] = calendario["Data"].dt.dayofweek.map(giorni_it)

    calendario

    In questo caso, le modifiche sono dalla seconda parte in poi, dove calendario viene creato come una serie - abbiamo quindi una colonna chiamata Data con tutte le nostre date create in precedenza.

    La differenza è per i calcoli successivi dove, come vedi, c'è già un riferimento del tipo NomeDataFrame["NomeColonna"] = NomeDataFrame["Data"].Calcolo. Questo succede perchè ora abbiamo già un DataFrame chiamato calendario e, da questo, prenderemo i singoli valori di data per poi lavorarci, similarmente a quanto abbiamo fatto prima. La dicitura dt ci permette di accedere agli attributi delle singole date e, in generale, il codice è più approfondito. In alcune sezioni, però, è decisamente più comprensibile:

    calendario["Mese_Nome"] = calendario["Mese"].map(mesi_it)

    Con map possiamo trasformare rapidamente i valori dei singoli mesi utilizzando la nostra mappatura precedente e, nel caso delle settimane, dt.day.ofweek.map ci indica che stiamo prendendo il giorno della settimana desiderato.

    In linea di massima i risultati sono equivalenti, ma è interessante vedere quali siano le alternative a nostra disposizione!

    Conclusione

    Abbiamo visto due modi diversi per creare un calendario in Excel utilizzando Python e pandas - non ti resta che fare qualche test e, se vuoi, scaricare il file!

    Lascia un commento

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

    Excel per Professionisti
    Panoramica privacy

    This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.