- 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 - 文本框
- 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()方法的范围参数。使用filter_column()方法在第 0 列(带有区域标题)上设置过滤条件“Region == East”。
例子
通过将工作表对象的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 列显示自动筛选已应用。所有 Region 为 East 或 West 的行都会显示,其余行则隐藏。
在 Excel 软件中,单击“区域”标题中的过滤器选择器箭头,我们应该看到应用了等于“东部”或“西部”的区域过滤器。