← docxtpl | python-pptx →

openpyxl

openpyxl 是一个用于读写 Excel 2010 xlsx/xlsm/xltx/xltm 文件的 Python 库。

安装

pip install openpyxl

创建 Excel 文件

from openpyxl import Workbook

# 创建工作簿
wb = Workbook()

# 获取活动工作表
ws = wb.active
ws.title = "Sheet1"

# 写入数据
ws['A1'] = '姓名'
ws['B1'] = '年龄'
ws['C1'] = '城市'

# 写入多行数据
data = [
    ['张三', 25, '北京'],
    ['李四', 30, '上海'],
    ['王五', 28, '广州'],
    ['赵六', 32, '深圳']
]

for row in data:
    ws.append(row)

# 保存文件
wb.save('example.xlsx')
print("Excel 文件已保存")

读取 Excel 文件

from openpyxl import load_workbook

# 加载工作簿
wb = load_workbook('example.xlsx')

# 获取工作表
ws = wb.active

# 读取所有数据
for row in ws.iter_rows(values_only=True):
    print(row)

# 读取特定范围
for row in ws['A1:C4']:
    for cell in row:
        print(cell.value, end=' ')
    print()

# 获取工作表信息
print(f"工作表名: {ws.title}")
print(f"最大行数: {ws.max_row}")
print(f"最大列数: {ws.max_column}")

设置单元格样式

from openpyxl import Workbook
from openpyxl.styles import Font, Alignment, PatternFill, Border, Side

wb = Workbook()
ws = wb.active

# 设置标题样式
header_font = Font(name='Arial', size=12, bold=True, color='FFFFFF')
header_fill = PatternFill(start_color='4472C4', end_color='4472C4', fill_type='solid')
header_alignment = Alignment(horizontal='center', vertical='center')

# 设置边框
thin_border = Border(
    left=Side(style='thin'),
    right=Side(style='thin'),
    top=Side(style='thin'),
    bottom=Side(style='thin')
)

# 写入标题
headers = ['姓名', '年龄', '城市']
for col, header in enumerate(headers, 1):
    cell = ws.cell(row=1, column=col)
    cell.value = header
    cell.font = header_font
    cell.fill = header_fill
    cell.alignment = header_alignment
    cell.border = thin_border

# 写入数据并设置样式
data = [['张三', 25, '北京'], ['李四', 30, '上海']]
for row_idx, row_data in enumerate(data, 2):
    for col_idx, value in enumerate(row_data, 1):
        cell = ws.cell(row=row_idx, column=col_idx)
        cell.value = value
        cell.alignment = Alignment(horizontal='center')
        cell.border = thin_border

wb.save('styled_example.xlsx')

使用公式

from openpyxl import Workbook

wb = Workbook()
ws = wb.active

# 写入数据
ws['A1'] = '商品'
ws['B1'] = '单价'
ws['C1'] = '数量'
ws['D1'] = '总价'

data = [
    ['商品A', 10, 5],
    ['商品B', 20, 3],
    ['商品C', 15, 4]
]

for row in data:
    ws.append(row)

# 添加公式
for row in range(2, 5):
    ws[f'D{row}'] = f'=B{row}*C{row}'

# 添加总计
ws['A5'] = '总计'
ws['D5'] = '=SUM(D2:D4)'

wb.save('formula_example.xlsx')

操作多个工作表

from openpyxl import Workbook

wb = Workbook()

# 删除默认工作表
if 'Sheet' in wb.sheetnames:
    del wb['Sheet']

# 创建多个工作表
sheets = ['一月', '二月', '三月', '四月']
for sheet_name in sheets:
    wb.create_sheet(title=sheet_name)

# 在不同工作表中写入数据
for sheet in wb.worksheets:
    sheet['A1'] = '日期'
    sheet['B1'] = '销售额'

wb.save('multiple_sheets.xlsx')

图表

from openpyxl import Workbook
from openpyxl.chart import BarChart, Reference

wb = Workbook()
ws = wb.active

# 写入数据
data = [
    ['产品', '销售额'],
    ['A', 100],
    ['B', 150],
    ['C', 120],
    ['D', 180]
]

for row in data:
    ws.append(row)

# 创建图表
chart = BarChart()
chart.type = "col"
chart.style = 10
chart.title = "产品销售统计"
chart.y_axis.title = '销售额'
chart.x_axis.title = '产品'

# 设置数据范围
data_ref = Reference(ws, min_col=2, min_row=1, max_row=5, max_col=2)
cats_ref = Reference(ws, min_col=1, min_row=2, max_row=5)
chart.add_data(data_ref, titles_from_data=True)
chart.set_categories(cats_ref)

# 添加图表到工作表
ws.add_chart(chart, "E2")

wb.save('chart_example.xlsx')

合并单元格

from openpyxl import Workbook
from openpyxl.styles import Alignment

wb = Workbook()
ws = wb.active

# 合并单元格
ws.merge_cells('A1:D1')
ws['A1'] = '合并单元格示例'
ws['A1'].alignment = Alignment(horizontal='center', vertical='center')

# 合并多行
ws.merge_cells('A3:B5')
ws['A3'] = '多行合并'

wb.save('merged_cells.xlsx')
💡 提示:openpyxl 不支持 .xls 格式(旧版 Excel),如需处理 .xls 文件,可以使用 xlrd 和 xlwt 库。
← docxtpl | python-pptx →