使用Python对工作表应用自动筛选

2024-09-27 07:33:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用将自动筛选应用于现有工作表,但该过程在自动筛选行上不断失败。我在网上做了很多研究,找不到我的电脑为什么不工作,也找不到其他方法。有人能帮忙吗(另外,我还尝试过使用win32com[例如:ws\u 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')

Tags: 方法代码示例ws过程defwin32com行上
2条回答

如果您没有在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()

不过,我似乎无法获得自动筛选使用数组的条件。 ws.Range(“A:A”).AutoFilter(Field=1,Criteria1=[1,3])将运行,但只对列表(3)中的最后一项进行筛选。 而VBA语法ws.Range(“A:A”).AutoFilter(Field=1,Criteria1=Array(1,3))将触发异常

相关问题 更多 >

    热门问题