· Workbook() 创建一个全新的 .xlsx 工作簿。
· load_workbook(filename, read_only=False, data_only=False) 读取已有的 Excel 文件并返回 Workbook 对象。
from openpyxl import Workbook, load_workbook
# 新建工作簿
wb = Workbook()
ws = wb.active # 默认激活的 Sheet
ws.title = "Demo"
# 加载已有文件
wb2 = load_workbook('example.xlsx')
ws2 = wb2['Sheet1']
· wb.create_sheet(title, index=None) 创建新工作表,可指定位置。
· wb.active 获取当前激活的工作表。
· wb.remove(ws) 删除指定工作表。
# 创建新工作表并移动位置
ws_new = wb.create_sheet('统计')
wb.move_sheet(ws_new, offset=-1) # 向前移动一位
# 删除工作表
wb.remove(wb['旧表'])
· ws['A1'] = value 直接写入单元格。
· ws.cell(row, column, value=None) 按行列坐标读写。
· ws.append(iterable) 在末尾追加一行数据。
# 写入
ws['A1'] = '姓名'
ws['B1'] = '成绩'
# 按坐标写入
ws.cell(2, 1, '张三')
ws.cell(row=2, column=2, value=88)
# 追加整行
ws.append(['李四', 92, '优秀'])
使用 openpyxl.styles 中的类进行格式化。
from openpyxl.styles import Font, Alignment, PatternFill
# 字体加粗、颜色
bold_font = Font(name='Arial', size=14, bold=True, color='FF0000')
ws['A1'].font = bold_font
# 居中对齐
center_align = Alignment(horizontal='center', vertical='center')
ws['B1'].alignment = center_align
# 背景填充(黄色)
yellow_fill = PatternFill(start_color='FFFF00', end_color='FFFF00', fill_type='solid')
ws['A2'].fill = yellow_fill
· ws.merge_cells(start_row, start_column, end_row, end_column) 合并区域。
· ws.unmerge_cells(range_string) 拆分。
# 合并 A1:C1
ws.merge_cells('A1:C1')
ws['A1'] = '标题'
# 拆分
ws.unmerge_cells('A1:C1')
· ws.insert_rows(idx, amount=1) 在 idx 行前插入。
· ws.delete_rows(idx, amount=1) 删除行。
· ws.insert_cols(idx, amount=1) 插入列。
ws.insert_rows(3) # 在第3行前插入空行
ws.delete_cols(5, 2) # 删除第5列及其右侧第2列
使用 DataValidation 创建下拉框。
from openpyxl.worksheet.datavalidation import DataValidation
dv = DataValidation(type="list", formula1='"是,否"', allow_blank=True)
ws.add_data_validation(dv)
dv.add(ws["C2"]) # C2 单元格出现下拉框
写入公式直接赋值,读取时使用 cell.value(若 data_only=True 则返回计算结果)。
ws['D2'] = '=SUM(B2:C2)' # 写入求和公式
value = ws['D2'].value # 返回字符串 '=SUM(B2:C2)'
# 读取计算结果(需要 load_workbook(..., data_only=True))
wb_calc = load_workbook('example.xlsx', data_only=True)
calc_val = wb_calc.active['D2'].value
openpyxl 支持多种图表,下面演示柱状图的基本流程。
from openpyxl.chart import BarChart, Reference
# 假设 A1:A4 为类别,B1:B4 为数值
data = Reference(ws, min_col=2, min_row=1, max_row=4)
cats = Reference(ws, min_col=1, min_row=2, max_row=4)
chart = BarChart()
chart.add_data(data, titles_from_data=True)
chart.set_categories(cats)
chart.title = "销量统计"
ws.add_chart(chart, "E5") # 将图表放在 E5 位置
完成所有操作后使用 wb.save(filename) 将文件写入磁盘。
wb.save('my_report.xlsx')
帮助快速上手 openpyxl。若需要更细致的 API 说明,可参考官方文档或上述教程。