Я могу настроить автофильтр с помощью 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
5
alj 3 Июн 2010 в 20:35

4 ответа

Лучший ответ

Я столкнулся с той же проблемой, и после небольшого количества экспериментов я обнаружил, что можно установить диапазон для атрибута Columns. Поскольку я хотел выполнить автофильтр в столбцах от A до I, я установил следующие критерии:

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

Это сработало для меня. Я предполагаю, что вы хотите фильтровать по столбцам B - F, поскольку автофильтр включен только для столбцов. Возможно, вам подойдут следующие критерии:

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

Alok

4
NorthCat 4 Июн 2014 в 10:45

Я просто отвечу здесь для будущих людей, которые хотят использовать другое, но похожее решение. Это намного проще, хотя. Вам нужно будет установить xlwings и установить pywin32. С помощью xlwings вы можете получить доступ к функциям API Pywin32, предоставляя вам большую гибкость в дополнение к его собственным функциям.

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. ком / EN-US / VBA / Excel - VBA / статьи / диапазон - автофильтр - метод - первенствует https://msdn.microsoft.com/ ан- нас / VBA / Excel - VBA / статьи / xlautofilteroperator - перечисление - первенствует

2
Noctsol 16 Мар 2018 в 21:59

Если вам нужно выбрать несколько значений фильтра в одном столбце:

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

С https://docs.microsoft.com/en-us /office/vba/api/excel.xlautofilteroperator :
xlFilterValues | 7 | Значения фильтра

1
p.s.w.g 19 Фев 2019 в 17:25

Довольно загадочная документация доступна по адресу: http: //msdn.microsoft.com/en-us/library/office/bb242013(v=office.12).aspx.

Каждый из параметров Excel VBA преобразуется в аргумент функции в pywin32. Например, если вы хотите отфильтровать все годы, которые не равны «2012», вы должны сделать это, указав параметр Criteria1 следующим образом:

MyYearRange.AutoFilter(Field=1, Criteria1="2012")
1
Alexander Measure 1 Июл 2013 в 20:02