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

我正在尝试使用openpyxl和Python对电子表格进行sorting。 我已阅读文件,我不太明白这个网页。 我期待它添加自动筛选器下拉箭头或sorting我的电子表格,它是返回错误。 这是我的代码

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')”应该给我我想要的结果。 (是的,我知道它现在是注释行,其余的代码运行良好,所以我评论它)。

当我在代码中有这样的行时,我得到的错误 – “工作表”对象没有属性“自动filter”,但根据文件,它看起来像它。 http://openpyxl.readthedocs.org/en/latest/_modules/openpyxl/worksheet/filters.html#AutoFilter 。

如果有人能帮我解释一下为什么这个失败,或者这些文件意味着什么会很好。

文件中的这个陈述对我来说尤其困惑:

“不要自己创build自动filter,它是通过以下方法创build的:class: ~openpyxl.worksheet.Worksheet 。您可以使用via:attr: ~~openpyxl.worksheet.Worksheet.auto_filter属性。

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

更新:@ crussell的回复工作,它将自动filter添加到我的电子表格。 但是,它仍然没有将sorting条件添加到适当的列。

请参阅: 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' ,其中你想要过滤的单元格的范围。

查看AutoFilter.add_sort_condition()函数的文档和源代码后,它看起来像您提供的ref可能需要更改为包含行索引,例如“C1:C120”。 你用特定的行号来试试吗? 另外,请务必在函数声明下面看看关于refvariables的注释:

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

如果你没有跟随我来自哪里。 欢呼声,祝你好运!

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

然后我打开了生成的电子表格。 该列显示了filter! 但数据并未在电子表格中实际过滤。 我不得不点击“数据”标签,然后点击“重新申请”filter。

所以它看起来像添加一个sorting或过滤列的作品,除了它实际上从来没有实际应用sorting或filter。

我一直在寻找一个function,将应用filter,但还没有运气。 如果有人有想法,我很乐意听到他们!

谢谢!

根据文档openpyxl可以定义filter和/或sorting,但不适用它们!

他们只能在Excel中应用