LIVE
7-Zip nel 2026: perché è ancora il miglior programma per archiviare file Excel per ufficio: la guida per principianti dal foglio bianco all’autonomia TSMC sub-1nm: la roadmap verso il nodo A10 e i chip del 2030 WhatsApp Plus: prezzo, funzioni e come attivare l’abbonamento 2026 Come leggere un file Excel con Python e openpyxl NAMCO: la storia dei giochi che hanno rubato le monetine e il cuore a una generazione Guida Notepad++ RustDesk: guida completa al desktop remoto open source (e come farlo girare in self hosting) 7-Zip nel 2026: perché è ancora il miglior programma per archiviare file Excel per ufficio: la guida per principianti dal foglio bianco all’autonomia TSMC sub-1nm: la roadmap verso il nodo A10 e i chip del 2030 WhatsApp Plus: prezzo, funzioni e come attivare l’abbonamento 2026 Come leggere un file Excel con Python e openpyxl NAMCO: la storia dei giochi che hanno rubato le monetine e il cuore a una generazione Guida Notepad++ RustDesk: guida completa al desktop remoto open source (e come farlo girare in self hosting)
Home › Guide › Come leggere un file Excel con…
Guide

Come leggere un file Excel con Python e openpyxl

Pubblicità
Pubblicità

Aprire un file Excel con Python è una delle automazioni più richieste in ufficio. Con openpyxl e pandas puoi leggere, modificare e creare file Excel senza aprire Microsoft Office — ideale per report automatici, elaborazione dati in batch e integrazione con altri sistemi. Questa guida ti mostra tutto da zero.

Installazione: pip install openpyxl pandas — entrambe le librerie in un solo comando.

openpyxl vs pandas — quale usare

LibreriaMeglio perLimitazioni
openpyxlLeggere/scrivere celle, formattazione, grafici, formulePiù lenta su file grandi
pandasAnalisi dati, filtri, aggregazioni, file grandiNon gestisce formattazione avanzata

Regola pratica: usa pandas per leggere e analizzare dati, openpyxl per modificare formattazione e scrivere con stile.

Lettura base con pandas — il modo più veloce

import pandas as pd # Leggi il primo foglio df = pd.read_excel(“dati.xlsx”) print(df.head()) # Mostra le prime 5 righe print(df.shape) # (righe, colonne) print(df.columns.tolist()) # Lista dei nomi colonne # Leggi un foglio specifico per nome df = pd.read_excel(“dati.xlsx”, sheet_name=”Vendite”) # Leggi tutti i fogli in un dizionario fogli = pd.read_excel(“dati.xlsx”, sheet_name=None) for nome, df in fogli.items(): print(f”Foglio ‘{nome}’: {len(df)} righe”)

Operazioni comuni sui dati Excel

import pandas as pd df = pd.read_excel(“vendite.xlsx”) # Filtrare righe df_nord = df[df[‘Regione’] == ‘Nord’] df_alto = df[df[‘Importo’] > 10000] # Filtrare con più condizioni df_filtro = df[(df[‘Regione’] == ‘Nord’) & (df[‘Mese’] == ‘Gennaio’)] # Somme e statistiche print(df[‘Importo’].sum()) # Totale print(df[‘Importo’].mean()) # Media print(df[‘Importo’].max()) # Massimo print(df.groupby(‘Regione’)[‘Importo’].sum()) # Totale per regione # Ordinare df_ordinato = df.sort_values(‘Importo’, ascending=False) # Aggiungere una colonna calcolata df[‘IVA’] = df[‘Importo’] * 0.22 df[‘Totale’] = df[‘Importo’] + df[‘IVA’]

Scrivere/modificare Excel con openpyxl

from openpyxl import load_workbook from openpyxl.styles import Font, PatternFill, Alignment from openpyxl.utils import get_column_letter # Apri file esistente wb = load_workbook(“report.xlsx”) ws = wb.active # Leggi una cella specifica valore = ws[‘B2’].value valore = ws.cell(row=2, column=2).value # Scrivi in una cella ws[‘A1’] = “Titolo Report” ws.cell(row=1, column=1).value = “Titolo Report” # Formattazione ws[‘A1’].font = Font(bold=True, size=14, color=”FFFFFF”) ws[‘A1’].fill = PatternFill(fill_type=”solid”, fgColor=”0066CC”) ws[‘A1’].alignment = Alignment(horizontal=”center”) # Larghezza colonna automatica for col in ws.columns: max_len = max(len(str(cell.value or “”)) for cell in col) ws.column_dimensions[get_column_letter(col[0].column)].width = max_len + 4 wb.save(“report_modificato.xlsx”)

