如何使用openpyxl取消表格上的自动过滤

问题描述 投票:0回答:4

标题已经说明了一切:)

但是,我仍然使用

Table
中的
openpyxl.worksheet.table
类来定义我创建的 Excel 文件中的表格。我的问题是,创建的表格在我想要删除的第一行上有
Filter
(从脚本中,而不是通过打开 Excel 文件)。

这是Table类的调用:

tab = Table(displayName='Table_{}'.format(table_name.replace(' ', '_')),
                                          ref="{}:{}".format(table_start, table_end))

这就是我得到的:

enter image description here

这就是我想要得到的:

enter image description here

我在 OpenPyXL Docs 中搜索它,但发现只添加了该过滤...

有什么办法可以去掉吗?

非常感谢!

python-3.x openpyxl
4个回答
1
投票
wb = load_workbook(filename="data.xlsx")
ws = wb["Sheet1"]
ws.auto_filter.ref = None
for i in range(2, ws.max_row + 1):
    ws.row_dimensions[i].hidden = False
wb.save("data.xlsx")

0
投票

我刚刚遇到了这个问题,这就是我解决它的方法。

#Opens the file
wb = load_workbook(filename = 'somefile')

#Set worksheet
ws = wb['sheetname'] # Tab name

#set table
tbl = ws.tables["tablename"]

#removes all filters 
tbl.autoFilter.filterColumn.clear()

0
投票

文档实际上声称带有标题的表需要“过滤器”。无论如何,一些逆向工程可以帮助我们实现这一目标。我发现 FilterColumn 使用名为

hiddenButton
的属性控制此设置。当它为“无”时,过滤器按钮将显示在所有列上。但是,我们可以在我们选择的任何列上关闭它们,如下所示:

from openpyxl.worksheet.filters import FilterColumn, AutoFilter

# get table
tbl = ws.tables["tablename"]

# set up filter for each column
indexes = [1,2,5]
fc = [FilterColumn(colId=col, hiddenButton=True) for col in indexes]

# set autoFilter on table
table.autoFilter = AutoFilter(ref=table.ref, filterColumn=fc)

设置

hiddenButton = True
将关闭过滤器按钮。如果您正在编写新表,我看不到其他可行的解决方案,因此这应该可以解决该问题。


-1
投票

你好,

tab = Table( displayName='Table_{}'.format(table_name.replace(' ', '_'))
       , ref="{}:{}".format(table_start, table_end)
       , headerRowCount = 0 # default is 1
       )
© www.soinside.com 2019 - 2024. All rights reserved.