openpyxl: automatizza le attività di Excel con Python
Scopri come leggere, scrivere e formattare file Excel con openpyxl. Trova esempi pratici per lavorare con i formati Excel moderni (.xlsx) e funzioni avanzate.
openpyxl è una libreria Python efficiente che ti permette di leggere e scrivere file Excel nei formati moderni basati su XML (.xlsx, .xlsm) introdotti con Excel 2007, con pieno supporto per le funzionalità avanzate a partire da Excel 2010. È nata come porting in Python di PHPExcel e continua a essere mantenuta da una community attiva di sviluppatori. La libreria è eccellente per l’automazione dei dati, la creazione di report e i flussi di formattazione, ed è particolarmente utile per chi deve lavorare con file Excel senza avere Excel installato sul proprio sistema.
Molte organizzazioni usano openpyxl per automatizzare report finanziari, generare grafici da esportazioni di database e applicare formule e formattazioni a report di marketing. Questa libreria offre un controllo granulare sui file Excel interamente tramite codice Python.
Che cos’è openpyxl?
openpyxl è progettata specificamente per fornire supporto nativo ai formati di Excel 2010 e successivi. La libreria lavora con diversi formati di file:
.xlsx - Cartella di lavoro Excel
.xlsm - Cartella di lavoro Excel con macro
.xltx - Modello Excel
.xltm - Modello Excel con macro
Un grande vantaggio di openpyxl è che non richiede l’installazione di Excel sul computer. Questo la rende ideale per ambienti server, sistemi di reporting automatizzati e pipeline di elaborazione dati. Diverse altre librerie Python, inclusa pandas, usano openpyxl come interfaccia per Excel, a testimonianza della sua affidabilità e funzionalità.
Per usare openpyxl negli script Python, importa le classi necessarie:
from openpyxl import Workbook, load_workbookOfferto da
Concetti chiave e terminologia
Per usare openpyxl in modo efficace, è utile comprendere la struttura di base di Excel:
Workbook: Il file Excel vero e proprio, che contiene uno o più fogli di lavoro
Worksheet: Le singole schede/fogli all’interno di una cartella di lavoro
Cell: Punti dati individuali in un foglio di lavoro, identificati da lettera di colonna e numero di riga (es. "A1")
Row: Riga orizzontale di celle, identificata da numeri (1, 2, 3...)
Column: Colonna verticale di celle, identificata da lettere (A, B, C...)
In openpyxl puoi fare riferimento alle celle usando:
Riferimenti in stile Excel: sheet[“A1”]
Indicizzazione riga-colonna: sheet.cell(row=1, column=1) (Nota: openpyxl usa indicizzazione a base 1, non a base 0)
Lettura di file Excel con openpyxl
Ecco un esempio pratico che mostra come leggere dati da un file Excel:
Carica ed esplora una cartella di lavoro
from openpyxl import load_workbook
# Load the workbook - use read_only=True for large files
wb = load_workbook('sample.xlsx', read_only=False, data_only=False)# data_only=True reads values instead of formulasOfferto da
I parametri opzionali controllano come viene caricata la cartella di lavoro:
read_only=True migliora le prestazioni per file di grandi dimensioni ma limita le possibilità di modifica
data_only=True restituisce i valori calcolati invece delle formule
Iterare tra i dati
Per elaborare più celle in modo efficiente, usa i metodi di iterazione:
# Iterate through rowsfor row in sheet.iter_rows(min_row=1, max_row=5, values_only=True):print(row)# Returns a tuple of values# Iterate through columnsfor column in sheet.iter_cols(min_col=1, max_col=3, values_only=True):print(column)# Returns a tuple of values# Access a range of cells
cell_range = sheet["A1:C5"]for row in cell_range:for cell in row:print(cell.value)Offerto da
Convertire in strutture dati Python
Puoi trasformare facilmente i dati di Excel in strutture dati Python:
# Convert worksheet data to a list of dictionariesdefsheet_to_dict(sheet):
data =[]
headers =[cell.value for cell in sheet[1]]# First row as headersfor row in sheet.iter_rows(min_row=2, values_only=True):
row_data ={}for key, value inzip(headers, row):
row_data[key]= value
data.append(row_data)return data
# Example usage
data_dict = sheet_to_dict(sheet)print(data_dict)Offerto da
Scrittura di file Excel con openpyxl
Creare e modificare file Excel è altrettanto semplice con openpyxl.
Crea una cartella di lavoro e scrivi dati di base
from openpyxl import Workbook
# Create a new workbook
wb = Workbook()
sheet = wb.active
# Rename the sheet
sheet.title ="Data"# Write values to cells
sheet["A1"]="Name"
sheet["B1"]="Age"
sheet["C1"]="City"# Add data
data =[["Alice",25,"New York"],["Bob",30,"San Francisco"],["Charlie",35,"Chicago"]]for row_idx, row_data inenumerate(data, start=2):for col_idx, cell_value inenumerate(row_data, start=1):
sheet.cell(row=row_idx, column=col_idx, value=cell_value)# Save the workbook
wb.save("new_workbook.xlsx")Offerto da
Modificare file Excel esistenti
from openpyxl import load_workbook
# Load an existing workbook
wb = load_workbook("existing_file.xlsx")
sheet = wb.active
# Modify cell values
sheet["D1"]="Updated Data"
sheet.cell(row=5, column=2).value =42# Save to a new file (to preserve the original)
wb.save("modified_file.xlsx")Offerto da
Aggiungere dati in modo dinamico
Il metodo .append() rende semplice aggiungere nuove righe:
from openpyxl import Workbook
wb = Workbook()
sheet = wb.active
# Add headers
sheet.append(["Date","Product","Quantity","Price"])# Add multiple rows of data
sales_data =[["2025-04-01","Laptop",5,1200],["2025-04-01","Mouse",10,25],["2025-04-02","Monitor",3,350]]for row in sales_data:
sheet.append(row)
wb.save("sales_report.xlsx")Offerto da
Formattazione e stile in Excel
openpyxl offre ampie opzioni per la formattazione e lo stile delle celle.
Aggiungere font, bordi e allineamenti
from openpyxl import Workbook
from openpyxl.styles import Font, Alignment, Border, Side, PatternFill, NamedStyle
wb = Workbook()
sheet = wb.active
# Create a header style
header_style = NamedStyle(name="header_style")
header_style.font = Font(bold=True, size=12, color="FFFFFF")
header_style.fill = PatternFill(fill_type="solid", start_color="366092")
header_style.alignment = Alignment(horizontal="center", vertical="center")
header_style.border = Border(
bottom=Side(border_style="medium", color="000000"),
left=Side(border_style="thin"),
right=Side(border_style="thin"),
top=Side(border_style="thin"))# Add the style to the workbook
wb.add_named_style(header_style)# Apply the style to header row
headers =["ID","Product","Category","Price"]for col_idx, header inenumerate(headers, start=1):
cell = sheet.cell(row=1, column=col_idx, value=header)
cell.style ="header_style"# Basic styling without named styles
sheet["A2"].font = Font(bold=True, italic=True)
sheet["A3"].alignment = Alignment(horizontal="center")
sheet["A4"].border = Border(bottom=Side(border_style="thin"))
wb.save("styled_workbook.xlsx")Offerto da
Formattazione condizionale
La formattazione condizionale consente di applicare stili in base ai valori delle celle:
from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill
from openpyxl.styles.differential import DifferentialStyle
from openpyxl.formatting.rule import Rule, ColorScaleRule
wb = Workbook()
sheet = wb.active
# Add sample datafor row inrange(1,11):for col inrange(1,5):
sheet.cell(row=row, column=col, value=(row-1)*4+ col)# Add color scale (green to red gradient)
color_scale = ColorScaleRule(
start_type="min", start_color="63BE7B",# Green
mid_type="percentile", mid_value=50, mid_color="FFEB84",# Yellow
end_type="max", end_color="F8696B"# Red)
sheet.conditional_formatting.add("A1:D10", color_scale)# Add a rule for values less than 5
red_text = Font(color="FF0000")
red_fill = PatternFill(start_color="FFCCCC", end_color="FFCCCC", fill_type="solid")
dxf = DifferentialStyle(font=red_text, fill=red_fill)
rule = Rule(type="cellIs", operator="lessThan", formula=["5"], dxf=dxf)
sheet.conditional_formatting.add("A1:D10", rule)
wb.save("conditional_format.xlsx")Offerto da
Funzionalità avanzate
openpyxl supporta molte funzionalità avanzate di Excel che aiutano nelle attività complesse sui fogli di calcolo.
Nota: quando usi load_workbook(), le formule non vengono calcolate automaticamente da openpyxl. Per vedere i valori calcolati, usa load_workbook(“file.xlsx”, data_only=True).
Inserire grafici
openpyxl può creare vari tipi di grafici:
from openpyxl import Workbook
from openpyxl.chart import BarChart, LineChart, Reference
wb = Workbook()
sheet = wb.active
# Add data
months =["Jan","Feb","Mar","Apr","May"]
values =[30,45,37,50,62]for i,(month, value)inenumerate(zip(months, values), start=1):
sheet.cell(row=i, column=1, value=month)
sheet.cell(row=i, column=2, value=value)# Create a bar chart
bar_chart = BarChart()
bar_chart.title ="Monthly Sales"
bar_chart.x_axis.title ="Month"
bar_chart.y_axis.title ="Sales"# Define the data range
data = Reference(sheet, min_col=2, min_row=1, max_row=5)
categories = Reference(sheet, min_col=1, min_row=1, max_row=5)# Add the data to the chart
bar_chart.add_data(data)
bar_chart.set_categories(categories)# Add the chart to the worksheet
sheet.add_chart(bar_chart,"D1")# Create a line chart on the same data
line_chart = LineChart()
line_chart.title ="Monthly Sales Trend"
line_chart.add_data(data)
line_chart.set_categories(categories)
sheet.add_chart(line_chart,"D15")
wb.save("charts.xlsx")Offerto da
Inserire immagini
from openpyxl import Workbook
from openpyxl.drawing.image import Image
wb = Workbook()
sheet = wb.active
# Add an image
img = Image("logo.png")# Resize the image (optional)
img.width =150
img.height =75# Add the image to cell A1
sheet.add_image(img,"A1")
wb.save("with_image.xlsx")Offerto da
Nota: per lavorare con le immagini devi avere installata la libreria Pillow: pip install pillow
Gestione di fogli, righe e colonne
openpyxl fornisce funzioni per gestire la struttura dei tuoi file Excel:
Creare e rimuovere fogli
from openpyxl import Workbook
wb = Workbook()# Create new sheets
wb.create_sheet("Data")
wb.create_sheet("Summary",0)# Add at the beginning# Remove a sheet
wb.remove(wb["Sheet"])# Remove the default sheetprint(wb.sheetnames)# ['Summary', 'Data']
wb.save("multiple_sheets.xlsx")Offerto da
from openpyxl import Workbook
wb = Workbook()
source = wb.active
source.title ="Original"# Add some data to copy
source["A1"]="Test Data"# Create a copy
wb.copy_worksheet(source)# The copied sheet will have "Copy of Original" name
wb.save("copied_sheet.xlsx")Offerto da
Inserire ed eliminare righe e colonne
from openpyxl import Workbook
wb = Workbook()
sheet = wb.active
# Add some datafor i inrange(1,6):for j inrange(1,4):
sheet.cell(row=i, column=j, value=f"R{i}C{j}")# Insert a row at position 2
sheet.insert_rows(2)# Insert multiple rows
sheet.insert_rows(5,3)# Insert 3 rows at position 5# Insert a column at position 2
sheet.insert_cols(2)# Delete rows
sheet.delete_rows(7,2)# Delete 2 rows starting at row 7# Delete columns
sheet.delete_cols(3)# Delete column C
wb.save("modified_structure.xlsx")Offerto da
Bloccare riquadri e aggiungere filtri
from openpyxl import Workbook
wb = Workbook()
sheet = wb.active
# Add headers
headers =["ID","Name","Department","Salary"]for col_idx, header inenumerate(headers, start=1):
sheet.cell(row=1, column=col_idx, value=header)# Add data
data =[[1,"John Smith","HR",55000],[2,"Jane Doe","IT",65000],[3,"Bob Johnson","Finance",60000]]for row_idx, row_data inenumerate(data, start=2):for col_idx, value inenumerate(row_data, start=1):
sheet.cell(row=row_idx, column=col_idx, value=value)# Freeze the header row
sheet.freeze_panes ="A2"# Add autofilter
sheet.auto_filter.ref ="A1:D4"
wb.save("freeze_and_filter.xlsx")Offerto da
Limitazioni e feedback della community
Sebbene openpyxl sia ricca di funzionalità, gli utenti hanno segnalato alcune limitazioni:
Supporto limitato per gli intervalli denominati
Gli esempi nella documentazione possono essere scarsi per le funzioni avanzate
Le prestazioni possono essere lente con file molto grandi (anche se la modalità sola lettura aiuta)
Nonostante queste limitazioni, openpyxl ha un forte supporto dalla community. I problemi possono essere segnalati sul tracker di GitLab e talvolta è disponibile supporto professionale. Per ulteriori informazioni e assistenza, puoi consultare:
openpyxl è una libreria consolidata per l’automazione di Excel con Python che offre supporto completo per lettura, scrittura e formattazione dei file Excel. Consente un controllo dettagliato sull’output dei fogli di calcolo nei flussi di lavoro automatizzati, dalla manipolazione delle singole celle alla creazione di grafici e all’applicazione di formattazioni complesse.
Per chi deve generare o analizzare file Excel in modo programmatico, in particolare per creare report o elaborare dati tabellari, openpyxl offre un set di strumenti completo. La possibilità di funzionare senza richiedere l’installazione di Excel la rende particolarmente preziosa per ambienti server e pipeline di dati automatizzate.
Che tu stia creando modelli finanziari, analizzando dati o generando report, openpyxl ti dà gli strumenti per gestire i file Excel in modo efficiente tramite codice Python.
Vinod Chugani ha iniziato la sua carriera a Tokyo come il più giovane Head dell'Hedge Fund Sales Desk di JPMorgan e in seguito ha stabilito un record personale di vendite a Lehman Brothers, poi ha costruito un'attività di distribuzione di elettronica in 30 paesi superando i 100 milioni di SG$ di fatturato prima di passare ai dati. Laureato in Economia alla Duke e diplomato alla NYC Data Science Academy, è stato uno dei tre beneficiari di borsa di studio su oltre 100 candidati per il corso Building AI Applications di Hugo Bowne-Anderson su Maven. Oggi scrive per DataCamp, KDnuggets, Machine Learning Mastery e Statology su argomenti che vanno dalla statistica all'AI agentica, e fa da mentor a professionisti dei dati alla NYC Data Science Academy con oltre 1.000 sessioni one-to-one all'attivo.
FAQ su openpyxl
Quali tipi di file supporta openpyxl?⌄
openpyxl supporta diversi formati di Excel, tra cui .xlsx, .xlsm, .xltx e xltm. Non supporta il vecchio formato .xls usato da Excel 2003 e precedenti.
openpyxl può leggere e valutare le formule di Excel?⌄
openpyxl può leggere e scrivere formule, ma non le valuta. Per vedere i risultati delle formule, il file deve prima essere aperto e salvato in Excel.
Devo avere Microsoft Excel installato per usare openpyxl?⌄
No, openpyxl funziona interamente in Python e non richiede che Excel sia installato sul tuo computer.
Posso inserire immagini in Excel con openpyxl?⌄
Sì, ma devi avere installata la libreria Pillow e il file immagine deve esistere sul disco quando chiami add_image().
openpyxl è adatto a file Excel di grandi dimensioni?⌄
Sì, soprattutto usando la modalità read_only=True, che migliora le prestazioni in lettura su fogli di calcolo di grandi dimensioni.
Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Impara Python per lo sviluppo di software, dalla scrittura di funzioni alla definizione di classi. Acquisisci le competenze necessarie per dare il via alla tua carriera di sviluppatore!
openpyxl è una libreria Python efficiente che ti permette di leggere e scrivere file Excel nei formati moderni basati su XML (.xlsx, .xlsm) introdotti con Excel 2007, con pieno supporto per le funzionalità avanzate a partire da Excel 2010. È nata come porting in Python di PHPExcel e continua a essere mantenuta da una community attiva di sviluppatori. La libreria è eccellente per l’automazione dei dati, la creazione di report e i flussi di formattazione, ed è particolarmente utile per chi deve lavorare con file Excel senza avere Excel installato sul proprio sistema.
Molte organizzazioni usano openpyxl per automatizzare report finanziari, generare grafici da esportazioni di database e applicare formule e formattazioni a report di marketing. Questa libreria offre un controllo granulare sui file Excel interamente tramite codice Python.
Che cos’è openpyxl?
openpyxl è progettata specificamente per fornire supporto nativo ai formati di Excel 2010 e successivi. La libreria lavora con diversi formati di file:
.xlsx- Cartella di lavoro Excel.xlsm- Cartella di lavoro Excel con macro.xltx- Modello Excel.xltm- Modello Excel con macroUn grande vantaggio di openpyxl è che non richiede l’installazione di Excel sul computer. Questo la rende ideale per ambienti server, sistemi di reporting automatizzati e pipeline di elaborazione dati. Diverse altre librerie Python, inclusa pandas, usano openpyxl come interfaccia per Excel, a testimonianza della sua affidabilità e funzionalità.
Installare e importare openpyxl
L’installazione di openpyxl è semplice con pip:
Per una maggiore sicurezza quando lavori con file provenienti da fonti non attendibili, puoi anche installare il pacchetto opzionale
defusedxml:Per usare openpyxl negli script Python, importa le classi necessarie:
Concetti chiave e terminologia
Per usare openpyxl in modo efficace, è utile comprendere la struttura di base di Excel:
In openpyxl puoi fare riferimento alle celle usando:
Riferimenti in stile Excel:
sheet[“A1”]Indicizzazione riga-colonna:
sheet.cell(row=1, column=1)(Nota: openpyxl usa indicizzazione a base 1, non a base 0)Lettura di file Excel con openpyxl
Ecco un esempio pratico che mostra come leggere dati da un file Excel:
Carica ed esplora una cartella di lavoro
I parametri opzionali controllano come viene caricata la cartella di lavoro:
read_only=Truemigliora le prestazioni per file di grandi dimensioni ma limita le possibilità di modificadata_only=Truerestituisce i valori calcolati invece delle formuleIterare tra i dati
Per elaborare più celle in modo efficiente, usa i metodi di iterazione:
Convertire in strutture dati Python
Puoi trasformare facilmente i dati di Excel in strutture dati Python:
Scrittura di file Excel con openpyxl
Creare e modificare file Excel è altrettanto semplice con openpyxl.
Crea una cartella di lavoro e scrivi dati di base
Modificare file Excel esistenti
Aggiungere dati in modo dinamico
Il metodo
.append()rende semplice aggiungere nuove righe:Formattazione e stile in Excel
openpyxl offre ampie opzioni per la formattazione e lo stile delle celle.
Aggiungere font, bordi e allineamenti
Formattazione condizionale
La formattazione condizionale consente di applicare stili in base ai valori delle celle:
Funzionalità avanzate
openpyxl supporta molte funzionalità avanzate di Excel che aiutano nelle attività complesse sui fogli di calcolo.
Aggiungere formule
Nota: quando usi
load_workbook(), le formule non vengono calcolate automaticamente da openpyxl. Per vedere i valori calcolati, usaload_workbook(“file.xlsx”, data_only=True).Inserire grafici
openpyxl può creare vari tipi di grafici:
Inserire immagini
Nota: per lavorare con le immagini devi avere installata la libreria Pillow:
pip install pillowGestione di fogli, righe e colonne
openpyxl fornisce funzioni per gestire la struttura dei tuoi file Excel:
Creare e rimuovere fogli
Rinominare i fogli
Copiare i fogli di lavoro
Inserire ed eliminare righe e colonne
Bloccare riquadri e aggiungere filtri
Limitazioni e feedback della community
Sebbene openpyxl sia ricca di funzionalità, gli utenti hanno segnalato alcune limitazioni:
Nonostante queste limitazioni, openpyxl ha un forte supporto dalla community. I problemi possono essere segnalati sul tracker di GitLab e talvolta è disponibile supporto professionale. Per ulteriori informazioni e assistenza, puoi consultare:
Conclusione
openpyxl è una libreria consolidata per l’automazione di Excel con Python che offre supporto completo per lettura, scrittura e formattazione dei file Excel. Consente un controllo dettagliato sull’output dei fogli di calcolo nei flussi di lavoro automatizzati, dalla manipolazione delle singole celle alla creazione di grafici e all’applicazione di formattazioni complesse.
Per chi deve generare o analizzare file Excel in modo programmatico, in particolare per creare report o elaborare dati tabellari, openpyxl offre un set di strumenti completo. La possibilità di funzionare senza richiedere l’installazione di Excel la rende particolarmente preziosa per ambienti server e pipeline di dati automatizzate.
Che tu stia creando modelli finanziari, analizzando dati o generando report, openpyxl ti dà gli strumenti per gestire i file Excel in modo efficiente tramite codice Python.