我不擅長 VBA,但據我所知,它在運行時AutoFilter需要一個Array()Variant xlFilterValues。
import win32com.client as win32
excel = win32.gencache.EnsureDispatch('Excel.Application')
mv_wbk = excel.ActiveWorkbook
mv_sht = mv_wbk.Worksheets("mv")
# https://docs.microsoft.com/en-us/office/vba/api/excel.xlautofilteroperator
xlFilterValues = 7
# https://docs.microsoft.com/en-us/dotnet/api/microsoft.visualbasic.varianttype?view=net-6.0
arrayId = 8192
fltrs = win32.VARIANT(arrayId,["uno","dos"])
mv_sht.UsedRange.AutoFilter(Field=15,Criteria1=f'<>Array{fltrs}',Operator=xlFilterValues)
當我運行它時,它會回傳15.0,我猜是因為那是欄位。我已經嘗試了我能想到的所有變體,以及查看其他 stackoverflows - 但沒有太多關于此的資訊。
我發現的最好的:

此 Python 代碼過濾掉第三個字母為“e”或“h”的行:
import win32com.client
wbPath ='C:\\SomePath\\Filter.xlsx'
xl = win32com.client.gencache.EnsureDispatch('Excel.Application')
wb = xl.Workbooks.Open(wbPath)
ws = wb.Worksheets(1)
#Access a named range with the table data
rng = ws.Range('TableRange')
#Get all the values from 3rd column in Range
vals = rng.Columns(3).Value
#Create a dictionary of unique values (skipping the header row)
#(there may be more pythonic ways of doing this!)
keepVals = { val[0]:None for val in vals[1:]}
#Remove any values from exclude list
valsToExclude = ['e','h']
[keepVals.pop(v) for v in valsToExclude]
#Create Criteria1 array as a list
crit = ["=" k for k in keepVals.keys()]
#Apply the filter
rng.AutoFilter(Field=3,Criteria1=crit,Operator=win32com.client.constants.xlFilterValues)
wb.Close(True)
xl.Quit()
xl = None
在保存的檔案中使用此結果:

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/429215.html
上一篇:查找活動單元格所在列的范圍
