- Python XlsxWriter 教程
- Python XlsxWriter - 首頁
- Python XlsxWriter - 概述
- Python XlsxWriter - 環境設定
- Python XlsxWriter - Hello World
- Python XlsxWriter - 重要類
- Python XlsxWriter - 單元格表示法和範圍
- Python XlsxWriter - 已定義名稱
- Python XlsxWriter - 公式和函式
- Python XlsxWriter - 日期和時間
- Python XlsxWriter - 表格
- Python XlsxWriter - 應用篩選
- Python XlsxWriter - 字型和顏色
- Python XlsxWriter - 數字格式
- Python XlsxWriter - 邊框
- Python XlsxWriter - 超連結
- Python XlsxWriter - 條件格式
- Python XlsxWriter - 新增圖表
- Python XlsxWriter - 圖表格式
- Python XlsxWriter - 圖表圖例
- Python XlsxWriter - 條形圖
- Python XlsxWriter - 折線圖
- Python XlsxWriter - 餅圖
- Python XlsxWriter - 迷你圖
- Python XlsxWriter - 資料驗證
- Python XlsxWriter - 大綱和分組
- Python XlsxWriter - 凍結和分割窗格
- Python XlsxWriter - 隱藏/保護工作表
- Python XlsxWriter - 文字框
- Python XlsxWriter - 插入圖片
- Python XlsxWriter - 頁面設定
- Python XlsxWriter - 頁首和頁尾
- Python XlsxWriter - 單元格批註
- Python XlsxWriter - 使用 Pandas
- Python XlsxWriter - VBA宏
- Python XlsxWriter 有用資源
- Python XlsxWriter - 快速指南
- Python XlsxWriter - 有用資源
- Python XlsxWriter - 討論
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' 的行可見,其他行被隱藏(您可以透過清除篩選器再次顯示它們)。
列引數可以是零索引列號或字串列名。Python 中允許的所有邏輯運算子都可以在條件中使用(==, !=, <, >, <=, >=)。篩選條件可以定義在多個列上,並且可以透過and或or運算子組合它們。使用邏輯運算子的條件示例如下:
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_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 的行,其餘行被隱藏。
在 Excel 軟體中,單擊區域標題中的篩選器選擇器箭頭,我們應該看到已應用區域等於 East 或 West 的篩選器。