【发布时间】: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