我正在尝试打开一个excel,以便显示它。
我正在使用:
import subprocess
subprocess.check_call(['open', '-a', 'C:\\1\\2\\22.xlsx'])
很抱歉,如果这很明显,但我一直收到此错误消息。据我所知,文件位于那里。
FileNotFoundError: [WinError 2] The system cannot find the file specified
答案 0 :(得分:3)
不确定原因
import os
os.path.join('C:', '1', '2', '22.xlsx')
没用。我认为它有效,但没有明显的优势。
无论如何,这是有效的
xl=win32com.client.Dispatch("Excel.Application")
xl.Visible = True
xl.Workbooks.Open("C:\\1\\2\\22.xlsx")
答案 1 :(得分:3)
它之所以不起作用只是因为open
不是一个已知的命令名(这是Windows注册表中的一个动作,仅此而已)。 subprocess
错误消息:
FileNotFoundError: [WinError 2] The system cannot find the file specified
只有一个含义:无法找到可执行文件。它没有(也不能)检查参数以查看它们是否是有效的文件路径,所以不要看那个方向(是的,很遗憾,该消息是通用的,并且不是&和#39; t确切地说找不到哪个文件,一个已知的windows问题)
这样可行:
import subprocess
os.startfile(r'C:\1\2\22.xlsx')
os.startfile尝试执行与您在Windows资源管理器中单击该文件时相同的操作。
此解决方案的优势在于不依赖于win32com
。
除了/在评论中讨论:os.path.join('C:', '1', '2', '22.xlsx')
不起作用,因为它不会在驱动冒号之后添加反斜杠(并且为了"良好的"原因(以及窗户明智的理由:Python os.path.join on Windows)。
>>> os.path.join('C:', '1', '2', '22.xlsx')
'C:1\\2\\22.xlsx' # wrong
干净利落的方式:
>>> os.path.join('C:', os.sep,'1' , '2', '22.xlsx')
'C:\\1\\2\\22.xlsx'