openpyxl 是一个 Python 库,用于读/写 Excel 2010 xlsx/xlsm/xltx/xltm 文件。
它诞生于缺乏现有的库,可以从Python本地读取/写入 Office Open XML 格式。
使用 pip 安装 openpyxl
pip install openpyxl
官方文档
#只需导入类:Workbook
from openpyxl import Workbook
wb = Workbook()
# 当前激活的工作表
ws = wb.active
#创建新工作表:Workbook.create_sheet()
ws1 = wb.create_sheet("Mysheet") # insert at the end (default)
ws2 = wb.create_sheet("Mysheet", 0) # insert at first position
ws3 = wb.create_sheet("Mysheet", -1) # insert at the penultimate position
注意:在内存中创建工作表时,它不包含任何单元格。他们是 首次访问时创建。
工作表在创建时会自动为其命名。 它们按顺序编号(表、表1、表2等)。 您可以随时使用属性更改此名称:Worksheet.title
ws.title = "New Title"
为工作表命名后,可以将其作为工作簿的键:
ws3 = wb["New Title"]
可以使用属性查看工作簿的所有工作表的名称Workbook.sheetname
print(wb.sheetnames)
['Sheet2', 'New Title', 'Sheet1']
可以循环浏览工作表
for sheet in wb:
print(sheet.title)
可以在单个工作簿中创建工作表的副本:
Workbook.copy_worksheet()方法:
source = wb.active
target = wb.copy_worksheet(source)
注意:
import openpyxl
# 打开excel
excel = openpyxl.load_workbook('apis.xlsx') # 有路径应带上路径
# 使用指定工作表
sheet = excel.active # 当前激活的工作表
# sheet = excel.get_sheet_by_name('Sheet1')
# 读取所有数据
print(list(sheet.values)) # sheet.values 生成器
print(sheet.max_column) # 最大列数
print(sheet.max_row) # 最大行数
# 按行读取
for row in sheet.iter_rows(min_row=1, min_col=1, max_col=3, max_row=3):
print(row)
# 读取标题行
for row in sheet.iter_rows(max_row=1):
title_row = [cell.value for cell in row]
print(title_row)
# 读取标题行以外数据
for row in sheet.iter_rows(min_row=2):
row_data = [cell.value for cell in row]
print(row_data)
# 读取单元格数据
print(sheet['A1'].value)
print(sheet.cell(1,1).value)
# 写入单元格
sheet['F2'] = 'PASS'
result_col = title_row.index('result')+1 # 'result'所在的列号
sheet.cell(3, result_col).value = 'PASS'
# 整行写入
new_row = ['post-xml接口', 'post', 'https://httpbin.org/post']
sheet.append(new_row)
保存工作簿的最简单和最安全的方法是使用对象的方法:Workbook.save()Workbook
# 保存文件,也可覆盖原文件
wb = Workbook()
wb.save('balances.xlsx')
#此操作将覆盖现有文件,而不会发出警告。
from openpyxl import Workbook
from openpyxl.utils import get_column_letter
wb = Workbook()
dest_filename = 'empty_book.xlsx'
# 当前激活的工作表
ws1 = wb.active
#为工作表命名
ws1.title = "range names"
for row in range(1, 40):
ws1.append(range(600))
#创建工作表2
ws2 = wb.create_sheet(title="Pi")
ws2['F5'] = 3.14
ws3 = wb.create_sheet(title="Data")
for row in range(10, 20):
for col in range(27, 54):
_ = ws3.cell(column=col, row=row, value="{0}".format(get_column_letter(col)))
print(ws3['AA10'].value)
#保存文件
wb.save(filename = dest_filename)
合并单元格时,除左上角单元格外的所有单元格都将从 工作表。为了携带合并单元格的边界信息,边界单元格的 合并的单元格被创建为始终具有值 None 的合并单元格。
from openpyxl.workbook import Workbook
wb = Workbook()
ws = wb.active
ws.merge_cells('A2:D2')
ws.unmerge_cells('A2:D2')
# or equivalently
ws.merge_cells(start_row=2, start_column=1, end_row=4, end_column=4)
ws.unmerge_cells(start_row=2, start_column=1, end_row=4, end_column=4)
(非作者允许,严禁转载)