我正在尝试使用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")
根据文件,它看起来像是" ws.AutoFilter.add_sort_condition(' C:C')"应该给我想要的结果。 (是的,我知道它目前是一个注释行。我的其余代码在没有该行的情况下运行正常,所以我对它进行了评论。)
当我在代码中有该行时,我会收到错误 - '工作表'对象没有属性' AutoFilter'但根据文件看来它确实如此。 http://openpyxl.readthedocs.org/en/latest/_modules/openpyxl/worksheet/filters.html#AutoFilter
如果有人可以帮我解释为什么失败或文件意味着什么会很棒。
文件中的这句话对我来说特别困惑:
"不要自己创建自动过滤器。它由:class:
~openpyxl.worksheet.Worksheet
创建。 您可以使用via:attr:~~openpyxl.worksheet.Worksheet.auto_filter
属性。"
因为我也尝试了它也失败了。
更新:@ crussell的回复有效,它将自动过滤器添加到我的电子表格中。但是,它仍然没有将排序条件添加到适当的列。
答案 0 :(得分:5)
auto_filter命令返回AutoFilter对象,所以在某种意义上它们是相同的。
您需要的是ws.auto_filter.ref = 'C1:C20'
对于要过滤的单元格范围。
答案 1 :(得分:4)
根据文档,openpyxl可以定义过滤器和/或排序,但不适用它们!
它们只能在Excel中应用
答案 2 :(得分:3)
我没有完整的答案,但我确实在使用过滤器时发现了一些有趣的东西。
我添加了一个过滤柱,
例如:
ws.auto_filter.add_filter_column(1,{},True)
然后我打开了生成的电子表格。该栏显示了过滤器!但数据实际上并未在电子表格中过滤。我不得不点击"数据"选项卡并单击"重新应用"过滤器。
所以看起来添加排序或过滤列似乎有效,除非它实际上从未实际应用排序或过滤器。
我一直在寻找一个能应用过滤器的功能,但还没有任何运气。如果有人有想法,我很乐意听到他们的声音!
谢谢!
答案 3 :(得分:1)
在查看AutoFilter.add_sort_condition()函数的文档和源代码之后,看起来您提供的ref可能需要更改为包含行索引,例如" C1:C120&# 34 ;,例如。您是否尝试过具体的行号?另外,请务必查看函数声明正下方的ref变量注释:
http://openpyxl.readthedocs.org/en/latest/_modules/openpyxl/worksheet/filters.html#AutoFilter
如果您没有关注我来自哪里。干杯,祝你好运!