在安装了pywin32-216.win32-py2.7的Python 2.7.2下,当我使用win32com模块在Windows上处理Excel时,如下所示:
>>> import win32com.client
>>> xlsApp = win32com.client.Dispatch('Excel.Application')
>>> xlsApp.Workbooks.Open(r'D:/test.xls')
我收到错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<COMObject <unknown>>", line 8, in Open
pywintypes.com_error: (-2147352567, '\xb7\xa2\xc9\xfa\xd2\xe2\xcd\xe2\xa1\xa3',
(0, u'Microsoft Office Excel', u'\u540d\u4e3a\u201ctest.xls\u201d\u7684\u6587\u6
863\u5df2\u7ecf\u6253\u5f00\u3002\u4e0d\u80fd\u540c\u65f6\u6253\u5f00\u540c\u540
d\u6587\u4ef6\uff0c\u65e0\u8bba\u5b83\u4eec\u662f\u5426\u5728\u540c\u4e00\u6587\
u4ef6\u5939\u4e2d\u3002\n\u8981\u6253\u5f00\u7b2c\u4e8c\u4efd\u6587\u6863\uff0c\
u8bf7\u5173\u95ed\u5df2\u7ecf\u6253\u5f00\u7684\u6587\u6863\uff0c\u6216\u8005\u9
1cd\u65b0\u547d\u540d\u5176\u4e2d\u7684\u4e00\u4e2a\u6587\u6863\u3002', None, 0,
-2146827284), None)
虽然信息不可读,但我不知道出了什么问题!
在互联网上搜索后,我在http://www.python-forum.org/pythonforum/viewtopic.php?f=15&t=17665找到了有用的信息:
pywintypes.com_error :( -2147352567,'发生异常。',(0, u'Microsoft Office Excel','''test .xls'找不到。检查 拼写文件名,并验证文件位置是否正确 正确。\ n \ n如果您尝试从最常见的列表中打开该文件 最近在文件菜单上使用了文件,确保文件没有 已重命名,移动或删除。“,u'C:\ Program Files \ Microsoft Office \ OFFICE11 \ 1033 \ xlmain11.chm',0,-2146827284),无)
我想这是同样的问题,所以我首先创建一个Excel文件'D:/test.xls',然后一切都变好了:
>>> xlsApp.Workbooks.Open(r'D:/test.xls')
<COMObject Open>
如果我得到了可读的错误提示,我会毫不费力地立即解决问题!
我想知道为什么我从win32com.client那里得到的错误呢?我能做些什么来使信息可读吗?
我将非常感谢您的帮助!
答案 0 :(得分:3)
我想它已经出现了,因为你在远东亚洲(中国,也许是?)的某个地方使用国际化设置,而你在命令提示符中使用Python。我不确定问题出在Python,命令提示符还是两者的组合上,但无论哪种方式,这两者的组合对非拉丁国际化设置都不起作用。
我建议使用IDLE,因为它似乎正确支持Unicode字符。这是我在IDLE中查看最后一个字符串时发生的情况。该文对我来说没有任何意义,但它可能会对你有所帮助:
IDLE 2.6.4 >>> z = u'\u540d\u4e3a\u201ctest.xls\u201d\u7684\u6587\u6863\u5df2\u7ecf\u6253\u5f00\u3002\u4e0d\u80fd\u540c\u65f6\u6253\u5f00\u540c\u540d\u6587\u4ef6\uff0c\u65e0\u8bba\u5b83\u4eec\u662f\u5426\u5728\u540c\u4e00\u6587\u4ef6\u5939\u4e2d\u3002\n\u8981\u6253\u5f00\u7b2c\u4e8c\u4efd\u6587\u6863\uff0c\u8bf7\u5173\u95ed\u5df2\u7ecf\u6253\u5f00\u7684\u6587\u6863\uff0c\u6216\u8005\u91cd\u65b0\u547d\u540d\u5176\u4e2d\u7684\u4e00\u4e2a\u6587\u6863\u3002' >>> print z 名为“test.xls”的文档已经打开。不能同时打开同名文件,无论它们是否在同一文件夹中。 要打开第二份文档,请关闭已经打开的文档,或者重新命名其中的一个文档。 >>>
然而,即使使用IDLE,当你得到异常时,文本仍然会像上面那样出现。如果发生这种情况,您需要做的是从上一个异常中获取数据并从中print
获取相关字符串。
要获取解释器中引发的最后一个异常,您可以使用sys.last_value
。这是一个带有不同异常消息的示例:
>>> import sys >>> with open('nonexistent.txt') as f: pass ... Traceback (most recent call last): File "", line 1, in with open('nonexistent.txt') as f: pass IOError: [Errno 2] No such file or directory: 'nonexistent.txt' >>> sys.last_value IOError(2, 'No such file or directory') >>> print(sys.last_value[1]) No such file or directory >>>
答案 1 :(得分:0)
我遇到了类似的错误。在我的特定情况下,我试图使用这样创建的临时文件:
fileprefix = 'Report'
filesuffix = '.xlsx'
filename = tempfile.gettempdir() + '\\' + fileprefix + filesuffix
xfile = tempfile.NamedTemporaryFile(suffix = filesuffix, prefix = fileprefix)
这个名称是否可以用来第二次打开文件,而命名的临时文件仍然是打开的,因此不同平台(它可以在Unix上使用;它不能在Windows NT或更高版本上使用)。
因此,我似乎无法在Windows操作系统中重复使用该文件。这就是我收到错误的原因。
在您的情况下,您可能想要首先检查文件的创建方式。