使用openpyxl排序和自动过滤Excel

Nic*_*art 5 python excel openpyxl

我正在尝试使用openpyxl和Python对电子表格进行排序。我已经阅读了文档,但是我对此页面不太了解。我期望它添加自动过滤器下拉箭头或对我的电子表格进行排序,并且返回错误。这是我的代码

wb = openpyxl.load_workbook('report.xlsx')
ws = wb.active
ws['A2'] = "Store"
ws['B2'] = "Manager"
ws['C2'] = "Zone"
ws.column_dimensions.group('F','DU',hidden=True)
#ws.AutoFilter.add_sort_condition('C:C')
wb.save("report.xlsx")
Run Code Online (Sandbox Code Playgroud)

根据文档,看起来“ ws.AutoFilter.add_sort_condition('C:C')”行应该给我我想要的结果。(是的,我知道它当前是一个注释行。如果没有该行,我的其余代码都可以正常运行,所以我对其进行了注释。)

当代码中有该行时,出现错误-“工作表”对象没有属性“自动过滤”,但根据文档,它看起来确实如此。http://openpyxl.readthedocs.org/en/latest/_modules/openpyxl/worksheet/filters.html#AutoFilter

如果有人可以帮助我解释一下为什么会失败或者文档意味着什么,那将是很好的。

这些文件中的陈述让我特别困惑:

“不要自己创建自动过滤器。它是由:class:创建的~openpyxl.worksheet.Worksheet。可以通过:attr:~~openpyxl.worksheet.Worksheet.auto_filter属性使用。”

因为我也尝试过,但也失败了。

更新:@crussell的回复起作用,因为它在我的电子表格中添加了自动过滤器。但是,它仍未将排序条件添加到适当的列。

小智 6

根据文档 openpyxl 可以定义过滤器和/或排序但不应用它们!

它们只能在 Excel 中应用


小智 5

参见此处:http : //openpyxl.readthedocs.org/en/latest/api/openpyxl.worksheet.html?highlight=auto_filter#openpyxl.worksheet.worksheet.Worksheet.auto_filter

auto_filter命令返回AutoFilter对象,因此从某种意义上说它们是同一件事。

您需要的是ws.auto_filter.ref = 'C1:C20' 要过滤的单元格范围。


小智 5

我对此没有完整的答案,但在使用过滤器时我确实发现了一些有趣的东西。我添加了一个过滤列,例如: ws.auto_filter.add_filter_column(1,{},True)

然后我打开了生成的电子表格。该列显示了过滤器!但电子表格中的数据实际上并未被过滤。我必须单击“数据”选项卡,然后单击“重新应用”过滤器。

因此,看起来添加排序或筛选列是有效的,只是它从未实际应用排序或筛选。

我一直在寻找一个可以应用过滤器的函数,但还没有任何运气。如果有人有想法,我很想听听!

谢谢!


And*_*ler 1

查看 AutoFilter.add_sort_condition() 函数的文档和源代码后,您提供的引用看起来可能需要更改为包含行索引,例如“C1:C120”。您是否尝试过使用特定的行号?另外,请务必查看函数声明正下方有关 ref 变量的注释:

http://openpyxl.readthedocs.org/en/latest/_modules/openpyxl/worksheet/filters.html#AutoFilter

如果你不明白我来自哪里。干杯,祝你好运!