如何使用 Python openpyxl 包操作 Excel 工作表?openpyxl Worksheet 对象介绍
本节并不包含 Microsoft Excel 工作表的创建,复制,移动,移除等操作,如果你想了解相关内容,可以查看如何使用 Python openpyxl 包操作 Excel 工作簿?openpyxl Workbook 对象介绍一节。
此外,本节内容也不涉及与 Excel 样式,计算,表格,图表相关的内容。
Python openpyxl 包中的 Excel 工作表对象 Worksheet
Pythonopenpyxl
包中的Worksheet
类,属于模块openpyxl.worksheet.worksheet
,可用于获取或设置 Excel 工作簿中的工作表的相关信息和数据,Worksheet
对象可通过openpyxl
工作簿对象Workbook
获取或创建。如果Workbook
是只读的,即read_only
属性为True
,那么你将只能得到ReadOnlyWorksheet
工作表对象(属于模块openpyxl.worksheet._read_only
),如果Workbook
是只写的,即write_only
属性为True
,那么你将只能创建并得到WriteOnlyWorksheet
工作表对象(属于模块openpyxl.worksheet._write_only
)。
Python openpyxl 包的 ReadOnlyWorksheet,WriteOnlyWorksheet 类与 Worksheet 类的关系
虽然 Pythonopenpyxl
包的ReadOnlyWorksheet
和WriteOnlyWorksheet
类,与Worksheet
类所实现的一些功能是相近的,但他们并不存在继承关系。
无法通过 Python openpyxl 包的 Worksheet,WriteOnlyWorksheet 类的构造器直接创建新的工作表
不要尝试通过Worksheet
和WriteOnlyWorksheet
类的构造器来创建新的 Excel 工作表,Workbook
并没有提供将他们添加至 Excel 工作簿的方法,即便Workbook
存在特性worksheets
。
工作簿
想要了解如何通过Workbook
对象添加 Excel 工作表,你可以查看使用 Python openpyxl 包的 Workbook 对象创建 Excel 工作表一段。
使用 Python openpyxl 包的 Worksheet 对象获取当前活动的 Excel 单元格的地址
Pythonopenpyxl
包的Worksheet
对象的active_cell
属性,可用于获取 Excel 工作表当前活动的单元格的地址,比如,active_cell
属性返回'C1'
,表示单元格C1
处于活动中。
worksheet.active_cell
Excel 工作表的当前活动单元格可能不同于已选中单元格
在 Excel 工作表中,当前活动的单元格通常只有一个,他可能不同于已选中单元格,因为被选中的单元格可以是多个。
# 请将命令行跳转至 Goods.xlsx 所在的目录,然后运行此脚本文件
from openpyxl import load_workbook
worksheet = load_workbook('Goods.xlsx')['Tables']
# 显示工作表当前活动的单元格的地址
print(f'当前活动的单元格为 {worksheet.active_cell}')
当前活动的单元格为 C1
使用 Python openpyxl 包的 Worksheet 对象为 Excel 工作表添加数据(值)
Pythonopenpyxl
包的Worksheet
对象的append
方法,可用于为 Excel 工作表添加数据(值),被添加的数据将位于工作表末尾一行的下一行,即便在末尾行之前存在某个空行。这里需要指出,openpyxl
包确定末尾一行的方式可能和你想象的不一样,我们会在计算已用单元格的最小区域一段中给予说明。
worksheet.append(iterable)
- iterable 参数
iterable
参数是一个提供数据的对象,可以是列表(list
),元组(tuple
),区域(range
),字典(dict
),或 Python 生成器(被isgenerator
函数判断为True
的对象)。除了字典,以上对象包含的值会从行的第一列开始,被依次写入 Excel 工作表。如果使用字典,那么可以通过键值对的键来指明数据对应的列,键可以是字符串或数字,比如{'A':100}
和{1:100}
都表示第一列的值为100
。
Python openpyxl 包的 Worksheet 对象可将 Excel 单元格对象作为被添加数据
Pythonopenpyxl
包的Worksheet
对象的append
方法,除了可以添加字符串或数字类型的值以外,还可以将创建的 Excel 单元格对象(Cell
)作为被添加的数据,如果单元格对象已经隶属于某个 Excel 工作表,即某个Worksheet
对象,那么该Worksheet
对象必须是调用append
方法的Worksheet
对象,此时添加的效果类似于移动指定 Excel 的单元格,这会体现在openpyxl
Workbook
对象所保存的 Excel 文件中(程序中可能不会体现)。
在读取 Excel 文件Goods.xlsx
之后,我们创建了一个工作表,并为工作表添加了几行数据,其中 Python 字典的键2
和4
分别对应了列B
和D
,把单元格A1
和B1
作为添加数据,将导致他们被移动至第二行,你可以在Append.xlsx
的工作表Sheet
中发现这一点,虽然print
函数所显示的A1
和B1
的值依然为1.6
和2.5
。
# 请将命令行跳转至 Goods.xlsx 所在的目录,然后运行此脚本文件
from openpyxl import load_workbook
workbook = load_workbook('Goods.xlsx')
worksheet = workbook.create_sheet()
# 以不同形式为工作表添加 4 行数据
worksheet.append((1.6, 2.5))
# 这相当于将单元格 A1 和 B1 移动至 A2 和 B2 的所在位置
worksheet.append([worksheet['A1'], worksheet['B1']])
worksheet.append({2: 1.0, 4: 2.0})
worksheet.append({'C': 1.1, 'E': 2.4})
# 保存为 Append.xlsx
workbook.save('Append.xlsx')
# 显示所有单元格的值
for r in worksheet.values:
print(r)
# 第一行中的 1.6 和 2.5 不会在 Append.xlsx 的 Sheet 工作表中出现
(1.6, 2.5, None, None, None)
(1.6, 2.5, None, None, None)
(None, 1.0, None, 2.0, None)
(None, None, 1.1, None, 2.4)
Pythonopenpyxl
包的WriteOnlyWorksheet
对象的append
方法,同样可用于为 Excel 工作表添加数据,其效果与Worksheet
对象的append
方法类似,只不过其能够接受的数据形式更少。
writeonlyworksheet.append(iterable)
- iterable 参数
iterable
参数是一个提供数据的对象,可以是列表(list
),元组(tuple
),区域(range
),或 Python 生成器(被isgenerator
函数判断为True
的对象)。
下面的示例,创建了只写的 Excel 工作簿和工作表对象,在调用append
方法写入数据后,我们将其保存为文件AppendWriteOnly.xlsx
。
from openpyxl import Workbook
workbook = Workbook(True)
worksheet = workbook.create_sheet()
# 为只写工作表添加数据,并保存为 AppendWriteOnly.xlsx
worksheet.append((1.6, 2.5))
worksheet.append([1.8, 2.2])
workbook.save('AppendWriteOnly.xlsx')
使用 Python openpyxl 包的 Worksheet 对象获取 Excel 单元格
Pythonopenpyxl
包的Worksheet
对象的cell
方法或[]
运算符,可用于获取 Excel 工作表中的某个或某些单元格。其中,cell
方法的返回值是表示 Excel 单元格的Cell
对象,[]
运算符的返回值是Cell
对象,或包含多个Cell
对象的 Python 元组,或以嵌套形式包含多行多列 Excel 单元格的 Python 元组。
worksheet.cell(row, column, value=None)
worksheet[address]
- row 参数
row
参数是一个整数,表示需要获取的 Excel 单元格位于第几行。- column 参数
column
参数是一个整数,表示需要获取的 Excel 单元格位于第几列。- value 参数
value
参数是需要为 Excel 单元格设置的值,可以是数字,字符串或时间。如果不希望在获取 Excel 单元格的同时设置单元格的值,可以保持value
参数的默认值None
。- address 值
address
为需要获取的某个 Excel 单元格的地址,比如'B2'
,或者包含多个 Excel 单元格的区域表达式,比如'A1:C3'
(从单元格A1
到C3
),2:4
(在第二行和第四行之间,从第一列开始至工作表最大列结束)。
与Worksheet
对象的cell
方法和[]
运算符类似,Pythonopenpyxl
包的ReadOnlyWorksheet
对象的cell
方法和[]
运算符,同样可用于获取 Excel 工作表中的某个或某些单元格。不同的是,ReadOnlyWorksheet
对象的cell
方法和[]
运算符,返回的是ReadOnlyCell
或EmptyCell
对象而非Cell
,调用cell
方法时,不能为value
参数指定非None
值,否则将导致异常,[]
运算符会排除 Excel 工作表末尾所有的空行。
在 Excel 文件Goods.xlsx
的Phones
工作表中,第一列没有任何数据,但区域2:4
依然会包含该列中的EmptyCell
,由于openpyxl
将工作表Phones
的最大列计算为4
,因此区域2:4
会包含第四列的单元格,即便他们都是EmptyCell
,由于第四行是Phones
工作表末尾的空行,因此ReadOnlyWorksheet
对象会将其忽略。
在 Excel 文件Goods.xlsx
的Cups
工作表中,第五行和其之后的行都是工作表末尾的空行,因此ReadOnlyWorksheet
对象会将他们忽略。
# 请将命令行跳转至 Goods.xlsx 所在的目录,然后运行此脚本文件
import openpyxl
workbook = openpyxl.load_workbook('Goods.xlsx', True)
phones = workbook['Phones']
# 获取单元格 A1,C1
print(phones.cell(1, 1))
print(phones['C1'])
# 获取第二和第四行之间,从第一列开始至最大列结束的区域内的单元格
print(phones[2:4])
cups = workbook['Cups']
# 工作表末尾的一些行将被忽略
print(cups['A1:B10'])
<EmptyCell>
<ReadOnlyCell 'Phones'.C1>
((<EmptyCell>, <ReadOnlyCell 'Phones'.B2>, <ReadOnlyCell 'Phones'.C2>, <EmptyCell>), (<EmptyCell>, <ReadOnlyCell 'Phones'.B3>, <EmptyCell>, <EmptyCell>))
((<ReadOnlyCell 'Cups'.A1>, <ReadOnlyCell 'Cups'.B1>), (<ReadOnlyCell 'Cups'.A2>, <ReadOnlyCell 'Cups'.B2>), (<EmptyCell>, <EmptyCell>), (<ReadOnlyCell 'Cups'.A4>, <ReadOnlyCell 'Cups'.B4>))
使用 Python openpyxl 包的 Worksheet 对象遍历 Excel 单元格的值
Pythonopenpyxl
包的Worksheet
和ReadOnlyWorksheet
对象的values
属性,返回一个可用于按行遍历 Excel 单元格的值的生成器对象,遍历的范围从单元格A1
开始,至 Excel 工作表的最大行和最大列结束,空单元格的值将被表示为None
。
需要指出,工作表的最大行和最大列可能会在openpyxl
包的Worksheet
对象中发生变化,关于这一点,我们会在计算已用单元格的最小区域一段给予说明。
worksheet|readonlyworksheet.values
在通过Worksheet
对象访问 Excel 单元格A4
之后,Excel 工作表Phones
的最大行由3
变成了4
。
# 请将命令行跳转至 Goods.xlsx 所在的目录,然后运行此脚本文件
import openpyxl
worksheet = openpyxl.load_workbook('Goods.xlsx')['Phones']
# 访问单元格 A4 将导致工作表的最大行发生变化
worksheet['A4']
# 显示 Phones 工作表中的单元格的值
for row in worksheet.values:
print(row)
(None, 'iPhone 100', 10000, 10)
(None, 'Samsung', 9999, None)
(None, 'iPhone 13', None, None)
(None, None, None, None)
使用 Python openpyxl 包的 Worksheet 对象移动 Excel 单元格
Pythonopenpyxl
包的Worksheet
对象的move_range
方法,可用于移动 Excel 工作表中的某个单元格或指定区域内的所有单元格,移动的目标区域中的单元格将被覆盖。
worksheet.move_range(cell_range, rows=0, cols=0, translate=False)
- cell_range 参数
cell_range
参数为某个 Excel 单元格的地址,或表示单元格区域的表达式和CellRange
对象。- rows 参数
rows
参数为 Excel 单元格移动的行数,大于0
时向下移动,小于0
时向上移动。- cols 参数
cols
参数为 Excel 单元格移动的列数,大于0
时向右移动,小于0
时向左移动。- translate 参数
translate
参数表示是否对被移动单元格的公式进行转换,默认为False
,不转换。
Python openpyxl 包的 Worksheet 对象不会移动公式引用的 Excel 单元格
如果将openpyxl
Worksheet
对象的move_range
方法的translate
参数设置为True
,那么会对移动的 Excel 单元格的公式进行转换,公式中使用的地址将被重新计算。比如,将公式为=A1
的单元格B1
向下移动一行,那么被覆盖的单元格B2
的公式将是=A2
。
需要说明的是,对公式进行转换并不表示会移动公式所引用的单元格,除非这些单元格本身处于被移动的区域中。
Python openpyxl 包的 Worksheet 对象无法正常移动拥有数组公式的 Excel 单元格
无论是转换还是不转换公式,openpyxl
Worksheet
对象的move_range
方法都无法可靠的移动拥有数组公式的 Excel 单元格。当translate
参数为False
时,单元格的数组公式可能丢失,当translate
参数为True
时,将导致异常的发生。
在 Excel 文件Goods.xlsx
的Pens
工作表中,单元格C1
,C2
和C3
,包含了对区域A1:B3
的计算公式,我们调用Worksheet
对象的move_range
方法来移动他们,并将translate
参数设置为True
,以确保移动后公式计算的结果依然准确。
# 请将命令行跳转至 Goods.xlsx 所在的目录,然后运行此脚本文件
from openpyxl import open
workbook = open('Goods.xlsx')
worksheet = workbook['Pens']
# 移动包含数据和公式单元格,并转换公式
worksheet.move_range('A1:C3', 1, 1, True)
workbook.save('Move.xlsx')
使用 Python openpyxl 包的 Worksheet 对象合并或取消合并 Excel 单元格
Pythonopenpyxl
包的Worksheet
对象的merge_cells
方法,可用于合并 Excel 工作表中某个区域内的所有单元格,合并之后,原本区域左上角的单元格将占据整个区域,并可以通过该单元格原本的地址来访问他。如果只给出一个单元格,那么合并操作不会产生任何效果。
Pythonopenpyxl
包的Worksheet
对象的unmerge_cells
方法,可用于取消合并 Excel 工作表中被合并的单元格,你需要为unmerge_cells
方法指明取消合并的区域,该区域应该与之前进行合并操作的区域一致。
worksheet.merge_cells(range_string=None, start_row=None, start_column=None, end_row=None, end_column=None)
worksheet.unmerge_cells(range_string=None, start_row=None, start_column=None, end_row=None, end_column=None)
- range_string 参数
range_string
参数为表示被合并或取消合并的单元格区域的表达式,如果忽略或设置为None
,则需要给出merge_cells
方法的参数start_row
,start_column
,end_row
和end_column
。- start_row 参数
start_row
参数是一个整数,表示被合并或取消合并的区域开始于第几行。- start_column 参数
start_column
参数是一个整数,表示被合并或取消合并的区域开始于第几列。- end_row 参数
end_row
参数是一个整数,表示被合并或取消合并的区域结束于第几行。- end_column 参数
end_column
参数是一个整数,表示被合并或取消合并的区域结束于第几列。
被 Python openpyxl 包的 Worksheet 对象合并的 Excel 单元格将成为只读的
除了左上角的 Excel 单元格,被合并区域内的其他单元格将被转换为openpyxl
包的MergedCell
对象,其值或公式会被清空并成为只读的。如果被合并的 Excel 单元格通过unmerge_cells
方法取消了合并,那么相关的MergedCell
对象将重新转换为支持写入的Cell
对象。
在下面的示例中,Excel 单元格B2
并不位于被合并区域的左上角,因此B2
的公式在合并之后被清空。
# 请将命令行跳转至 Goods.xlsx 所在的目录,然后运行此脚本文件
from openpyxl import open
workbook = open('Goods.xlsx')
worksheet = workbook['Flowers']
print(f'合并之前的 B2 为 {worksheet["B2"].value}')
# 合并区域 A1:B2 之后,立即取消合并
worksheet.merge_cells('A1:B2')
print(f'合并之后的 B2 为 {worksheet["B2"].value}')
worksheet.unmerge_cells(start_row=1, start_column=1, end_row=2, end_column=2)
合并之前的 B2 为 =B1
合并之后的 B2 为 None
使用 Python openpyxl 包的 Worksheet 对象获取 Excel 工作表中所有被合并的区域
Pythonopenpyxl
包的Worksheet
对象的merged_cells
变量是一个MultiCellRange
对象,可用于表示 Excel 工作表中所有被合并的区域,通过该对象和in
关键字,你可判断某个 Excel 单元格是否已经被合并。
worksheet.merged_cells
# …
# 合并区域 B2:C3,D4:H6
worksheet.merge_cells('B2:C3')
worksheet.merge_cells('D4:H6')
# 判断单元格 E3,D4 是否被合并了
print(f'单元格 E3 被合并了吗?{"E3" in worksheet.merged_cells}')
print(f'单元格 D4 被合并了吗?{"D4" in worksheet.merged_cells}')
单元格 E3 被合并了吗?False
单元格 D4 被合并了吗?True
使用 Python openpyxl 包的 Worksheet 对象计算包含 Excel 工作表所有已用单元格的最小区域
Pythonopenpyxl
包的Worksheet
对象的calculate_dimension
方法和dimensions
属性,可用于计算包含 Excel 工作表已用单元格的最小区域,并返回该最小区域的表达式。Excel 已用单元格可能包括值为空的单元格,比如,一个没有数据但被设置了背景颜色的单元格。
worksheet.calculate_dimension()
worksheet.dimensions
Pythonopenpyxl
包的ReadOnlyWorksheet
对象的calculate_dimension
方法,与Worksheet
对象的calculate_dimension
方法类似,只不过ReadOnlyWorksheet
对象的calculate_dimension
方法增加了一个参数force
。出于对性能的考虑,如果一个 Excel 工作表尚未确定最大行和最大列,那么默认情况下,调用calculate_dimension
方法会导致异常,此时可将参数force
设置为True
,以强制计算未确定的最大行和最大列。
readonlyworksheet.calculate_dimension(force=False)
- force 参数
force
参数表示是否强制计算已用单元格的最小区域,默认为False
,不强制计算。
Python openpyxl 包的 Worksheet 对象所计算的已用单元格最小区域可能不准确
openpyxl
Worksheet
对象的calculate_dimension
方法,会通过该对象的_cells
变量来获取其包含的单元格的最小坐标和最大坐标,以确定整个 Excel 工作表的最小行,最小列,最大行,最大列以及最小区域。当使用Worksheet
访问某个单元格时,新的单元格可能会被添加至_cells
,从而导致最小行,最小列,最大行,最大列,最小区域的改变,即便被访问的单元格中没有任何数据。
与Worksheet
对象不同,openpyxl
ReadOnlyWorksheet
对象的calculate_dimension
方法采用了不同的运算逻辑,其返回的最小区域并不会随意改变。
在下面的例子中,我们分别通过Worksheet
和ReadOnlyWorksheet
对象访问单元格E5
,该单元格不在原有最小区域B2:C3
之内,输出结果表明Worksheet
对象的calculate_dimension
方法的计算结果发生了变化。
# 请将命令行跳转至 Goods.xlsx 所在的目录,然后运行此脚本文件
from openpyxl import load_workbook
empty = load_workbook('Goods.xlsx')['Empty']
# C3 是一个值为空但拥有背景颜色的单元格
print(empty['C3'])
print(f'最小区域 {empty.dimensions}')
# 访问 E5 导致最小区域改变
empty['E5']
print(f'访问 E5 后的最小区域 {empty.calculate_dimension()}')
r_empty = load_workbook('Goods.xlsx', True)['Empty']
# 对于只读工作表,访问 E5 不会导致最小区域改变
r_empty['E5']
print(f'只读工作表访问 E5 后的最小区域 {r_empty.calculate_dimension()}')
<Cell 'Empty'.C3>
最小区域 B2:C3
访问 E5 后的最小区域 B2:E5
只读工作表访问 E5 后的最小区域 B2:C3
Pythonopenpyxl
包的ReadOnlyWorksheet
对象的reset_dimensions
方法,会将ReadOnlyWorksheet
对象计算的最大行和最大列设置为None
,这导致在调用calculate_dimension
方法时,需要把参数force
设置为True
,以重新计算最大行和最大列,否则会出现异常。
readonlyworksheet.reset_dimensions()
# …
# 重置最大行和最大列
r_empty.reset_dimensions()
# ERROR 需要将 force 参数设置为 True
r_empty.calculate_dimension()
ValueError: Worksheet is unsized, use calculate_dimension(force=True)
使用 Python openpyxl 包的 Worksheet 对象获取拥有数组公式的 Excel 单元格及其影响区域
Pythonopenpyxl
包的Worksheet
对象的array_formulae
属性,返回一个 Python 字典,用于表示 Excel 工作表中所有拥有数组公式的单元格及其影响的区域,字典键值对的键为拥有数组公式的单元格的地址,字典键值对的值为数组公式所影响的区域对应的表达式,该区域中的单元格将存储公式的计算结果。比如,{'E1':'E1:E3'}
表示单元格E1
具有数组公式,该公式的计算结果存储在区域E1:E3
中。
worksheet.array_formulae
使用 Python openpyxl 包的 Worksheet 对象获取和设置 Excel 工作表的名称(标题)
Pythonopenpyxl
包的Worksheet
和WriteOnlyWorksheet
对象的title
属性,可用于获取或设置 Excel 工作表的名称(标题)。Pythonopenpyxl
包的ReadOnlyWorksheet
对象的title
变量,用于表示 Excel 工作表的名称,对该变量进行修改并没有太大意义,因为无法将其保存至 Excel 文件。
worksheet|writeonlyworksheet|readonlyworksheet.title
worksheet|writeonlyworksheet|readonlyworksheet.title = name
- name 值
name
为 Excel 工作表的名称。
# 请将命令行跳转至 Goods.xlsx 所在的目录,然后运行此脚本文件
from openpyxl import load_workbook
workbook = load_workbook('Goods.xlsx')
# 修改工作表 Tables 的名称,并保存为 Name.xlsx
workbook['Tables'].title = 'New Tables'
workbook.save('Name.xlsx')
使用 Python openpyxl 包的 Worksheet 对象获取和设置 Excel 工作表的显示状态
Pythonopenpyxl
包的Worksheet
,WriteOnlyWorksheet
和ReadOnlyWorksheet
对象的sheet_state
变量,可用于获取或设置 Excel 工作表的显示状态(是否被隐藏),当然,修改ReadOnlyWorksheet
对象的sheet_state
变量意义不大,因为无法进行保存。sheet_state
变量的有效取值有以下几种。
- 'visible'
'visible'
对应了Worksheet
的类变量SHEETSTATE_VISIBLE
,表示 Excel 工作表处于显示状态。- 'hidden'
'hidden'
对应了Worksheet
的类变量SHEETSTATE_HIDDEN
,表示 Excel 工作表处于隐藏状态,一般可通过 Office 软件重新显示。- 'veryHidden'
'veryHidden'
对应了Worksheet
的类变量SHEETSTATE_VERYHIDDEN
,表示 Excel 工作表处于隐藏状态,且无法通过 Office 软件重新显示(由具体的 Office 软件决定)。
worksheet|writeonlyworksheet|readonlyworksheet.sheet_state
worksheet|writeonlyworksheet|readonlyworksheet.sheet_state = state
- state 值
state
为 Excel 工作表的显示状态。
# …
workbook = load_workbook('Goods.xlsx')
# 隐藏工作表 Pens,Cups
workbook['Pens'].sheet_state = 'hidden'
workbook['Cups'].sheet_state = 'veryHidden'
workbook.save('Hidden.xlsx')
使用 Python openpyxl 包的 Worksheet 对象获取 Excel 工作表所隶属的工作簿
Pythonopenpyxl
包的Worksheet
,WriteOnlyWorksheet
和ReadOnlyWorksheet
对象的parent
属性,表示了 Excel 工作表所隶属的工作簿对象。如果 Excel 工作表不属于任何工作簿,那么parent
属性将返回空值None
。
worksheet|writeonlyworksheet|readonlyworksheet.parent
from openpyxl import Workbook
worksheet = Workbook(True).create_sheet()
worksheet.title = 'MySheet'
# 通过 parent 属性获取工作表对应的工作簿对象
worksheet.parent.save('Parent.xlsx')
使用 Python openpyxl 包的 Worksheet 对象获取和设置 Excel 工作表的保护信息
Pythonopenpyxl
包的Worksheet
和WriteOnlyWorksheet
对象的protection
变量是一个SheetProtection
对象,该对象包含了 Excel 工作表的保护信息。这些保护信息仅被 Office 软件用于限制用户的行为,并不会对 Pythonopenpyxl
包的行为造成影响。
worksheet|writeonlyworksheet.protection
# …
workbook = load_workbook('Goods.xlsx')
protection = workbook['Flowers'].protection
# 启用对工作表 Flowers 的保护
protection.sheet = True
# 允许用户在 Office 软件中删除行或列
protection.deleteColumns = False
protection.deleteRows = False
workbook.save('Protection.xlsx')
Python openpyxl 包的 Worksheet 对象的其他特性
以下是与openpyxl
包的Worksheet
,ReadOnlyWorksheet
或WriteOnlyWorksheet
对象相关,但不太重要的一些特性,这些特性可能并非从 Microsoft Excel 文件获取,只是由openpyxl
包给出了固定值。
- encoding 属性
Workbook
,ReadOnlyWorksheet
和WriteOnlyWorksheet
对象的encoding
属性,用于表示 Excel 工作表所属的工作簿的编码,他由openpyxl
指定为'utf-8'
。
源码
src/zh/openpyxl/worksheets·codebeatme/office-programming·GitHub