worksheet 说明
Worksheet 代表一个 Excel 工作表。
worksheet 初始化
from openpyxl import Workbook
# 创建一个新的Excel工作簿
wb = Workbook()
# 获取第一个工作表
worksheet = wb.active
# 保存工作簿到指定的文件名
wb.save("execl_test.xlsx")
# 关闭工作簿
wb.close()
worksheet 属性
title: 返回工作表的标题。
max_row: 返回工作表中最大的行数。
max_column: 返回工作表中最大的列数。
columns: 访问工作表中的所有列。这个属性返回一个生成器,允许迭代每一列以访问其中的单元格。
rows: 访问工作表中的所有行。这个属性返回一个生成器,允许迭代每一行以访问其中的单元格。
sheet_format:设置工作表的格式,如列宽、行高等。
base_col_width: 用于设置基础列宽度。默认值:10。
default_row_height: 设置默认行高度。默认值:12.75。
row_dimensions: 设置每行行高。
column_dimensions: 设置每列列宽。
freeze_panes: 用于冻结工作表中的特定行或列,使其在滚动时始终可见。
worksheet.freeze_panes = 'A2' # 冻结第一行
worksheet.freeze_panes = 'B1' # 冻结第一列
worksheet.freeze_panes = 'C2' # 冻结前两列和第一行
worksheet.freeze_panes = None # 取消所有冻结窗格
index(worksheet): 用于获取工作表在工作簿中的位置索引。位置索引从0开始,这意味着第一个工作表的索引是0。
from openpyxl import Workbook
# 创建一个新的Excel工作簿
wb = Workbook()
# 获取第一个工作表
worksheet = wb.active
# 获取工作表的名称
print(type(worksheet.title), worksheet.title) # 输出: <class 'str'> Sheet
# 获取工作表的最大行数
print(type(worksheet.max_row), worksheet.max_row) # 输出: <class 'int'> 1
# 获取工作表的最大列数
print(type(worksheet.max_column), worksheet.max_column) # 输出: <class 'int'> 1
# 设置基础列宽度
worksheet.sheet_format.base_col_width = 15
# 设置默认行高度
worksheet.sheet_format.default_row_height = 50
# 设置第一行的行高为30
worksheet.row_dimensions[1].height = 30
# 设置第一列(列A)的列宽为20
worksheet.column_dimensions['A'].width = 20
# 设置冻结窗格:冻结第一行
ws.freeze_panes = 'A2'
# 设置冻结窗格:冻结第一列
ws.freeze_panes = 'B1'
# 设置冻结窗格:冻结第一行和第一列
ws.freeze_panes = 'B2'
# 取消冻结窗格
ws.freeze_panes = None # 取消冻结窗格
# 保存工作簿到指定的文件名
wb.save("execl_test.xlsx")
# 关闭工作簿
wb.close()
from openpyxl import load_workbook
workbook = load_workbook('execl_test.xlsx')
worksheet = workbook.worksheets[0]
print(workbook.index(worksheet), worksheet.title) # 输出: 0 Sheet
# 保存工作簿到指定的文件名
workbook.save("execl_test.xlsx")
# 关闭工作簿
workbook.close()
from openpyxl import load_workbook
# 加载现有的工作簿
wb = load_workbook('example.xlsx')
# 获取活动的工作表
ws = wb.active
# 遍历并打印每行的值
for row in ws.rows:
for cell in row:
print(cell.value)
# 遍历并打印每列的值
for column in ws.columns:
for cell in column:
print(cell.value)
# 保存工作簿
wb.save('unmerged_cells_example.xlsx')
worksheet 方法
append(rows)
功能: 在工作表末尾附加一行或多行数据。
参数: rows - 要添加的行数据。
from openpyxl import Workbook
# 创建一个新的Excel工作簿
wb = Workbook()
# 获取第一个工作表
worksheet = wb.active
# 添加一行数据
worksheet.append(['Alice', 30, 'Engineer'])
# 多行数据
data = [
['Bob', 25, 'Male'],
['Charlie', 35, 'Male']
]
# 逐行添加数据
for row in data:
worksheet.append(row)
# 打印工作表中数据
for row in worksheet.iter_rows(values_only=True):
print(type(row), row)
# 输出: <class 'tuple'> ('Alice', 30, 'Engineer')
# 输出: <class 'tuple'> ('Bob', 25, 'Male')
# 输出: <class 'tuple'> ('Charlie', 35, 'Male')
# 保存工作簿到指定的文件名
wb.save("execl_test.xlsx")
# 关闭工作簿
wb.close()
iter_rows()
iter_rows(): 用于迭代工作表中的行,返回每一行的单元格对象。
iter_rows(min_row=1, max_row=None, min_col=1, max_col=None, values_only=False):
min_row (可选): 起始行号,默认为1;
max_row (可选): 结束行号,默认为工作表中的最大行号;
min_col (可选): 起始列号,默认为1;
max_col (可选): 结束列号,默认为工作表中的最大列号;
values_only (可选): 如果设置为 True,则只返回单元格的值,而不是单元格对象。
返回值: 返回一个生成器,用于迭代工作表中符合条件的行。
from openpyxl import Workbook
# 创建一个新的Excel工作簿
wb = Workbook()
# 获取第一个工作表
worksheet = wb.active
# 添加一行数据
worksheet.append(['Alice', 30, 'Engineer'])
# 遍历工作表的每一行
for row in worksheet.iter_rows(values_only=True):
print(type(row), row)
# 输出: <class 'tuple'> ('Alice', 30, 'Engineer')
# 保存工作簿到指定的文件名
wb.save("execl_test.xlsx")
# 关闭工作簿
wb.close()
iter_cols
iter_cols(): 用于迭代工作表中的列,返回每一列的单元格对象。
iter_cols(min_row=1, max_row=None, min_col=1, max_col=None, values_only=False):
min_row (可选): 起始行号,默认为1;
max_row (可选): 结束行号,默认为工作表中的最大行号;
min_col (可选): 起始列号,默认为1;
max_col (可选): 结束列号,默认为工作表中的最大列号;
values_only (可选): 如果设置为 True,则只返回单元格的值,而不是单元格对象。
返回值: 返回一个生成器,用于迭代工作表中符合条件的行。
from openpyxl import Workbook
# 创建一个新的Excel工作簿
wb = Workbook()
# 获取第一个工作表
worksheet = wb.active
# 添加一行数据
worksheet.append(['Alice', 30, 'Engineer'])
# 遍历工作表的每一列
for cols in worksheet.iter_cols(values_only=True):
print(type(cols), cols)
# 输出: <class 'tuple'> ('Alice',)
# 输出: <class 'tuple'> (30,)
# 输出: <class 'tuple'> ('Engineer',)
# 保存工作簿到指定的文件名
wb.save("execl_test.xlsx")
# 关闭工作簿
wb.close()
insert_cols()
insert_cols(): 用于插入指定列索引开始的指定数量的列。
insert_cols(idx, amount=1):
idx: 要插入的列的起始索引。
amount: 要插入的列的数量,默认为1。可选。
from openpyxl import Workbook
# 创建一个新的 Excel 工作簿
wb = Workbook()
ws = wb.active
# 填充示例数据
for row in range(1, 6):
ws.append([f'Data {row}{col}' for col in range(1, 6)])
# 保存初始的工作簿(可选)
wb.save('before_insert_columns.xlsx')
# 在第2列位置插入1列
ws.insert_cols(2, amount=1)
# 在第2列位置插入3列
ws.insert_cols(2, amount=3)
# 保存工作簿
wb.save('after_insert_columns.xlsx')
delete_cols()
delete_cols(): 用于删除指定列索引开始的指定数量的列。
delete_cols(idx, amount=1):
idx: 要删除的列的起始索引。
amount: 要删除的列的数量,默认为1。可选。
from openpyxl import Workbook
# 创建一个新的Excel工作簿
wb = Workbook()
# 获取第一个工作表
worksheet = wb.active
# 添加一行数据
worksheet.append(['Alice', 30, 'Engineer', '2024'])
# 删除第1列
worksheet.delete_cols(1)
# 删除从第2列开始的3列
worksheet.delete_cols(2, 3)
# 遍历工作表的每一列
for row in worksheet.iter_rows(values_only=True):
print(type(row), row)
# 输出: <class 'tuple'> (30,)
# 保存工作簿到指定的文件名
wb.save("execl_test.xlsx")
# 关闭工作簿
wb.close()
insert_rows()
insert_rows(): 用于插入指定行索引开始的指定数量的行。
insert_rows(idx, amount=1):
idx: 要插入的行的起始索引。
amount: 要插入的行的数量,默认为1。可选。
from openpyxl import Workbook
# 创建一个新的 Excel 工作簿
wb = Workbook()
ws = wb.active
# 填充示例数据
for row in range(1, 6):
ws.append([f'Data {row}{col}' for col in range(1, 6)])
# 保存初始的工作簿(可选)
wb.save('before_insert_rows.xlsx')
# 在第3行位置插入1行
ws.insert_rows(3, amount=1)
# 在第3行位置插入3行
ws.insert_rows(3, amount=3)
# 保存工作簿
wb.save('after_insert_rows.xlsx')
print("A row has been inserted at the third position.")
delete_rows()
delete_rows(idx, amount=1): 用于删除指定行索引开始的指定数量的行。
delete_rows(idx, amount=1):
idx: 要删除的列的起始索引。
amount: 要删除的列的数量,默认为1。可选。
from openpyxl import Workbook
# 创建一个新的Excel工作簿
wb = Workbook()
# 获取第一个工作表
worksheet = wb.active
# 多行数据
data = [
['Bob', 25, 'Male'],
['Charlie', 35, 'Male'],
['Alice', 30, 'Engineer'],
['Bob01', 25, 'Male']
]
# 逐行添加数据
for row in data:
worksheet.append(row)
# 删除第3行
worksheet.delete_rows(3)
# 删除从第2行开始的3行
worksheet.delete_rows(2, 3)
# 打印工作表中数据
for row in worksheet.iter_rows(values_only=True):
print(type(row), row)
# 输出: <class 'tuple'> ('Bob', 25, 'Male')
# 保存工作簿到指定的文件名
wb.save("execl_test.xlsx")
# 关闭工作簿
wb.close()
merge_cells()
merge_cells(): 方法用于合并指定区域的单元格。合并单元格时,合并后的单元格值将仅存储在左上角的单元格中,其余单元格将显示为空。
merge_cells(range_string=None, start_row=None, start_column=None, end_row=None, end_column=None):
range_string (可选): 合并单元格的区域字符串,例如 "A1:D1" 表示从单元格 A1 到 D1 的范围。
start_row (可选): 起始行号。
start_column (可选): 起始列号。
end_row (可选): 结束行号。
end_column (可选): 结束列号。
from openpyxl import Workbook
# 创建一个新的Excel工作簿
wb = Workbook()
# 获取第一个工作表
worksheet = wb.active
# 合并单元格 A1 到 D1
worksheet.merge_cells('A1:D1')
# 设置合并单元格的值
worksheet['A1'] = 'Merged Cell A1 to D1'
# 合并单元格从第2行第1列(A2)到第2行第5列(E2)
worksheet.merge_cells(start_row=2, start_column=1, end_row=2, end_column=5)
# 设置合并单元格的值
worksheet.cell(row=2, column=1, value='Merged Cell A2 to E2')
# 打印工作表中数据
for row in worksheet.iter_rows(values_only=True):
print(type(row), row)
# 输出: <class 'tuple'> ('Merged Cell A1 to D1', None, None, None, None)
# 输出: <class 'tuple'> ('Merged Cell A2 to E2', None, None, None, None)
# 保存工作簿到指定的文件名
wb.save("execl_test.xlsx")
# 关闭工作簿
wb.close()
unmerge_cells()
unmerge_cells(): 方法用于取消已经合并的单元格。
unmerge_cells(range_string=None, start_row=None, start_column=None, end_row=None, end_column=None):
range_string (可选): 合并单元格的区域字符串,例如 "A1:D1" 表示从单元格 A1 到 D1 的范围。
start_row (可选): 起始行号。
start_column (可选): 起始列号。
end_row (可选): 结束行号。
end_column (可选): 结束列号。
from openpyxl import Workbook
# 创建一个新的Excel工作簿
wb = Workbook()
ws = wb.active
# 合并单元格 A1 到 D1
ws.merge_cells('A1:D1')
ws['A1'] = 'Merged Cell A1 to D1'
# 取消合并单元格 A1 到 D1
ws.unmerge_cells('A1:D1')
# 合并单元格从第2行第1列(A2)到第2行第4列(D2)
ws.merge_cells(start_row=2, start_column=1, end_row=2, end_column=4)
ws.cell(row=2, column=1, value='Merged Cell A2 to D2')
# 取消合并单元格从第2行第1列(A2)到第2行第4列(D2)
ws.unmerge_cells(start_row=2, start_column=1, end_row=2, end_column=4)
# 保存工作簿
wb.save('unmerged_cells_example.xlsx')
print("Cells A1 to D1 have been unmerged.")
worksheet.cell()
cell() 说明
cell(): 方法用于访问或设置工作表中特定单元格的数值。
cell(row=row_num, column=col_num, value=None):
row: 表示要操作的单元格的行号。
column: 表示要操作的单元格的列号。
value (可选): 要设置的单元格的值。
返回值:
该方法返回一个单元格对象(Cell 对象),您可以从该对象中获取和设置单元格的值和属性。
cell 对象属性
Cell.value:获取或设置单元格的值。
Cell.row:单元格所在的行号。
Cell.column:单元格所在的列号。
Cell.coordinate:单元格的坐标,如 'A1'。
Cell.data_type:单元格的数据类型(如 shared、inlineStr、s、str、或 None)。
Cell.font: 获取或设置单元格的字体。
Cell.fill: 获取或设置单元格的填充样式。
示例
from openpyxl import Workbook
# 创建一个新的Excel工作簿
wb = Workbook()
# 获取第一个工作表
worksheet = wb.active
# 获取第一行第一列的单元格对象
cell_A1 = worksheet.cell(row=1, column=1)
print(type(cell_A1), cell_A1) # 输出: <class 'openpyxl.cell.cell.Cell'> <Cell 'Sheet'.A1>
# 设置单元格的值为 'Alice'
cell_A1.value = 'Alice01'
print(cell_A1.value) # 输出: Alice01
# 另一种设置值的方式
cell_B1 = worksheet.cell(row=1, column=2, value=30) # 设置第一行第二列的值为 30
print(cell_B1.value) # 输出:30
print(cell_B1.row) # 输出:1
print(cell_B1.column) # 输出:2
print(cell_B1.coordinate) # 输出:B1
print(cell_B1.data_type) # 输出:n (默认)
# 保存工作簿到指定的文件名
wb.save("execl_test.xlsx")
# 关闭工作簿
wb.close()