Hai la nuova app Outlook per Windows e il vecchio comando “Importa/Esporta” è sparito? In questa guida impari come convertire un foglio Excel/CSV in un file .ics iCalendar e importarlo correttamente, con istruzioni passo‑passo, modelli di colonne, script pronti e alternative via Outlook classico.
Perché non trovi più “File ▶ Apri/Esporta” nel nuovo Outlook
La nuova app Outlook per Windows adotta un’interfaccia moderna unificata con Outlook sul Web e semplifica molti pannelli. Tra le differenze più evidenti c’è l’assenza del percorso storico File ▶ Apri ed Esporta ▶ Importa/Esporta. Al suo posto, l’import degli eventi avviene dal calendario e accetta esclusivamente file .ics (iCalendar). Se provi a caricare un .csv generato da Excel, l’operazione fallisce perché il nuovo caricatore di calendario non supporta il formato CSV.
Cosa consente la nuova app Outlook
- Calendario ▶ Aggiungi calendario ▶ Carica da file.
- Nel riquadro di importazione compare la dicitura: “Importa eventi da un file .ICS”.
- Se selezioni un file .csv, l’upload non viene accettato e l’import fallisce.
Percorsi di soluzione
Di seguito i flussi consigliati a seconda dello scenario, con pro e contro.
| Scenario | Passaggi consigliati | Note utili |
|---|---|---|
| Convertire manualmente Excel ➜ ICS | 1) In Excel, salva il foglio come CSV (UTF‑8). 2) Usa un convertitore CSV→ICS (add‑in, servizio, script Python/VBA/PowerShell). 3) In Outlook nuovo: Aggiungi calendario ▶ Carica da file e carica il .ics risultante. | I convertitori mappano le colonne tipiche (Oggetto, Inizio, Fine, Luogo, Descrizione) nel formato iCalendar. |
| Usare Outlook classico / Outlook sul Web (UI precedente) | 1) Outlook desktop classico: File ▶ Apri ed Esporta ▶ Importa/Esporta. 2) Scegli Importa da un file ▶ Valori separati da virgola (Windows). 3) Mappa i campi del CSV al calendario. 4) Sincronizza: gli eventi appariranno anche nella nuova app. | Valido se hai ancora accesso al client classico o alla vecchia UI web. |
| Script automatizzati (PowerShell, VBA, Python) | Leggi il CSV, crea oggetti evento (Appointment) via API di Outlook o genera un file .ics da importare in blocco. | Ideale per flussi ripetitivi (es. orari corsi, turni, planning stagionali). |
Preparare i dati in Excel: struttura del CSV consigliata
Organizza il foglio con intestazioni chiare e coerenti. Una struttura tipica che copre la maggior parte dei casi:
| Colonna CSV | Obbligatoria | Esempio | Note |
|---|---|---|---|
| Subject | Sì | Riunione progetto Phoenix | Diventerà SUMMARY nell’ICS. |
| StartDate | Sì | 2025-10-01 | Formato ISO consigliato: YYYY-MM-DD. |
| StartTime | Sì (se non evento “tutto il giorno”) | 09:00 | Formato 24h HH:MM. |
| EndDate | Sì | 2025-10-01 | Per gli eventi “tutto il giorno”, fine = giorno successivo non incluso in ICS. |
| EndTime | Sì (se non all-day) | 10:30 | Durata minima consigliata: 15 minuti. |
| AllDay | No | TRUE / FALSE | Se TRUE, l’ICS userà DTSTART;VALUE=DATE e DTEND;VALUE=DATE. |
| Location | No | Sala Riunioni 2 / Teams | Diventa LOCATION nell’ICS. |
| Description | No | Ordine del giorno, link, note | Diventa DESCRIPTION; supporta testo lungo. |
| TimeZone | No (ma consigliata) | Europe/Rome | Evita slittamenti con l’ora legale; in alternativa convertirai in UTC. |
| ReminderMinutes | No | 15 | Genera un VALARM nell’ICS. |
| Recurrence | No | FREQ=WEEKLY;BYDAY=MO,WE;COUNT=10 | Regola RRULE iCalendar per eventi ricorrenti. |
| ExDates | No | 2025-10-15T09:00:00;2025-11-05T09:00:00 | Date/ore da escludere dalla ricorrenza (generano EXDATE). |
| Categories | No | Progetto,Urgente | Divide con virgola; non tutti i client leggono le categorie. |
| UID | No | facoltativo | Se assente, lo script genererà un UID univoco. |
Convertire CSV in ICS: tre metodi pratici
Metodo rapido con uno script Python
Questo script legge un CSV UTF‑8 con le colonne viste sopra e genera un file output.ics conforme a iCalendar. Per semplicità converte le ore in UTC (suffisso Z), così non serve includere un blocco VTIMEZONE. Se preferisci lavorare in un fuso specifico, vedi i commenti nel codice.
#!/usr/bin/env python3
csv2ics.py - Conversione CSV ▶ ICS (iCalendar)
CSV atteso: Subject,StartDate,StartTime,EndDate,EndTime,AllDay,Location,Description,TimeZone,ReminderMinutes,Recurrence,ExDates,Categories,UID
import csv, uuid, datetime, sys
from datetime import datetime, timezone
def ics_escape(s: str) -> str:
if s is None: return ""
return s.replace("\\", "\\\\").replace(";", "\\;").replace(",", "\\,").replace("\n", "\\n")
def fold(line: str, limit: int = 75) -> str:
# 75 ottetti; qui approssimiamo a 75 caratteri
if len(line) <= limit: return line
out = []
while len(line) > limit:
out.append(line[:limit])
line = " " + line[limit:]
out.append(line)
return "\r\n".join(out)
def fmtdt(dt: datetime, allday=False) -> str:
if all_day:
return dt.strftime("%Y%m%d")
# UTC con suffisso Z
return dt.astimezone(timezone.utc).strftime("%Y%m%dT%H%M%SZ")
def parsedt(datestr, time_str):
# date: YYYY-MM-DD, time: HH:MM
d = datetime.strptime(date_str.strip(), "%Y-%m-%d")
if not time_str:
return datetime(d.year, d.month, d.day, 0, 0, tzinfo=timezone.utc)
t = datetime.strptime(time_str.strip(), "%H:%M").time()
return datetime(d.year, d.month, d.day, t.hour, t.minute, tzinfo=timezone.utc)
input_csv = sys.argv[1] if len(sys.argv) > 1 else "input.csv"
output_ics = sys.argv[2] if len(sys.argv) > 2 else "output.ics"
rows = []
with open(input_csv, "r", encoding="utf-8-sig", newline="") as f:
reader = csv.DictReader(f)
rows = list(reader)
lines = []
lines.append("BEGIN:VCALENDAR")
lines.append("PRODID:-//CSV2ICS//IT//")
lines.append("VERSION:2.0")
lines.append("CALSCALE:GREGORIAN")
lines.append("METHOD:PUBLISH")
now = datetime.now(timezone.utc)
dtstamp = now.strftime("%Y%m%dT%H%M%SZ")
for r in rows:
subject = r.get("Subject","").strip() or "Senza titolo"
all_day = str(r.get("AllDay","")).strip().upper() in ("TRUE","SI","YES","1")
sd, st = r.get("StartDate",""), r.get("StartTime","")
ed, et = r.get("EndDate",""), r.get("EndTime","")
start = parse_dt(sd, st)
end = parse_dt(ed, et)
uid = (r.get("UID") or f"{uuid.uuid4()}@csv2ics").strip()
desc = r.get("Description","") or ""
loc = r.get("Location","") or ""
cat = r.get("Categories","") or ""
recur = (r.get("Recurrence") or "").strip()
exdates = (r.get("ExDates") or "").strip()
reminder = (r.get("ReminderMinutes") or "").strip()
lines.append("BEGIN:VEVENT")
lines.append(fold(f"UID:{ics_escape(uid)}"))
lines.append(f"DTSTAMP:{dtstamp}")
if all_day:
lines.append(f"DTSTART;VALUE=DATE:{fmtdt(start, allday=True)}")
lines.append(f"DTEND;VALUE=DATE:{fmtdt(end, allday=True)}")
else:
lines.append(f"DTSTART:{fmt_dt(start)}")
lines.append(f"DTEND:{fmt_dt(end)}")
lines.append(fold(f"SUMMARY:{ics_escape(subject)}"))
if loc:
lines.append(fold(f"LOCATION:{ics_escape(loc)}"))
if desc:
lines.append(fold(f"DESCRIPTION:{ics_escape(desc)}"))
if cat:
lines.append(f" CATEGORIES:{ics_escape(cat)}".lstrip())
if recur:
lines.append(f" RRULE:{recur}".lstrip())
if exdates:
# atteso elenco separato da ; in formato ISO completo
parts = [p.strip() for p in exdates.split(";") if p.strip()]
if parts:
# converti in UTC con formato ICS
ex = []
for p in parts:
try:
dt = datetime.fromisoformat(p)
ex.append(dt.astimezone(timezone.utc).strftime("%Y%m%dT%H%M%SZ"))
except Exception:
pass
if ex:
lines.append(f" EXDATE:{','.join(ex)}".lstrip())
if reminder:
try:
minutes = int(reminder)
lines.append("BEGIN:VALARM")
lines.append(f"TRIGGER:-PT{minutes}M")
lines.append("ACTION:DISPLAY")
lines.append("DESCRIPTION:Promemoria")
lines.append("END:VALARM")
except ValueError:
pass
lines.append("END:VEVENT")
lines.append("END:VCALENDAR")
with open(output_ics, "w", encoding="utf-8", newline="\r\n") as out:
out.write("\r\n".join(lines))
print(f"Creato: {output_ics}")
Consigli:
- Se lavori in un fuso specifico e vuoi evitare il suffisso Z, puoi rimuovere la conversione a UTC e aggiungere un blocco
VTIMEZONEnel calendario (vedi esempio più avanti). - Per i caratteri italiani (à, è, ò…), salva sempre in UTF‑8 e usa l’escape iCalendar (
\\, \; \, \n).
Metodo con PowerShell (Windows)
Script essenziale che legge un CSV e produce .ics con orari in UTC. Adatto a import ripetitivi su PC aziendali senza Python.
# csv2ics.ps1
Param(
[string]$CsvPath = "input.csv",
[string]$IcsPath = "output.ics"
)
function Escape-Ics([string]$s) {
$s = $s -replace '\\', '\\\\'
$s = $s -replace ';', '\;'
$s = $s -replace ',', '\,'
$s = $s -replace "`n", '\n'
return $s
}
function Fold-Ics([string]$line) {
$limit = 75
if ($line.Length -le $limit) { return $line }
$out = @()
while ($line.Length -gt $limit) {
$out += $line.Substring(0,$limit)
$line = " " + $line.Substring($limit)
}
$out += $line
return ($out -join "`r`n")
}
function To-IcsUtc([datetime]$dt) {
return $dt.ToUniversalTime().ToString("yyyyMMdd'T'HHmmss'Z'")
}
function To-IcsDate([datetime]$dt) {
return $dt.ToString("yyyyMMdd")
}
$rows = Import-Csv -Path $CsvPath
$nl = "`r`n"
$now = (Get-Date).ToUniversalTime().ToString("yyyyMMdd'T'HHmmss'Z'")
$ics = @("BEGIN:VCALENDAR","PRODID:-//CSV2ICS PS//IT//","VERSION:2.0","CALSCALE:GREGORIAN","METHOD:PUBLISH")
foreach($r in $rows){
$subject = if($r.Subject){$r.Subject}else{"Senza titolo"}
$allDay = ($r.AllDay -as [string]).ToUpper() -in "TRUE","SI","YES","1"
$sd = Get-Date ($r.StartDate + " " + ($r.StartTime ? $r.StartTime : "00:00"))
$ed = Get-Date ($r.EndDate + " " + ($r.EndTime ? $r.EndTime : "00:00"))
$uid = if($r.UID){$r.UID}else{[guid]::NewGuid().ToString() + "@csv2ics"}
$ics += "BEGIN:VEVENT"
$ics += "UID:$uid"
$ics += "DTSTAMP:$now"
if($allDay){
$ics += "DTSTART;VALUE=DATE:$(To-IcsDate $sd)"
$ics += "DTEND;VALUE=DATE:$(To-IcsDate $ed)"
} else {
$ics += "DTSTART:$(To-IcsUtc $sd)"
$ics += "DTEND:$(To-IcsUtc $ed)"
}
$ics += (Fold-Ics ("SUMMARY:" + (Escape-Ics $subject)))
if($r.Location){ $ics += (Fold-Ics ("LOCATION:" + (Escape-Ics $r.Location))) }
if($r.Description){ $ics += (Fold-Ics ("DESCRIPTION:" + (Escape-Ics $r.Description))) }
if($r.Categories){ $ics += "CATEGORIES:" + (Escape-Ics $r.Categories) }
if($r.Recurrence){ $ics += "RRULE:" + $r.Recurrence }
if($r.ReminderMinutes){
$mins = [int]$r.ReminderMinutes
if($mins -gt 0){
$ics += "BEGIN:VALARM"
$ics += "TRIGGER:-PT$($mins)M"
$ics += "ACTION:DISPLAY"
$ics += "DESCRIPTION:Promemoria"
$ics += "END:VALARM"
}
}
$ics += "END:VEVENT"
}
$ics += "END:VCALENDAR"
Set-Content -Path $IcsPath -Value ($ics -join $nl) -Encoding UTF8
Write-Host "Creato: $IcsPath"
Metodo con macro VBA in Excel
Per chi preferisce restare in Excel, questa macro esporta le righe selezionate in un file .ics. Adatta il mapping delle colonne al tuo foglio.
' Modulo: ExportCsvToIcs.bas
Option Explicit
Private Function IcsEscape(ByVal s As String) As String
s = Replace(s, "\", "\\")
s = Replace(s, ";", "\;")
s = Replace(s, ",", "\,")
s = Replace(s, vbCrLf, "\n")
s = Replace(s, vbLf, "\n")
IcsEscape = s
End Function
Private Function FoldLine(ByVal line As String) As String
Const LIM As Long = 75
Dim out As String, i As Long
out = ""
Do While Len(line) > LIM
out = out & Left$(line, LIM) & vbCrLf & " "
line = Mid$(line, LIM + 1)
Loop
FoldLine = out & line
End Function
Public Sub EsportaIntervalloInICS()
Dim rng As Range, r As Range
Dim f As Integer, path As String
Dim nowUtc As String: nowUtc = Format(Now, "yyyymmdd\Thhnnss\Z")
path = ThisWorkbook.Path & "\export.ics"
f = FreeFile
Open path For Output As #f
Print #f, "BEGIN:VCALENDAR"
Print #f, "PRODID:-//Excel VBA CSV2ICS//IT//"
Print #f, "VERSION:2.0"
Print #f, "CALSCALE:GREGORIAN"
Print #f, "METHOD:PUBLISH"
Set rng = Selection ' oppure imposta il range delle righe dati
For Each r In rng.Rows
Dim subj$, sd$, st$, ed$, et$, allday$
Dim loc$, desc$, cats$, uid$
subj = r.Columns(1).Value2 ' Subject
sd = r.Columns(2).Value2 ' StartDate (YYYY-MM-DD)
st = r.Columns(3).Value2 ' StartTime (HH:MM) o vuoto
ed = r.Columns(4).Value2 ' EndDate
et = r.Columns(5).Value2 ' EndTime
allday = r.Columns(6).Value2 ' TRUE/FALSE
loc = r.Columns(7).Value2
desc = r.Columns(8).Value2
cats = r.Columns(9).Value2
uid = r.Columns(10).Value2
If Len(uid) = 0 Then uid = CreateObject("Scriptlet.TypeLib").GUID & "@excel"
Print #f, "BEGIN:VEVENT"
Print #f, "UID:" & uid
Print #f, "DTSTAMP:" & nowUtc
If UCase(allday) = "TRUE" Or UCase(allday) = "SI" Then
Print #f, "DTSTART;VALUE=DATE:" & Replace(sd, "-", "")
Print #f, "DTEND;VALUE=DATE:" & Replace(ed, "-", "")
Else
' orari trattati come UTC per semplicità
Print #f, "DTSTART:" & Replace(sd, "-", "") & "T" & Replace(Left$(st,5), ":", "") & "00Z"
Print #f, "DTEND:" & Replace(ed, "-", "") & "T" & Replace(Left$(et,5), ":", "") & "00Z"
End If
If Len(subj) > 0 Then Print #f, FoldLine("SUMMARY:" & IcsEscape(subj))
If Len(loc) > 0 Then Print #f, FoldLine("LOCATION:" & IcsEscape(loc))
If Len(desc) > 0 Then Print #f, FoldLine("DESCRIPTION:" & IcsEscape(desc))
If Len(cats) > 0 Then Print #f, "CATEGORIES:" & IcsEscape(cats)
Print #f, "END:VEVENT"
Next r
Print #f, "END:VCALENDAR"
Close #f
MsgBox "Esportazione completata: " & path, vbInformation
End Sub
Importare il file .ics nel nuovo Outlook
- Apri Calendario nella nuova app Outlook per Windows.
- Seleziona Aggiungi calendario e poi Carica da file.
- Scegli il file
.icsgenerato, seleziona il calendario di destinazione e conferma.
Nota: l’import è additivo. Se importi più volte lo stesso .ics con UID diversi, potresti duplicare gli eventi. Mantieni gli UID stabili se prevedi riesportazioni o aggiornamenti.
Alternativa: import diretto del CSV con Outlook classico / interfaccia precedente
Se hai ancora il client desktop classico o l’interfaccia web precedente, puoi mappare e importare direttamente il CSV:
- Apri Outlook classico: File ▶ Apri ed Esporta ▶ Importa/Esporta.
- Scegli Importa da un file ▶ Valori separati da virgola (Windows).
- Seleziona il Calendario di destinazione.
- Usa la finestra di mappatura campi personalizzati per associare colonne (Subject, Start Date, Start Time, End Date, End Time, Location, Description…).
- Conferma e verifica la sincronizzazione: gli eventi appariranno anche nella nuova app Outlook.
Cos’è un file .ics (iCalendar) e perché Outlook lo preferisce
- iCalendar (.ics) è un formato testuale standard che descrive eventi, riunioni e ricorrenze (campi come
UID,DTSTART,DTEND,SUMMARY,LOCATION,DESCRIPTION). - È interoperabile e riconosciuto dalla quasi totalità dei client calendario (Outlook, Google, Apple).
- Permette di arrotondare l’import: un solo file può contenere decine o centinaia di eventi.
Mappatura CSV → ICS (riassunto)
| CSV | ICS | Osservazioni |
|---|---|---|
| Subject | SUMMARY | Campo titolo. |
| StartDate, StartTime | DTSTART | In UTC con suffisso Z oppure locale con TZID. |
| EndDate, EndTime | DTEND | Stessa logica di DTSTART. |
| AllDay | DTSTART;VALUE=DATE / DTEND;VALUE=DATE | Fine esclusiva (giorno successivo). |
| Location | LOCATION | Supporta indirizzi o “Sala A / Teams”. |
| Description | DESCRIPTION | Testo lungo; usare escape per ritorni a capo. |
| Categories | CATEGORIES | Alcuni client ignorano o rimappano le categorie. |
| ReminderMinutes | VALARM | Genera promemoria a X minuti. |
| Recurrence | RRULE + EXDATE | Ricorrenze e eccezioni. |
| UID | UID | Identificativo univoco dell’evento. |
Regole fondamentali del formato ICS
- Terminatori di riga: usa
\r\n(CRLF) tra le righe. - Lunghezza: le righe non dovrebbero superare 75 ottetti. Se più lunghe, “piega” la riga aggiungendo
\r\ne uno spazio all’inizio della riga successiva (line folding). - Escape: barra inversa
\, punto e virgola;, virgola,e newline vanno escape‑ati (\\,\;,\,,\n). - Fusi orari: scegli UTC (
...Z) oppure specificaTZID=Europe/Romee, per massima compatibilità, includi un bloccoVTIMEZONE.
Esempio di file ICS completo con fuso orario
Questo esempio usa il fuso Europe/Rome e include un promemoria e una ricorrenza settimanale.
BEGIN:VCALENDAR
PRODID:-//Esempio ICS//IT//
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:PUBLISH
X-WR-TIMEZONE:Europe/Rome
BEGIN:VTIMEZONE
TZID:Europe/Rome
X-LIC-LOCATION:Europe/Rome
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
TZNAME:CEST
DTSTART:19700329T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
TZNAME:CET
DTSTART:19701025T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
UID:123e4567-e89b-12d3-a456-426614174000@example
DTSTAMP:20251001T070000Z
DTSTART;TZID=Europe/Rome:20251001T090000
DTEND;TZID=Europe/Rome:20251001T103000
SUMMARY:Riunione progetto Phoenix
LOCATION:Sala Conferenze / Teams
DESCRIPTION:Ordine del giorno:\n1) Stato avanzamento\n2) Rischi e azioni\n3) Prossimi step
CATEGORIES:Progetto,Urgente
RRULE:FREQ=WEEKLY;BYDAY=WE;COUNT=6
BEGIN:VALARM
TRIGGER:-PT15M
ACTION:DISPLAY
DESCRIPTION:Promemoria
END:VALARM
END:VEVENT
END:VCALENDAR
Suggerimenti pratici extra
- Campi minimi: oggetto, data/ora inizio, data/ora fine (o durata). Per eventi “tutto il giorno” usa
VALUE=DATE. - Fusi orari: preferisci valori ISO (es.
2025-10-01T09:00:00) piùTZIDoppure converti tutto in UTC per evitare slittamenti, in particolare in presenza di ora legale. - Encoding: salva e apri in UTF‑8 per preservare gli accenti.
- Duplicati: mantieni stabili gli
UIDse rigeneri lo stesso set di eventi, altrimenti l’import creerà copie. - Ricorrenze complesse: usa
RRULE(es.FREQ=MONTHLY;BYDAY=MO;BYSETPOS=1per il primo lunedì del mese). Esclusioni conEXDATE. - Limiti attuali del nuovo Outlook: l’importazione diretta di CSV non è ancora integrata; Microsoft indica la funzione “in sviluppo”, quindi potrebbe arrivare in un aggiornamento futuro.
- Sicurezza: un .ics è testo leggibile; evita di includere dati sensibili nella
DESCRIPTIONse il file verrà condiviso.
Risoluzione problemi
Se l’import fallisce o gli orari non combaciano, prova questi controlli veloci.
- “File non supportato”: stai tentando di caricare un CSV. Converti in ICS e riprova.
- Orari sfasati di ±1h: verifica il fuso (
TZID) o usa UTC. Ricorda i cambi di ora legale. - Caratteri accentati corrotti: apri l’ICS con un editor, conferma UTF‑8, sostituisci eventuali caratteri strani.
- Eventi non visibili dopo l’import: hai selezionato il calendario giusto? Controlla il riquadro calendari e spunta quello su cui hai importato.
- Duplicati: se hai ricreato il file con
UIDdiversi, cancella i duplicati oppure rigenera l’ICS con UID stabili e usa l’aggiornamento. - Ricorrenze non corrette: valida la sintassi di
RRULE,BYDAY,COUNT/UNTIL, e assicurati che leEXDATEsiano in formato coerente (UTC o TZID corrispondente). - All‑day di due giorni: negli all‑day l’ICS usa fine esclusiva: per un evento del 5 ottobre imposta
DTSTART=20251005eDTEND=20251006.
Checklist operativa
- In Excel, pulisci i dati: niente celle unite, nessun testo fuori colonna, formati data/ora coerenti.
- Esporta in CSV (UTF‑8).
- Converti il CSV in ICS (script o tool).
- Apri Outlook nuovo: Calendario ▶ Aggiungi calendario ▶ Carica da file.
- Seleziona il calendario corretto di destinazione.
- Verifica alcuni eventi campione (titolo, orario, descrizione, fuso, ricorrenze).
- Conserva l’ICS e il CSV sorgente per eventuali aggiornamenti o reimport.
Sintesi rapida
Nel “nuovo” Outlook non esiste più il percorso File ▶ Importa/Esporta. L’import avviene da Calendario ▶ Aggiungi calendario ▶ Carica da file e accetta esclusivamente .ics. Perciò: converti il tuo CSV in ICS (con tool, add‑in o script) oppure, se disponibile, usa temporaneamente Outlook classico o la vecchia UI web per importare direttamente il CSV e lascia che la sincronizzazione porti gli eventi nella nuova app.
Aggiornamento editoriale: ottobre 2025. Le funzionalità descritte possono evolvere: verifica sempre le indicazioni mostrate dall’app nel riquadro “Carica da file”. Se in futuro comparirà anche “CSV”, potrai importare direttamente senza conversioni.
