[英]Apply Autofilter to worksheet using Python
我嘗試使用自動過濾器將自動過濾器應用於現有工作表,但該過程在自動過濾器行上一直失敗。 我在網上做了很多研究,但找不到為什么我的不起作用或是否有任何其他方法。 任何人都可以幫忙嗎? (PS 我也嘗試過使用 win32com [例如:ws_win32.AutoFilter()] 並且這也不起作用)
我的示例代碼:
def _set_autofilter(self):
wb_xlsw = xlsxwriter.Workbook('ExistingWorkbook.xlsb')
ws_xlsw = wb_xlsw.get_worksheet_by_name('Data')
ws_xlsw.autofilter('A1:D19904')
如果您尚未在 XlsxWriter 中創建工作表,您將無法get_worksheet_by_name()
具有該名稱的工作表。
如果您嘗試讀取現有文件,則無法使用 XlsxWriter 執行此操作。 它只創建新文件。
您可以留在 win32com 中以實現此目的:
data = [{"test1": 1, "test2": 1}, {"test1": 2, "test2": 2}, {"test1": 3, "test2": 3}, {"test1": 4, "test2": 4}]
import win32com.client as win32
def openExcel():
xl = win32.gencache.EnsureDispatch('Excel.Application')
wb = xl.Workbooks.Add()
ws = wb.Sheets(1)
xl.Visible = True
return ws
def print2Excel(datapoint:dict, ws):
print(datapoint)
const = win32.constants #.Insert()-Methods keywargs are packaged into const.
ws.Range("A2:B2").Insert(const.xlShiftDown, const.xlFormatFromRightOrBelow)
ws.Cells(2,1).Value = datapoint["test1"]
ws.Cells(2,2).Value = datapoint["test2"]
def setAutoFilter(ws):
ws.Range("A:A").AutoFilter(Field=1, Criteria1=3)
def main():
ws = openExcel()
ws.Cells(1,1).Value = "test1"
ws.Cells(1,2).Value = "test2"
for datapoint in data:
print2Excel(datapoint, ws)
setAutoFilter(ws)
main()
不過,我似乎無法讓 AutoFilter 的標准使用數組。 ws.Range("A:A").AutoFilter(Field=1, Criteria1=[1, 3]) 將運行,但僅過濾列表中的最后一項 (3)。 而 VBA 語法 ws.Range("A:A").AutoFilter(Field=1, Criteria1=Array(1, 3)) 將觸發異常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.