Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在pyWin32中设置自动筛选条件_Python_Excel_Pywin32 - Fatal编程技术网

Python 在pyWin32中设置自动筛选条件

Python 在pyWin32中设置自动筛选条件,python,excel,pywin32,Python,Excel,Pywin32,我可以使用pyWin32设置自动过滤器,但我想知道是否可以设置默认过滤器以及语法是什么 例如,我想在年份列上设置一个过滤器,并为当前年份设置默认值 xl = Dispatch("Excel.Application") xl.Workbooks.Open(file_path) xl.ActiveWorkbook.Worksheets(sheetname).Range("A2:A6").AutoFilter(1) xl.ActiveWorkbook.Close(SaveChanges=1) 我

我可以使用pyWin32设置自动过滤器,但我想知道是否可以设置默认过滤器以及语法是什么

例如,我想在年份列上设置一个过滤器,并为当前年份设置默认值

xl = Dispatch("Excel.Application") 
xl.Workbooks.Open(file_path) 
xl.ActiveWorkbook.Worksheets(sheetname).Range("A2:A6").AutoFilter(1)
xl.ActiveWorkbook.Close(SaveChanges=1)
我在网上查阅了关于pywin32的文档,也查阅了微软的网站,但没有找到如何将MS语法翻译成pywin32的方法

Range("A2:A6").AutoFilter Field:=1, Criteria1:=rng.Value

我遇到了同样的问题,经过一点实验后,我发现可以在
Columns
属性上设置一个范围。因为我想对A到I列进行自动筛选,所以我设置了如下条件:

MyYearRange.AutoFilter(Field=1, Criteria1="2012")
xl.active工作簿.ActiveSheet.Columns(“A:I”).AutoFilter(1)

这对我有用。我假设您希望对B列到F列进行筛选,因为自动筛选仅对列启用。也许以下标准适用于您:

xl.active工作簿.ActiveSheet.Columns(“B:F”).AutoFilter(1)


Alok

相当神秘的文档可在以下位置获得:

每个Excel VBA参数都转换为pywin32中的函数参数。例如,如果要过滤所有不等于“2012”的年份,可以通过如下指定Criteria1参数来实现:

MyYearRange.AutoFilter(Field=1, Criteria1="2012")

我只是想为那些想使用不同但相似解决方案的未来人提供一个答案。不过这要简单得多。您将需要安装xlwings和pywin32。使用xlwings,您可以访问pywin32的api函数,这在其自身函数的基础上为您提供了很大的灵活性

import xlwings
#puts the excel window into focus or opens it up. It evens work on csv files.
wb = xlwings.Book('C:\\Users\\yourusername\\Desktop\\Excel.xlsx')

#Choose the sheet you want to focus
datasht = wb.sheets['Sheet1']

#Pay attention to where you the .api. part. It matters if you are trying to achieve something specific. AND MAKE SURE to that you follow case-sensensitive typing for 'Range' and 'Autofilter'.
datasht.api.Range('A1:J10').AutoFilter(3,'SomeFilterValue')
不幸的是,我不知道如何引起其余的争论。您几乎只需要找出如何将参数转换为python。我确实让它工作了,但我不确定你是否会遇到任何问题。这是一个可行的方法

datasht.api.Range('A1:J10').AutoFilter(3,'filtervalue1',2,'filtervalue1',1)
如果需要调用操作员参数,请特别阅读第二个链接:

如果需要在同一列中选择多个过滤器值:

ws.Columns('ColumnLetter:ColumnLetter').AutoFilter(column_number, value_list, 7)
发件人:
xlFilterValues
|
7
|筛选值

此功能:

Excel = win.Dispatch("Excel.Application")
Excel.visible = True
wb = Excel.Workbooks.open('path to xlsx')
ws = wb.Worksheets(1)
#use Range("A:A") for autofilter
ws.Columns("A:I").AutoFilter(1,"criteria string")

这将对列A应用自动筛选,条件1为“条件字符串”

Hi。谢谢你。我来看看!