Importare eventi da Excel/CSV in Outlook (nuova interfaccia): convertire in ICS e caricare il calendario

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.

Indice

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

  1. Calendario ▶ Aggiungi calendario ▶ Carica da file.
  2. Nel riquadro di importazione compare la dicitura: “Importa eventi da un file .ICS”.
  3. 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.

ScenarioPassaggi consigliatiNote utili
Convertire manualmente Excel ➜ ICS1) 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 CSVObbligatoriaEsempioNote
SubjectRiunione progetto PhoenixDiventerà SUMMARY nell’ICS.
StartDate2025-10-01Formato ISO consigliato: YYYY-MM-DD.
StartTimeSì (se non evento “tutto il giorno”)09:00Formato 24h HH:MM.
EndDate2025-10-01Per gli eventi “tutto il giorno”, fine = giorno successivo non incluso in ICS.
EndTimeSì (se non all-day)10:30Durata minima consigliata: 15 minuti.
AllDayNoTRUE / FALSESe TRUE, l’ICS userà DTSTART;VALUE=DATE e DTEND;VALUE=DATE.
LocationNoSala Riunioni 2 / TeamsDiventa LOCATION nell’ICS.
DescriptionNoOrdine del giorno, link, noteDiventa DESCRIPTION; supporta testo lungo.
TimeZoneNo (ma consigliata)Europe/RomeEvita slittamenti con l’ora legale; in alternativa convertirai in UTC.
ReminderMinutesNo15Genera un VALARM nell’ICS.
RecurrenceNoFREQ=WEEKLY;BYDAY=MO,WE;COUNT=10Regola RRULE iCalendar per eventi ricorrenti.
ExDatesNo2025-10-15T09:00:00;2025-11-05T09:00:00Date/ore da escludere dalla ricorrenza (generano EXDATE).
CategoriesNoProgetto,UrgenteDivide con virgola; non tutti i client leggono le categorie.
UIDNofacoltativoSe 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 VTIMEZONE nel 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

  1. Apri Calendario nella nuova app Outlook per Windows.
  2. Seleziona Aggiungi calendario e poi Carica da file.
  3. Scegli il file .ics generato, 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:

  1. Apri Outlook classico: File ▶ Apri ed Esporta ▶ Importa/Esporta.
  2. Scegli Importa da un file ▶ Valori separati da virgola (Windows).
  3. Seleziona il Calendario di destinazione.
  4. Usa la finestra di mappatura campi personalizzati per associare colonne (Subject, Start Date, Start Time, End Date, End Time, Location, Description…).
  5. 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)

CSVICSOsservazioni
SubjectSUMMARYCampo titolo.
StartDate, StartTimeDTSTARTIn UTC con suffisso Z oppure locale con TZID.
EndDate, EndTimeDTENDStessa logica di DTSTART.
AllDayDTSTART;VALUE=DATE / DTEND;VALUE=DATEFine esclusiva (giorno successivo).
LocationLOCATIONSupporta indirizzi o “Sala A / Teams”.
DescriptionDESCRIPTIONTesto lungo; usare escape per ritorni a capo.
CategoriesCATEGORIESAlcuni client ignorano o rimappano le categorie.
ReminderMinutesVALARMGenera promemoria a X minuti.
RecurrenceRRULE + EXDATERicorrenze e eccezioni.
UIDUIDIdentificativo 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\n e 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 specifica TZID=Europe/Rome e, per massima compatibilità, includi un blocco VTIMEZONE.

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ù TZID oppure 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 UID se rigeneri lo stesso set di eventi, altrimenti l’import creerà copie.
  • Ricorrenze complesse: usa RRULE (es. FREQ=MONTHLY;BYDAY=MO;BYSETPOS=1 per il primo lunedì del mese). Esclusioni con EXDATE.
  • 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 DESCRIPTION se 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 UID diversi, 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 le EXDATE siano 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=20251005 e DTEND=20251006.

Checklist operativa

  1. In Excel, pulisci i dati: niente celle unite, nessun testo fuori colonna, formati data/ora coerenti.
  2. Esporta in CSV (UTF‑8).
  3. Converti il CSV in ICS (script o tool).
  4. Apri Outlook nuovo: Calendario ▶ Aggiungi calendario ▶ Carica da file.
  5. Seleziona il calendario corretto di destinazione.
  6. Verifica alcuni eventi campione (titolo, orario, descrizione, fuso, ricorrenze).
  7. 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.

Indice