Productivity
Excel Processing (XLSX)
Create and manipulate Microsoft Excel spreadsheets programmatically. Use when users need to generate, edit, or convert Excel files.
Create and manipulate Microsoft Excel spreadsheets programmatically.
Setup
Installation
pip install openpyxl
Basic Usage
import openpyxl
# Create workbook
wb = openpyxl.Workbook()
ws = wb.active
# Add data
ws['A1'] = 'Hello'
ws['B1'] = 'World'
# Save
wb.save('spreadsheet.xlsx')
Workbook Structure
Sheets
import openpyxl
wb = openpyxl.Workbook()
# Create new sheet
ws = wb.create_sheet('Data')
# Access sheet
ws = wb['Data']
# List all sheets
print(wb.sheetnames)
Cells
import openpyxl
wb = openpyxl.Workbook()
ws = wb.active
# Set values
ws['A1'] = 'Name'
ws['B1'] = 'Value'
# Access values
name = ws['A1'].value
print(name) # Output: Name
# Iterate over cells
for row in ws.iter_rows(min_row=1, max_row=5, min_col=1, max_col=2):
for cell in row:
print(cell.value)
Data Operations
Writing Data
import openpyxl
wb = openpyxl.Workbook()
ws = wb.active
# Single cell
ws['A1'] = 'Hello'
# Multiple cells
data = [
['Name', 'Age', 'City'],
['John', 25, 'New York'],
['Jane', 30, 'London'],
['Bob', 35, 'Paris'],
]
for row in data:
ws.append(row)
wb.save('data.xlsx')
Reading Data
import openpyxl
wb = openpyxl.load_workbook('data.xlsx')
ws = wb.active
# Read specific cell
value = ws['A1'].value
# Read range
for row in ws.iter_rows(min_row=1, max_row=5, values_only=True):
print(row)
# Read all data
data = ws.values
for row in data:
print(row)
Formatting
Cell Formatting
import openpyxl
from openpyxl.styles import Font, PatternFill, Alignment, Border, Side
wb = openpyxl.Workbook()
ws = wb.active
# Font
ws['A1'].font = Font(
name='Arial',
size=12,
bold=True,
color='FF0000'
)
# Fill
ws['A1'].fill = PatternFill(
start_color='FFFF00',
end_color='FFFF00',
fill_type='solid'
)
# Alignment
ws['A1'].alignment = Alignment(
horizontal='center',
vertical='center'
)
# Border
thin_border = Border(
left=Side(style='thin'),
right=Side(style='thin'),
top=Side(style='thin'),
bottom=Side(style='thin')
)
ws['A1'].border = thin_border
Column Width
# Set column width
ws.column_dimensions['A'].width = 20
ws.column_dimensions['B'].width = 15
# Set row height
ws.row_dimensions[1].height = 30
Charts
Creating Charts
import openpyxl
from openpyxl.chart import BarChart, Reference
wb = openpyxl.Workbook()
ws = wb.active
# Add data
data = [
['Product', 'Q1', 'Q2', 'Q3', 'Q4'],
['Widget A', 100, 150, 200, 250],
['Widget B', 200, 180, 220, 280],
['Widget C', 150, 160, 190, 210],
]
for row in data:
ws.append(row)
# Create chart
chart = BarChart()
chart.title = "Sales by Quarter"
chart.y_axis.title = "Sales"
chart.x_axis.title = "Product"
# Reference data
data = Reference(ws, min_col=2, min_row=1, max_col=5, max_row=4)
cats = Reference(ws, min_col=1, min_row=2, max_row=4)
chart.add_data(data, titles_from_data=True)
chart.set_categories(cats)
ws.add_chart(chart, "A8")
Formulas
Using Formulas
import openpyxl
wb = openpyxl.Workbook()
ws = wb.active
# Add data
ws['A1'] = 10
ws['A2'] = 20
ws['A3'] = 30
# Add formula
ws['A4'] = '=SUM(A1:A3)'
# Other formulas
ws['B1'] = '=AVERAGE(A1:A3)'
ws['B2'] = '=MAX(A1:A3)'
ws['B3'] = '=MIN(A1:A3)'
Data Validation
Adding Validation
import openpyxl
from openpyxl.worksheet.datavalidation import DataValidation
wb = openpyxl.Workbook()
ws = wb.active
# Create validation
dv = DataValidation(
type="list",
formula1='"Option1,Option2,Option3"',
allow_blank=True
)
# Add validation to cells
ws.add_data_validation(dv)
dv.add('A1:A10')
Best Practices
- Use meaningful sheet names
- Format headers clearly
- Add data validation
- Use formulas for calculations
- Consider file size optimization
- Test with different Excel versions
- Provide clear documentation