[Python] openpyxlの利用 〜 フィルター カスタム〜

Pocket
LINEで送る

カスタムフィルターの条件を設定

custom  = openpyxl.worksheet.filters.CustomFilter(operator='greaterThanOrEqual', val='3')

解説
CustomFilterを使い、条件(今回ではgreaterThanOrEqualなので「以上」)と判定する値(今回は「3」)を設定する。

カスタムフィルター郡を設定

customs = openpyxl.worksheet.filters.CustomFilters(customFilter=[custom])

解説
条件は範囲選択など複数条件の組み合わせの場合もあります。
そのため、先ほど作成したカスタムフィルターをCustomFiltersのリストに設定します。
今回は条件一つだけですが、複数ある場合はリストで設定を行う。

フィルターする列を設定

filterc = openpyxl.worksheet.filters.FilterColumn(colId=0,customFilters=customs)

解説
準備ができたカスタムフィルター郡をどの列に設定するかをFilterColumnで指定します。colIdに列の番号、customFiltersにカスタムフィルター郡を指定します。

該当行を非表示

for row in wsheet.iter_rows(min_row=2):
    if row[0].value < 3:
        wsheet.row_dimensions[row[0].row].hidden = True

解説
openpyxl ではフィルタ条件の設定をされたまでですので、実際の行は手動で非表示にします。

今回サンプルで作成したコード

# -*- coding:utf-8 -*-

import openpyxl

wbook = openpyxl.load_workbook('temp.xlsx')
wsheet = wbook.active

wsheet.auto_filter.ref = 'A1:C6'
custom  = openpyxl.worksheet.filters.CustomFilter(operator='greaterThanOrEqual', val='3')
customs = openpyxl.worksheet.filters.CustomFilters(customFilter=[custom])
filterc = openpyxl.worksheet.filters.FilterColumn(colId=0,customFilters=customs)
wsheet.auto_filter.filterColumn = [filterc]

for row in wsheet.iter_rows(min_row=2):
    if row[0].value < 3:
        wsheet.row_dimensions[row[0].row].hidden = True

wbook.save('temp3.xlsx')

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

この記事のトラックバック用URL