Установка критериев для автофильтра в pyWin32 - PullRequest
3 голосов
/ 03 июня 2010

Я могу настроить автофильтр с помощью 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 ]

3 голосов
/ 06 октября 2010

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

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

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

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

Alok

1 голос
/ 17 марта 2018

Я просто отвечу здесь для будущих людей, которые хотят использовать другое, но похожее решение. Это намного проще, хотя. Вам нужно будет установить 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.com/en-us/vba/excel-vba/articles/range-autofilter-method-excel https://msdn.microsoft.com/en-us/vba/excel-vba/articles/xlautofilteroperator-enumeration-excel

1 голос
/ 02 июля 2013

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

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

MyYearRange.AutoFilter(Field=1, Criteria1="2012")
0 голосов
/ 19 февраля 2019

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...