5

我可以使用 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 和 Microsoft 网站的文档,但不知道如何将 MS 语法转换为 pywin32

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

5 回答 5

5

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

xl.ActiveWorkbook.ActiveSheet.Columns("A:I").AutoFilter(1)

这对我有用。我假设您要过滤列 B 到 F,因为自动过滤仅对列启用。也许以下标准对您有用:

xl.ActiveWorkbook.ActiveSheet.Columns("B:F").AutoFilter(1)

阿洛克

于 2010-10-06T06:11:48.900 回答
2

相当神秘的文档位于:http: //msdn.microsoft.com/en-us/library/office/bb242013 (v=office.12).aspx 。

每个 Excel VBA 参数都转换为 pywin32 中的函数参数。例如,如果您想过滤所有不等于“2012”的年份,您可以通过指定 Criteria1 参数来执行此操作,如下所示:

MyYearRange.AutoFilter(Field=1, Criteria1="2012")
于 2013-07-01T20:02:50.343 回答
2

我只是在这里为想要使用不同但类似解决方案的未来人们提供答案。不过,这要简单得多。您将需要安装 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)

如果您需要调用运算符参数,请专门阅读第二个链接: https ://msdn.microsoft.com/en-us/vba/excel-vba/articles/range-autofilter-method-excel https://msdn。 microsoft.com/en-us/vba/excel-vba/articles/xlautofilteroperator-enumeration-excel

于 2018-03-16T21:59:21.917 回答
1

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

ws.Columns('ColumnLetter:ColumnLetter').AutoFilter(column_number, value_list, 7)

来自https ://docs.microsoft.com/en-us/office/vba/api/excel.xlautofilteroperator :
xlFilterValues| 7| 过滤值

于 2019-02-19T16:51:23.143 回答
0

这有效:

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 是“条件字符串”

于 2020-03-18T04:44:10.507 回答