【问题标题】:win32com in Python Spyder console results in an errorPython Spyder 控制台中的 win32com 导致错误
【发布时间】:2014-07-04 12:13:33
【问题描述】:

我只是运行下面的代码,直接来自this documentation/tutorial

import win32com.client as win32
excel = win32.gencache.EnsureDispatch('Excel.Application')
wb = excel.Workbooks.Add()
wb.SaveAs('add_a_workbook.xlsx')
excel.Application.Quit()

得到了这个:

  execfile(filename, namespace)
  File "C:/Users/Username/Desktop/script.py", line 106, in <module>
    wb = excel.Workbooks.Add()
  File "C:\Users\Username\AppData\Local\Temp\gen_py\2.7\00020813-0000-0000-C000-000000000046x0x1x7\Workbooks.py", line 34, in Add
    ret = self._oleobj_.InvokeTypes(181, LCID, 1, (13, 0), ((12, 17),),Template
TypeError: an integer is required

有人知道为什么吗?我尝试过使用 xlsx 与 xls 文件,并更改文件地址,并尝试了该教程中的多个示例,它们都给了我类似的错误,我不知道为什么。

在收到TypeError: an integer is required 警告之前,我可以到达wb = excel.Workbooks.Add(),如果我尝试wb = excel.Workbooks.Add,它将运行并且我不会收到错误,但我不能从那里做任何事情开。

有人知道这是什么吗?提前致谢。

[编辑:]

我尝试了一个word文件进行比较,效果很好。

有谁知道为什么其中一种有效而另一种无效?

word = win32.Dispatch('Word.Application')
word.Documents.Open('C:\Users\username\Desktop\test.docx')

excel = win32.Dispatch('Excel.Application')
excel.Workbooks.Open('C:\Users\username\Desktop\output.xlsx')

[编辑 2:]

好的,我发现问题出在 Spyder IDE 上。如果我在 Anaconda 中编写相同的代码,它会正常工作。有谁知道为什么 Anaconda 有效但 Sypder 无效?我检查了系统路径,它们是相同的,即使尝试在 Anaconda 中执行 .py 程序也不起作用。

【问题讨论】:

  • 奇怪。如果你使用excel = win32.Dispatch('Excel.Application'),你可以使用wb = excel.Workbooks.Add()吗?出于某种原因,有一些东西干扰了 win32com 的gen_py。您是否为 Office 和 Python 提供相同的平台(例如,两种情况下都是 64 位)?
  • 不,我得到了同样的错误ret = self._oleobj_.InvokeTypes(181, LCID, 1, (13, 0), ((12, 17),),TemplateTypeError: an integer is required,是的,都是 64 位的。如果它有帮助,出于某种原因,我开始收到一个新错误,我包含了import pythoncompythoncom.CoInitialize(),错误消失了,它成功运行了。然后当我重新运行它时,我得到了旧的 typeerror 错误......
  • 问题出在 Spyder IDE 上。
  • 我认为你应该改写这个问题,具体说明它在 anaconda 中的工作原理,而不是 spyder IDE。也许 Spyder 使用它自己的 32 位 Python 解释器副本?在 anaconda vs spyder 中运行时尝试从脚本打印版本字符串。
  • 好的,改写问题。

标签: python excel winapi anaconda spyder


【解决方案1】:

我似乎是互联网上唯一遇到此问题的人,但我的解决方法是我使用了不同的 spyder python 解释器。

Python interpreter 几乎在每个 win32com excel 命令中都给了我各种错误,但IPython console 工作正常。不知道为什么。

【讨论】:

  • (Spyder dev here) 它们在内部的工作方式非常不同。在某些情况下,Python 控制台可以更好地完成这项工作,而在其他情况下,IPython 是可以选择的。但是,IPython 控制台具有更多功能,并且通常经过更好的测试(因为 IPython 拥有更多用户)。
  • 换控制台的好主意。我刚开始收到这个错误(两个月前它不存在)。然而,我却反其道而行之,从 IPython 控制台转到了 Python 控制台,并且成功了。
猜你喜欢
  • 1970-01-01
  • 2021-07-19
  • 2017-05-24
  • 2018-05-26
  • 1970-01-01
  • 2018-01-05
  • 2018-01-21
  • 1970-01-01
  • 2017-04-15
相关资源
最近更新 更多