Я могу настроить автофильтр с помощью 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 ответа
Я столкнулся с той же проблемой, и после небольшого количества экспериментов я обнаружил, что можно установить диапазон для атрибута Columns
. Поскольку я хотел выполнить автофильтр в столбцах от A до I, я установил следующие критерии:
xl.ActiveWorkbook.ActiveSheet.Columns("A:I").AutoFilter(1)
Это сработало для меня. Я предполагаю, что вы хотите фильтровать по столбцам B - F, поскольку автофильтр включен только для столбцов. Возможно, вам подойдут следующие критерии:
xl.ActiveWorkbook.ActiveSheet.Columns("B:F").AutoFilter(1)
Alok
Я просто отвечу здесь для будущих людей, которые хотят использовать другое, но похожее решение. Это намного проще, хотя. Вам нужно будет установить 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 - перечисление - первенствует
Если вам нужно выбрать несколько значений фильтра в одном столбце:
ws.Columns('ColumnLetter:ColumnLetter').AutoFilter(column_number, value_list, 7)
С https://docs.microsoft.com/en-us /office/vba/api/excel.xlautofilteroperator :
xlFilterValues
| 7
| Значения фильтра
Довольно загадочная документация доступна по адресу: http: //msdn.microsoft.com/en-us/library/office/bb242013(v=office.12).aspx.
Каждый из параметров Excel VBA преобразуется в аргумент функции в pywin32. Например, если вы хотите отфильтровать все годы, которые не равны «2012», вы должны сделать это, указав параметр Criteria1 следующим образом:
MyYearRange.AutoFilter(Field=1, Criteria1="2012")
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.