使用openpyxl对Excel进行排序和自动过滤

时间:2015-09-16 17:20:12

标签: 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")

根据文件,它看起来像是" 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的回复有效,它将自动过滤器添加到我的电子表格中。但是,它仍然没有将排序条件添加到适当的列。

4 个答案:

答案 0 :(得分: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' 对于要过滤的单元格范围。

答案 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

如果您没有关注我来自哪里。干杯,祝你好运!