[Python] openpyxlの利用 〜 フィルター一致〜

Pocket
LINEで送る

Excelファイルを開きシートを取得

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

解説
すでに存在するExcelファイルを指定して、アクティブになっているシートを取得します。

フィルターの範囲と条件を設定

wsheet.auto_filter.ref = 'A1:C6'
wsheet.auto_filter.add_filter_column(2,words)

解説
auto_filterを使うことでフィルターの範囲(ref)と条件(add_filter_column)を指定します。
この指定の場合、完全一致する単語の複数指定することはできますが、範囲などの条件を指定するとこはできません。その方法についてはまた別途記載します。

上限に該当しない行を非表示

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

解説
openpyxlはOfficeのインストールされていない環境でも動作ができます。
その代償としてExcelないで処理している機能を自分で実装する必要があります。
フィルターでは条件設定はできますが、実際の行は非表示にならないため、自ら設定する必要があります。

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

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

import openpyxl

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

words = [u'Aさん',u'Cさん']

wsheet.auto_filter.ref = 'A1:C6'
wsheet.auto_filter.add_filter_column(2,words)
for row in wsheet.iter_rows(min_row=2):
    if row[2].value not in words:
        wsheet.row_dimensions[row[0].row].hidden = True

wbook.save('temp2.xlsx')

コメントを残す

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

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