Caso d’uso completo — Report automatico da dati

import pandas as pd from openpyxl import Workbook from openpyxl.styles import Font, PatternFill, Alignment from openpyxl.utils import get_column_letter from datetime import date def crea_report(dati_path, output_path): # Leggi dati df = pd.read_excel(dati_path) # Elabora totale_per_regione = df.groupby(‘Regione’)[‘Vendite’].sum().reset_index() totale_per_regione = totale_per_regione.sort_values(‘Vendite’, ascending=False) # Crea nuovo workbook wb = Workbook() ws = wb.active ws.title = “Report Vendite” # Intestazione ws[‘A1’] = f”Report Vendite — {date.today().strftime(‘%d/%m/%Y’)}” ws[‘A1’].font = Font(bold=True, size=16) ws.merge_cells(‘A1:C1’) # Header tabella (riga 3) headers = [‘Regione’, ‘Vendite Totali’, ‘% sul totale’] for i, h in enumerate(headers, 1): cell = ws.cell(row=3, column=i, value=h) cell.font = Font(bold=True, color=”FFFFFF”) cell.fill = PatternFill(fill_type=”solid”, fgColor=”0F1923″) cell.alignment = Alignment(horizontal=”center”) # Dati totale = totale_per_regione[‘Vendite’].sum() for idx, row in totale_per_regione.iterrows(): r = idx + 4 ws.cell(row=r, column=1).value = row[‘Regione’] ws.cell(row=r, column=2).value = row[‘Vendite’] ws.cell(row=r, column=2).number_format = ‘€ #,##0.00’ ws.cell(row=r, column=3).value = round(row[‘Vendite’] / totale * 100, 1) ws.cell(row=r, column=3).number_format = ‘0.0%’ # Larghezza automatica colonne for col in ws.columns: max_len = max(len(str(c.value or “”)) for c in col) ws.column_dimensions[get_column_letter(col[0].column)].width = max_len + 4 wb.save(output_path) print(f”Report salvato in: {output_path}”) crea_report(“vendite.xlsx”, “report_finale.xlsx”)

Gestire file Excel grandi — modalità read_only

from openpyxl import load_workbook # Modalità read_only — molto più veloce su file grandi wb = load_workbook(“file_grande.xlsx”, read_only=True) ws = wb.active for row in ws.iter_rows(min_row=2, values_only=True): # Processa ogni riga senza caricare tutto in memoria codice, nome, importo = row[0], row[1], row[2] if importo and importo > 10000: print(f”{nome}: €{importo:,.2f}”) wb.close()

Errori comuni e soluzioni

FileNotFoundError
Il file non esiste nel percorso indicato. Usa os.path.abspath("file.xlsx") per vedere il percorso completo.

openpyxl.utils.exceptions.InvalidFileException
Stai cercando di aprire un file .xls (vecchio formato) con openpyxl. Usa pd.read_excel("file.xls", engine="xlrd") invece.

PermissionError
Il file è aperto in Excel. Chiudi Excel prima di eseguire lo script Python.

Conclusione

Con pandas e openpyxl puoi automatizzare qualsiasi operazione su file Excel: lettura, filtro, aggregazione, formattazione e scrittura. Il caso d’uso più comune in ufficio è il report automatico: leggi i dati, elaborali con pandas, scrivi un Excel formattato con openpyxl e invialo via email con smtplib — tutto automaticamente ogni mattina.

SCRITTO DA Nicodemo Bonofiglio
Ingegnere Informatico con oltre 20 anni di esperienza in ambito ERP, banking e PA. Analista funzionale, appassionato di AI e sviluppo web. Fondatore di TuttoAlQuadrato guide IT pratiche in italiano.
← Come usare le tabelle pivot in Excel… Web scraping con Python e BeautifulSoup –… →

Lascia un commento