openpyxl - 活动工作表被分组到选定的工作表

Posted

技术标签:

【中文标题】openpyxl - 活动工作表被分组到选定的工作表【英文标题】:openpyxl - Active sheet is grouped to selected sheet 【发布时间】:2017-11-15 13:56:23 【问题描述】:

使用 openpyxl,我加载了一个现有的工作簿,并设置了一个新的活动表。 然后,当在 Excel 中打开工作簿时,我注意到新的活动工作表在使用 openpyxl 更改之前已与原始工作表分组。

有没有办法取消对工作表的分组或对此行为的任何解释?

wb = openpyxl.load_workbook("test.xlsx")
wb.active = 3
wb.save("test.xlsx")

在这里运行之后是我正在谈论的“分组”表:Grouped Sheets Image

就好像我在代码中设置的活动工作表(“四”)没有完全更改所选工作表,而是在最初选择的工作表(“一”)旁边选择新工作表

问题再讨论:https://bitbucket.org/openpyxl/openpyxl/issues/878/index-0-worksheet-creation-in-existing

谢谢!

【问题讨论】:

请发布您的代码。 “分组”是什么意思?为了让其他人帮助您,您应该提供您正在尝试做的事情的代码。 我的意思是:support.office.com/en-us/article/… Bitbucket 上的讨论解释了如何做到这一点…… @CharlieClark 该讨论中给出的解决方案在我尝试时不起作用(它说 wb.views[0] 尽管 Workbook 对象甚至没有该属性)检查我写的解决方案 【参考方案1】:

我已经通过将名为 tabSelected 的属性更改为 False 解决了这个问题。

您可以通过获取要取消选择的选项卡(在本例中为名为“One”的选项卡)来访问该属性,如下面的代码所示。

wb = openpyxl.load_workbook("test.xlsx")
wb.active = 3
wb["One"].views.sheetView[0].tabSelected = False
wb.save("test.xlsx")

第三行将第一个选项卡变为未选中,因此唯一选中的选项卡是第四个选项卡。 该解决方案更像是解决这个奇怪问题的一种解决方法,但无论如何它仍然有效。

【讨论】:

【参考方案2】:

我的解决方案是基于 nir9 的解决方案构建的。 我取消了所有工作表的活动状态,然后制作了我想要活动的工作表。

wb = openpyxl.load_workbook("test.xlsx")
template_copy = wb.copy_worksheet(template)
new_wk_sheet = wb['Template Copy']
new_wk_sheet.title = last_worksheet
for sheet in wb:
        wb[sheet.title].views.sheetView[0].tabSelected = False
wb.active = new_wk_sheet
wb.save("test.xlsx")

【讨论】:

以上是关于openpyxl - 活动工作表被分组到选定的工作表的主要内容,如果未能解决你的问题,请参考以下文章

当其他Excel实例具有焦点时,无法获取活动工作表或选定范围

处理Excel电子表格

python中Excel文件处理库-openpyxl的使用

DB2表被锁,如何解锁

复制单元格样式openpyxl

20160323作业