繁体   English   中英

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

[英]Sorting and auto filtering Excel with 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')”这一行应该给我我想要的结果。 (是的,我知道它目前是一个注释行。我的其余代码在没有该行的情况下运行正常,所以我对它进行了评论。)

当我在代码中有那行时我得到错误 - 'Worksheet'对象没有属性'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的回复有效,它将自动过滤器添加到我的电子表格中。 但是,它仍然没有将排序条件添加到适当的列。

请参见: 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' ,其中包含您要过滤的单元格范围。

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

它们只能在Excel中应用

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

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

所以看起来添加排序或过滤列似乎有效,除非它实际上从未应用排序或过滤器。

我一直在寻找一个将应用过滤器的功能,但还没有任何运气。 如果有人有想法,我很乐意听到他们!

谢谢!

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM