Python XlsxWriter 应用过滤器
在 Excel 中,你可以使用逻辑表达式根据条件对表格数据设置过滤器。在 XlsxWriter 的工作表类中,我们有 自动过滤器() 方法或目的。此方法的强制参数是单元格范围。这会在标题行中创建下拉选择器。要应用某些标准,我们有两种方法可用: 过滤器列() or filter_column_list() .
为列应用过滤条件
在以下示例中,范围 A1:D51 中的数据(即单元格 0,0 到 50,3)用作范围参数 自动过滤器() 方法。筛选条件 '地区 == 东' 设置在第 0 列(带有区域标题) 过滤器列() method.
例子
通过将 hidden 选项设置为 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' 的行是可见的,其他的行是隐藏的(可以通过清除过滤器再次显示)。
column 参数可以是零索引的列号或字符串列名。 Python 中允许的所有逻辑运算符都可以在条件中使用(==、!=、<、>、<=、>=)。过滤条件可以在多个列上定义,并且可以通过以下方式组合 and or 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 还允许使用通配符“ * " and " ? " 在包含字符串数据的列的过滤条件中。
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 上的第二个过滤器条件为“ 单位 > 5000 “。不满足条件的行” 地区 = 西部 " or " 单位 > 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 列标题上看到过滤器图标。过滤后的数据如下:
应用列列表过滤器
The filter_column_list() 方法可用于以 Excel 2007 样式表示具有多个选定条件的过滤器。
ws.filter_column_list(col,list)
第二个参数是与给定列中的数据匹配的值列表。例如:
ws.filter_column_list('C', ['March', 'April', 'May'])
它会过滤数据,以便 C 列中的值与列表中的任何项目匹配。
例子
在以下示例中, filter_column_list() 方法用于过滤 rows 区域等于东方或西方。
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 列显示应用了自动过滤器。显示所有 Region 为 East 或 West 的行,其余行隐藏。
在 Excel 软件中,单击 filter 选择器箭头 Region 标题,我们应该看到应用了等于 East 或 West 的区域的过滤器。