Python XlsxWriter - 應用篩選



在 Excel 中,您可以使用邏輯表示式根據條件設定表格資料的篩選器。在 XlsxWriter 的工作表類中,我們有autofilter()方法用於此目的。此方法的必填引數是單元格範圍。這會在標題行中建立下拉選擇器。要應用某些條件,我們有兩種方法可用 - filter_column()filter_column_list()

應用列的篩選條件

在以下示例中,範圍 A1:D51(即單元格 0,0 到 50,3)中的資料用作autofilter()方法的範圍引數。篩選條件'Region == East' 使用filter_column()方法設定在第 0 列(帶有 Region 標題的列)上。

示例

透過將工作表物件的set_row()方法的隱藏選項設定為 true,隱藏資料範圍內不滿足篩選條件的所有行。

import xlsxwriter

wb = xlsxwriter.Workbook('hello.xlsx')
ws = wb.add_worksheet()

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]
)
for row in range(len(data)):
   ws.write_row(row,0, data[row])
   
ws.autofilter(0, 0, 50, 3)

ws.filter_column(0, 'Region == East')

row = 1
for row_data in (data):
   region = row_data[0]
   
   if region != 'East':
      ws.set_row(row, options={'hidden': True})
      
   ws.write_row(row, 0, row_data)
   
   row += 1
wb.close()

輸出

當我們使用 Excel 開啟工作表時,我們會發現只有 Region='East' 的行可見,其他行被隱藏(您可以透過清除篩選器再次顯示它們)。

Filter Criteria1

列引數可以是零索引列號或字串列名。Python 中允許的所有邏輯運算子都可以在條件中使用(==, !=, <, >, <=, >=)。篩選條件可以定義在多個列上,並且可以透過andor運算子組合它們。使用邏輯運算子的條件示例如下:

ws.filter_column('A', 'x > 2000')
ws.filter_column('A', 'x != 2000')
ws.filter_column('A', 'x > 2000 and x<5000')

請注意,條件引數中的“x”只是一個形式佔位符,可以是任何合適的字串,因為它在內部會被忽略。

ws.filter_column('A', 'price > 2000')
ws.filter_column('A', 'x != 2000')
ws.filter_column('A', 'marks > 60 and x<75')

XlsxWriter 還允許在包含字串資料的列的篩選條件中使用萬用字元“*”和“?”。

ws.filter_column('A', name=K*') #starts with K
ws.filter_column('A', name=*K*') #contains K
ws.filter_column('A', name=?K*') # second character as K
ws.filter_column('A', name=*K??') #any two characters after K

示例

在以下示例中,對 A 列的第一個篩選器要求區域為 West,第二個篩選器對 D 列的條件為“units > 5000”。不滿足條件“region = West”或“units > 5000”的行將被隱藏。

import xlsxwriter

wb = xlsxwriter.Workbook('hello.xlsx')
ws = wb.add_worksheet()

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])
        
for row in range(len(data)):
   ws.write_row(row,0, data[row])
   
ws.autofilter(0, 0, 50, 3)

ws.filter_column('A', 'x == West')
ws.filter_column('D', 'x > 5000')

row = 1
for row_data in (data[1:]):
   region = row_data[0]
   volume = int(row_data[3])
   
   if region == 'West' or volume > 5000:
      pass
   else:
      ws.set_row(row, options={'hidden': True})
      
   ws.write_row(row, 0, row_data)
   row += 1
   
wb.close()

輸出

在 Excel 中,可以在 A 列和 D 列標題上看到篩選圖示。篩選後的資料如下所示:

Filter Criteria2

應用列列表篩選器

filter_column_list()方法可用於表示 Excel 2007 樣式中具有多個所選條件的篩選器。

ws.filter_column_list(col,list)

第二個引數是與給定列中的資料匹配的值列表。例如:

ws.filter_column_list('C', ['March', 'April', 'May'])

它將篩選資料,以便 C 列中的值與列表中的任何專案匹配。

示例

在以下示例中,filter_column_list()方法用於篩選區域等於 East 或 West 的

import xlsxwriter
wb = xlsxwriter.Workbook('hello.xlsx')
ws = wb.add_worksheet()
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]
)
for row in range(len(data)):
   ws.write_row(row,0, data[row])
   
ws.autofilter(0, 0, 50, 3)

l1= ['East', 'West']
ws.filter_column_list('A', l1)

row = 1
for row_data in (data[1:]):
   region = row_data[0]
   
   if region not in l1:
      ws.set_row(row, options={'hidden': True})
      
   ws.write_row(row, 0, row_data)
   row += 1
   
wb.close()

輸出

A 列顯示已應用自動篩選。顯示所有區域為 East 或 West 的行,其餘行被隱藏。

Column List Filter1

在 Excel 軟體中,單擊區域標題中的篩選器選擇器箭頭,我們應該看到已應用區域等於 East 或 West 的篩選器。

Column List Filter2
廣告
© . All rights reserved.