Range类的AutoFilter方法失败(Dispatch vs EnsureDispatch)

2024-09-27 07:23:05 发布

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

此代码失败,错误为:“范围类的AutoFilter方法失败”

from win32com.client.gencache import EnsureDispatch

excel = EnsureDispatch('Excel.Application')
excel.Visible = 1
workbook = excel.Workbooks.Add()
sheet = workbook.ActiveSheet
sheet.Cells(1, 1).Value = 'Hello world'
sheet.Columns.AutoFilter()

此代码也会失败,尽管它曾经工作过:

^{pr2}$

Tags: 方法代码fromimportclientapplication错误excel
1条回答
网友
1楼 · 发布于 2024-09-27 07:23:05

Python使用win32com直接与Windows应用程序通信,并且可以使用(通过EnsureDispatch)或没有(通过分派)应用程序API的先验知识。当您调用EnsureDispatch时,将获取API并将其写入win32通用电气公司。,从而将应用程序的API永久性地添加到Python库中。在

使用EnsureDispatch初始化应用程序后,任何时候脚本对该应用程序使用Dispatch,它都将获得预取的API。这很好,因为您可以使用win32中预定义的应用程序常量()com.客户端导入常量)。在

但是,有时以前工作的代码会中断。例如,在下面的代码中,AutoFilter()将在没有参数的情况下工作,前提是Excel API以前从未缓存在库中。。。在

# ExcelAutoFilterTest1
# Works unless you ever previously called EnsureDispatch('Excel.Application')

from win32com.client import Dispatch

excel = Dispatch('Excel.Application')
excel.Visible = 1
workbook = excel.Workbooks.Add()
sheet = workbook.ActiveSheet
sheet.Cells(1, 1).Value = 'Hello world'
sheet.Columns.AutoFilter()

下面的代码总是会失败,因为现在Excel API已经被提取并写入了win32通用电气公司.00020813-0000-0000-C000-000000000046x0x1x7在Python库中,它将不再接受不带参数的AutoFilter()。在

^{pr2}$

下面的代码总是有效的,因为我们现在提供了VisibleDropDown参数(1=on,0=off)。在

# ExcelAutoFilterTest3
# Always succeeds

from win32com.client.gencache import EnsureDispatch

excel = EnsureDispatch('Excel.Application')
excel.Visible = 1
workbook = excel.Workbooks.Add()
sheet = workbook.ActiveSheet
sheet.Cells(1, 1).Value = 'Hello world'
sheet.Columns.AutoFilter(1)

这似乎是一个bug,因为Excel API documentation声明AutoFilter的所有参数都是可选的:

"If you omit all the arguments, this method simply toggles the display of the AutoFilter drop-down arrows in the specified range."

相关问题 更多 >

    热门问题