簡體   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