openpyxl 设置活动 Sheet
openpyxl Set Active Sheet
文档显示工作簿 object 有一个 active
属性
@property
def active(self):
"""Get the currently active sheet"""
return self._sheets[self._active_sheet_index]
@active.setter
def active(self, value):
"""Set the active sheet"""
self._active_sheet_index = value
如果wb = openpyxl.Workbook()
调用wb.active
给出默认第一个作品的标题sheet即Sheet
。
假设我创建了另一个 sheet ws1 = wb.create_sheet('another sheet')
,我如何 "set" 将其设为活动 sheet?
文档显示有一个活动 "setter" 也称为活动。它需要一个额外的参数,一个整数索引值。
为什么wb.active(1)
不起作用?我不是用
调用函数吗
我不熟悉整个 getter 和 setter 的事情。但是,我想出了答案。现在我非常困惑为什么它会这样工作——因为它看起来不像典型的函数调用。无论如何,要使用 "setter" 你会写
wb.active = 1
which uh "eats" 1 =) 并更改活动 sheet。只是想着至少还有一个人可能会问类似的问题。
更新: openpyxl
已更新以允许直接设置活动 sheet:
wb.active = wb['sheet_name']
在演示中使用以下内容:
# Set Active Sheet
wb.active = wb['charlie']
带有演示的原始过时答案更改为保存工作簿,允许验证任何选定的过程:
这是另一种通过 sheetname 在工作簿中设置活动 sheet 的方法。有类似的答案(openpyxl get sheet by name
例如涉及打开一个关闭的文件)和其他人没有足够的细节让我理解这个功能。
Manipulating a workbook in memory 教程是开始的地方,在我使用本教程演示的答案下没有活动的 sheet 名称,它实际上是 sheet活跃指数。如果添加或删除 sheet 会更改索引位置的 sheet,则不同的 sheet 将变为活动状态。
最初我认为 .create_sheet
使 sheet 处于活动状态,但后来我意识到我只是在活动 sheet 索引处创建了 sheet,而该索引恰好为 0。索引可以设置为大于 sheet 数量的值,并且文档还包含一条注释“如果 sheet 设置为活动被隐藏 return 下一个可见 sheet 或 None".
冗长的简短回答
for i, s in enumerate(wb.sheetnames):
if s == 'charlie':
break
wb.active = i
随时改进此答案。
演示
C:\Users\User\Documents>py
Python 3.10.2 (tags/v3.10.2:a58ebcc, Jan 17 2022, 14:12:15) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> # http://openpyxl.readthedocs.io/en/2.5/tutorial.html#create-a-workbook
>>> from openpyxl import Workbook
>>> wb = Workbook()
>>> print(wb.sheetnames)
['Sheet']
>>>
>>> print(wb.active)
<Worksheet "Sheet">
>>> ws = wb.active
>>> ws.title = "alpha"
>>>
>>> ws = wb.create_sheet('bravo')
>>> print(wb.sheetnames)
['alpha', 'bravo']
>>> print(wb.active)
<Worksheet "alpha">
>>>
>>> ws = wb.create_sheet('charlie',0) # insert at index 0
>>> print(wb.sheetnames)
['charlie', 'alpha', 'bravo']
>>> print(wb.active)
<Worksheet "charlie">
>>>
>>>
>>> wb.active = 1
>>> print(wb.active)
<Worksheet "alpha">
>>>
>>> wb.active = 2
>>> print(wb.active)
<Worksheet "bravo">
>>>
>>> wb.active = 0
>>> print(wb.active)
<Worksheet "charlie">
>>>
>>> wb.active = 3
>>> print(wb.active)
None
>>>
>>> ws = wb.create_sheet(index=0) # insert at index
>>> print(wb.active)
<Worksheet "bravo">
>>> print(wb.sheetnames)
['Sheet', 'charlie', 'alpha', 'bravo']
>>>
>>>
>>> ws_active = wb.get_sheet_by_name('charlie')
<stdin>:1: DeprecationWarning: Call to deprecated function get_sheet_by_name (Use wb[sheetname]).
>>> ws_active = wb['charlie']
>>> print(wb.active)
<Worksheet "bravo">
>>> ws4 = wb["charlie"] # from
>>> print(wb.active)
<Worksheet "bravo">
>>>
>>> # Set Active Sheet
>>> for i, s in enumerate(wb.sheetnames):
... if s == 'charlie':
... break
...
>>> wb.active = i
>>>
>>> # Confirm Active Sheet
>>> print(wb.active)
<Worksheet "charlie">
>>>
>>> # Open workbook to verify
>>> wb.save("Demo.xlsx")
>>>
作为参考,另一种有用的方法 - 特别是当您想通过名称调用 sheet 时:
wb = openpyxl.load_workbook(path/to/your/spreadsheet)
worksheet_names = wb.sheetnames # this variable is presented as a list, so we can manipulate it accordingly, but finding the index number using the name.
sheet_index = worksheet_names.index(<name of your target sheet>) # this will return the index number where your worksheet resides. It should be mentioned that this sheet name must exist in the worksheet_names list variable
wb.active = sheet_index # this will activate the worksheet by index
您现在应该在您选择的 sheet 中工作,但这样做的好处是您可以按名称而不是按号码呼叫 sheet。这一点是我提供此附加答案的原因。
如果知道tab的名字,可以写一行:
book.active = book.sheetnames.index('YourSheetName')
sheets = wb.get_sheet_names()
for i in sheets:
if i == 'xyz':
wb.active = i
break
或者你可以简单地做
xyz_sheet = wb.get_sheet_by_name('xyz')
wb.active = xyz_sheet
工作簿(即 wb)的 xyz sheet 现在处于活动状态
这是按名称设置活动工作表的最简单方法:
active_sheet = wb['sheet name']
文档显示工作簿 object 有一个 active
属性
@property
def active(self):
"""Get the currently active sheet"""
return self._sheets[self._active_sheet_index]
@active.setter
def active(self, value):
"""Set the active sheet"""
self._active_sheet_index = value
如果wb = openpyxl.Workbook()
调用wb.active
给出默认第一个作品的标题sheet即Sheet
。
假设我创建了另一个 sheet ws1 = wb.create_sheet('another sheet')
,我如何 "set" 将其设为活动 sheet?
文档显示有一个活动 "setter" 也称为活动。它需要一个额外的参数,一个整数索引值。
为什么wb.active(1)
不起作用?我不是用
我不熟悉整个 getter 和 setter 的事情。但是,我想出了答案。现在我非常困惑为什么它会这样工作——因为它看起来不像典型的函数调用。无论如何,要使用 "setter" 你会写
wb.active = 1
which uh "eats" 1 =) 并更改活动 sheet。只是想着至少还有一个人可能会问类似的问题。
更新: openpyxl
已更新以允许直接设置活动 sheet:
wb.active = wb['sheet_name']
在演示中使用以下内容:
# Set Active Sheet
wb.active = wb['charlie']
带有演示的原始过时答案更改为保存工作簿,允许验证任何选定的过程:
这是另一种通过 sheetname 在工作簿中设置活动 sheet 的方法。有类似的答案(openpyxl get sheet by name 例如涉及打开一个关闭的文件)和其他人没有足够的细节让我理解这个功能。
Manipulating a workbook in memory 教程是开始的地方,在我使用本教程演示的答案下没有活动的 sheet 名称,它实际上是 sheet活跃指数。如果添加或删除 sheet 会更改索引位置的 sheet,则不同的 sheet 将变为活动状态。
最初我认为 .create_sheet
使 sheet 处于活动状态,但后来我意识到我只是在活动 sheet 索引处创建了 sheet,而该索引恰好为 0。索引可以设置为大于 sheet 数量的值,并且文档还包含一条注释“如果 sheet 设置为活动被隐藏 return 下一个可见 sheet 或 None".
冗长的简短回答
for i, s in enumerate(wb.sheetnames):
if s == 'charlie':
break
wb.active = i
随时改进此答案。
演示
C:\Users\User\Documents>py
Python 3.10.2 (tags/v3.10.2:a58ebcc, Jan 17 2022, 14:12:15) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> # http://openpyxl.readthedocs.io/en/2.5/tutorial.html#create-a-workbook
>>> from openpyxl import Workbook
>>> wb = Workbook()
>>> print(wb.sheetnames)
['Sheet']
>>>
>>> print(wb.active)
<Worksheet "Sheet">
>>> ws = wb.active
>>> ws.title = "alpha"
>>>
>>> ws = wb.create_sheet('bravo')
>>> print(wb.sheetnames)
['alpha', 'bravo']
>>> print(wb.active)
<Worksheet "alpha">
>>>
>>> ws = wb.create_sheet('charlie',0) # insert at index 0
>>> print(wb.sheetnames)
['charlie', 'alpha', 'bravo']
>>> print(wb.active)
<Worksheet "charlie">
>>>
>>>
>>> wb.active = 1
>>> print(wb.active)
<Worksheet "alpha">
>>>
>>> wb.active = 2
>>> print(wb.active)
<Worksheet "bravo">
>>>
>>> wb.active = 0
>>> print(wb.active)
<Worksheet "charlie">
>>>
>>> wb.active = 3
>>> print(wb.active)
None
>>>
>>> ws = wb.create_sheet(index=0) # insert at index
>>> print(wb.active)
<Worksheet "bravo">
>>> print(wb.sheetnames)
['Sheet', 'charlie', 'alpha', 'bravo']
>>>
>>>
>>> ws_active = wb.get_sheet_by_name('charlie')
<stdin>:1: DeprecationWarning: Call to deprecated function get_sheet_by_name (Use wb[sheetname]).
>>> ws_active = wb['charlie']
>>> print(wb.active)
<Worksheet "bravo">
>>> ws4 = wb["charlie"] # from
>>> print(wb.active)
<Worksheet "bravo">
>>>
>>> # Set Active Sheet
>>> for i, s in enumerate(wb.sheetnames):
... if s == 'charlie':
... break
...
>>> wb.active = i
>>>
>>> # Confirm Active Sheet
>>> print(wb.active)
<Worksheet "charlie">
>>>
>>> # Open workbook to verify
>>> wb.save("Demo.xlsx")
>>>
作为参考,另一种有用的方法 - 特别是当您想通过名称调用 sheet 时:
wb = openpyxl.load_workbook(path/to/your/spreadsheet)
worksheet_names = wb.sheetnames # this variable is presented as a list, so we can manipulate it accordingly, but finding the index number using the name.
sheet_index = worksheet_names.index(<name of your target sheet>) # this will return the index number where your worksheet resides. It should be mentioned that this sheet name must exist in the worksheet_names list variable
wb.active = sheet_index # this will activate the worksheet by index
您现在应该在您选择的 sheet 中工作,但这样做的好处是您可以按名称而不是按号码呼叫 sheet。这一点是我提供此附加答案的原因。
如果知道tab的名字,可以写一行:
book.active = book.sheetnames.index('YourSheetName')
sheets = wb.get_sheet_names()
for i in sheets:
if i == 'xyz':
wb.active = i
break
或者你可以简单地做
xyz_sheet = wb.get_sheet_by_name('xyz')
wb.active = xyz_sheet
工作簿(即 wb)的 xyz sheet 现在处于活动状态
这是按名称设置活动工作表的最简单方法:
active_sheet = wb['sheet name']