openpyxl
2021-03-12 本文已影响0人
SingleDiego
官方教程:https://openpyxl.readthedocs.io/en/stable/tutorial.html
创建新文件(workbook)
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
wb.save("sample.xlsx")
以上代码会创建一个新的 xlsx
文件,并保存为 sample.xlsx
的文件名,并且会创建一个叫 Sheet
的工作表。
使用 ws = wb.active
,能获取到该工作表(默认是获取第一个工作表) ,保存为 ws
对象来操作。
读取已存在的文件
使用 load_workbook
方法读取已有的 xlsx
文件:
from openpyxl import load_workbook
wb = load_workbook('sample.xlsx')
创建新工作表(worksheet)
- 使用
Workbook.create_sheet()
方法创建新工作表:
# 在最后位置创建(默认)
ws1 = wb.create_sheet("Mysheet")
# 在首位创建
ws2 = wb.create_sheet("Mysheet", 0)
# 在倒数第二位置创建
ws3 = wb.create_sheet("Mysheet", -1)
也可以先创建工作表再修改名称:
ws = wb.create_sheet()
ws.title = "New Title"
- 定义工作表标签的颜色:
ws.sheet_properties.tabColor = "1072BA"
- 通过名称获取一个已存在的工作表:
ws3 = wb["New Title"]
- 通过
Workbook.sheetnames
方法获取所有工作表的名称:
>>> print(Workbook.sheetnames)
['Sheet', 'New Title']
- 复制工作表:
source = wb.active
target = wb.copy_worksheet(source)
数据操作
- 获取单元格对象
openpyxl
支持直接用 excel 表格的行列号获取单元格:
>>> c = ws['A1']
>>> print(c)
<Cell 'demo1'.A1>
要返回单元格的值:
>>> c.value
- 修改单元格的值
ws['A1'] = 'hello'
一个完整的例子:
from openpyxl import load_workbook
wb = load_workbook('sample.xlsx')
ws = wb['demo1']
ws['A1'] = 'hello'
wb.save("sample.xlsx")
- 使用
Worksheet.cell()
方法获取单元格对象
# 获取单元格
ws.cell(row=1, column=1)
# 获取并修改单元格的值
ws.cell(row=1, column=1, value=10)
4.获取多个单元格
cell_range = ws['A1': 'C2']
以上代码获取 A1 到 C2 这一区域的所有单元格,类似的操作还有:
>>> colC = ws['C'] # 获取C列所有
>>> col_range = ws['C:D'] # 获取CD列所有
>>> row10 = ws[10] # 获取第10行所有
>>> row_range = ws[5:10] # 获取5到10行所有
使用 Worksheet.iter_rows()
方法也有同样的作用:
# 获取 A1—A5
for row in ws.iter_rows(min_row=1, max_row=5):
for cell in row:
print(cell)
# 获取 A1—C5
for row in ws.iter_rows(min_row=1, max_row=5, max_col=3):
for cell in row:
print(cell, cell.value)
- 遍历所有单元格
按行遍历:
for i in tuple(ws.rows):
print(i)
按列遍历:
for i in tuple(ws.columns):
print(i)
- 只获取值
使用 Worksheet.values
方法可只返回工作表的单元格的值
for i in ws.values:
print(i)
值会以元组的形式返回。Worksheet.iter_rows()
和 Worksheet.iter_cols()
方法都能带上 values_only
参数,从而只返回值。
for row in ws.iter_rows(min_row=1, max_col=3, max_row=2, values_only=True):
print(row)