使用python使用Excel时出错

sag*_*gar 5 python excel pywin32 win32com

当我的脚本同时更新一个excel时,如果我要手动执行任何其他工作,而另一个excel错误发生,我正在使用调度

     from win32com.client import Dispatch

     excel    = Dispatch('Excel.Application')
excel.Visible   = True 

file_name="file_name.xls"
workbook = excel.Workbooks.Open(file_name)
workBook  = excel.ActiveWorkbook
sheet=workbook.Sheets(sheetno)
Run Code Online (Sandbox Code Playgroud)

我收到这样的错误(,com_error(-2147418111,'呼叫被被呼叫者拒绝。',无,无)

有什么办法可以克服它..我可以更新另一个excel而不会出错吗..

小智 11

我最近遇到了同样的问题。虽然听起来可能有多个根本原因,但我的情况发生是因为 Python 进行后续调用的速度太快,Excel 无法跟上,尤其是外部查询刷新。我通过time.sleep()在我的大部分呼叫之间插入并增加任何特别冗长的呼叫(通常在 7-15 秒之间)的 sleep 参数来解决这个间歇性的“呼叫被被呼叫者拒绝”错误。这允许 Excel 在 Python 发出附加命令之前有时间完成每个命令。


小智 5

发生此错误的原因是,如果您正在调用的COM对象已经在处理其他操作,它将拒绝该外部调用。没有异步的调用处理,并且行为似乎是随机的。

根据操作,您将看到pythoncom.com_error或pywintypes.com_error。解决此问题的一种简单方法(如果不够优雅)是使用try-except将调用包装到COM对象中,如果遇到这些访问错误之一,请重试调用。

有关某些背景知识,请参见Mark Hammond和Andy Robinson(O'Reilly 2000)的Win32上Python编程第12章摘录中的“错误处理”部分。

Siew Kam Onn的博客文章“使用Excel进行Python编程,如何克服makepy生成的python文件中的COM_error”,还有一些关于Excel的有用信息。