我有一个Python ExcelDocument类,该类提供了用于读取/写入/格式化Excel文件的基本便捷方法,并且在看似简单的Python代码中出现了一个奇怪的错误。 我有一个save和saveAs方法:
1
2
3
4
5
6
7def save(self):
''' Save the file '''
self.workbook.Save()
def saveAs(self, newFileName):
''' Save the file as a new file with a different name '''
self.workbook.SaveAs(newFileName)
save方法可以正常工作,但是当我尝试调用saveAs方法-myExcelObject.saveAs("C:/test.xlsx")时,出现以下错误:
1
2
3
4
5
6
7
8
9
10
11Traceback (most recent call last):
File"C:\workspace\Utilities\src\util\excel.py", line 201, in
excel.saveAs("C:/test.xlx")
File"C:\workspace\Utilities\src\util\excel.py", line 185, in saveAs
self.workbook.SaveAs(newFileName)
File"", line 7, in SaveAs
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, u'Microsoft Office Excel', u"Microsoft Office Excel cannot access the file 'C:\\//8CBD2000'. There are several possible reasons:
\u2022 The file name or path does not exist.
\u2022 The file is being used by another program.
\u2022 The workbook you are trying to save has the same name as a currently open workbook.", u'C:\\Program Files\\Microsoft Office\\Office12\\1033\\XLMAIN11.CHM', 0, -2146827284), None)
谁能解释发生了什么事?
几个问题。 该文件已经存在吗? 该文件已经打开吗? save()写入文件到哪里?
我发现(困难的方式)SaveAs不支持斜杠/。
请尝试使用saveAs("C:\\test.xlx")。
哇,做到了。非常感谢!!但是为什么与保存方法不同?有什么办法可以清理输入?我真的不能相信所有用户都知道这个怪癖...
@froadie,SaveCopyAs支持,但SaveAs不支持。去搞清楚。我只是在文件名中用。
或使用saveAs(os.path.join("C:","test.xlx"))。 os.path库充满了平台无关的方式来处理文件名,路径等。
@froadie,尝试os.path.normpath。
难以置信的是这是问题所在。谢谢一千次。
@MikeDeSimone从python 2.7.9开始,您实际上必须使用os.path.join(C:, os.sep, test.xlx)。否则在C:和test.xlx之间不会有任何斜线。有关更多详细信息,请参见这篇文章。
@NickDandoulakis,非常感谢,您的评论帮助我终于解决了该问题。我在代码中使用了,并且搜索了很多SO / google帖子,但直到我登陆这里都找不到任何东西。
它总是抛出错误,提示SaveAs不是方法,对我唯一有用的是SaveCopyAs,但是随后我得到一个提示框,要求我保存原始文件
@ mp252,尝试使用SaveAs而不是SaveAs
@NickDandoulakis我尝试了两种方法,但是都没有用,我做了一个变通方法,即创建的工作簿,而不是创建一个新的工作簿,而是打开一个excel文件,然后能够使用save