본문 바로가기
프로그래밍/엑셀(Excel)

[XlsxWriter] 데이터 필터(Auto Filter) 적용하기 (feat. autofilter, filter_column)

by 부자 꽁냥이 2022. 11. 15.

이번 포스팅에서는 XlsxWriter를 이용하여 엑셀(Excel)에서 데이터 필터를 적용하는 방법에 대해서 알아보고자 한다.


   데이터 필터(Auto Filter) 적용하기 (feat. autofilter, filter_column)

데이터 필터를 적용하는 과정은 아래와 같은 3단계로 이루어진다.

 

1) 필터 생성, 2) 필터 조건 정의, 3) 조건 만족 안 하는 행 숨김

 

필터 생성은 첫 번째 행의 아래 그림과 같은 화살표 박스를 생성해주는 것이고 

필터 정의는 체크 박스에 체크 또는 사용자 지정 필터를 만들어 주는 것이다. 하지만 XlsxWriter 문서에 따르면 이렇게 필터를 만들었다고 해서 실제로 필터를 적용하여 행을 추출할 수는 없다고 한다.

출처 : https://xlsxwriter.readthedocs.io/working_with_autofilters.html

따라서 필터가 적용된 것처럼 만들기 위하여 조건을 만족하지 않는 행은 숨김 처리를 추가적으로 해줘야 한다.

 

이제 코드를 통해서 데이터 필터 적용방법을 알아보자. 아래 코드는 데이터를 삽입하고 앞에서 말한 3단계 과정으로 데이터 필터를 적용한 것이다.

 

from xlsxwriter import Workbook

## 데이터 생성
data = [
   ['Region', 'SalesRep', 'Product', 'Units'],
   ['East',   'Tom',      'Apple',    6380],
   ['West',   'Fred',     'Grape',    5619],
   ['North',  'Amy',      'Pear',     4565],
   ['South',  'Sal',      'Banana',   5323],
   ['East',   'Fritz',    'Apple',    4394],
   ['West',   'Sravan',   'Grape',    7195],
   ['North',  'Xi',       'Pear',     5231],
   ['South',  'Hector',   'Banana',   2427],
   ['East',   'Tom',      'Banana',   4213],
   ['West',   'Fred',     'Pear',     3239],
   ['North',  'Amy',      'Grape',    6520],
   ['South',  'Sal',      'Apple',    1310],
   ['East',   'Fritz',    'Banana',   6274],
   ['West',   'Sravan',   'Pear',     4894],
   ['North',  'Xi',       'Grape',    7580],
   ['South',  'Hector',   'Apple',    9814]
]

wb = Workbook('autofilter.xlsx')
ws = wb.add_worksheet()

## 필터 생성
ws.autofilter('A1:D17') ## 또는 ws.autofilter(0, 0, 16, 3)

## 필터 정의
target_col_idx = 0
col_name = data[0][target_col_idx]
ws.filter_column(target_col_idx, f'{col_name} == East') ## 논리 연산자 좌우에 반드시 공백이 있어야한다.

## 조건을 만족하지 않는 행 숨김 처리
for i, row in enumerate(data):
    for j, cell in enumerate(row):
        if j == target_col_idx:
            if i > 0:
                if cell == 'East':
                    pass
                else:
                    ws.set_row(i, options={'hidden':True})
        ws.write(i, j, cell)
        
wb.close()

 

line 26

먼저 autofilter를 이용하여 필터를 생성한다. 이때 autofilter에 필터 적용 범위를 지정해야 한다.

 

line 33

다음으로 filter_column을 이용하여 필터 조건 정의한다. 조건에 사용될 수 있는 연산자는 아래와 같다.

출처 : https://xlsxwriter.readthedocs.io/working_with_autofilters.html

line 36~44

데이터 필터 조건을 정의했다고 해서 실제로 적용되는 것은 아니다. 따라서 조건을 만족하지 않는 행은 숨김 처리하여 마치 필터가 적용된 것처럼 꾸며야 한다. 이때 set_row를 이용하여 숨김 처리할 수 있다.

 

코드를 실행하여 엑셀 파일을 열어보면 Region이 'East'인 행만 추출되었으며 아래 빨간 박스에 깔때기 박스를 클릭하면 'East' 체크 박스에 체크가 된 것을 알 수 있다.

 


댓글


맨 위로