openpyxl表格更改表格现有(自动)fi

2024-09-27 07:25:32 发布

您现在位置:Python中文网/ 问答频道 /正文

创建表时,Excel会自动为所有列创建筛选器

然后在我的Python+openpyxl代码中,我想过滤掉一些数据,但是我不知道如何检索和更改现有的过滤器

考虑我的表可能有“Fail”、“Pass”、“Skipped”和空值 我只想看到“失败”和“通过”

如果我尝试向表中添加一个筛选器,它似乎会被忽略:

ws.auto_filter.add_filter_column(1,
                                 ["Fail", "Pass"])

随后添加一组数据,并相应地更新表“ref”。 不过,在Excel中打开文件时,会显示所有选定的筛选值—根本不进行筛选

有什么线索吗? 谢谢


更新:

我注意到table对象有自己的autoFilter字段,所以我认为创建一个AutoFilter并相应地设置它是公平的。 它看起来会成功,但当保存我的文件时,这个过滤器丢失了

我往下看,发现openpyxl/worksheet/_writer.pywrite_tables(self)正在呼叫table._initialise_columns(),它把我的过滤器弄坏了

好的,所以我也需要初始化我的table.tableColumns属性,一开始的简单任务变成了隐藏在函数initialise_columns()initialise_filters()中的许多锅炉板

    table = Table(displayName=table_name,
                  ref=ref_range,
                  tableColumns=initialise_columns(),
                  autoFilter=initialise_filters(),
                  **kwargs)
    ws.add_table(table)

更改表数据后,我现在必须更新两个引用:

    table .ref = ref
    table .autoFilter.ref = ref

好吧,那它“几乎”起作用了。。。 我可以打开文件与Excel没有错误,过滤器出现,我有过滤器值按预期选择,但数据没有得到过滤

如果单击筛选值(即使在此之后所选项目相同),则Excel将应用筛选,结果与预期一致


Tags: columns文件数据refadd过滤器wstable

热门问题