从Python运行Excel文件时出错
当我尝试通过Python直接打开一个Excel文件时,出现了错误。我该怎么解决这个问题呢?
谢谢大家的帮助。
我的代码是:
from win32com.client import Dispatch
xl = Dispatch('Excel.Application')
wb = xl.Workbooks.Open(r"data\Modules.xls")
然后出现的错误是:
pywintypes.com_error: (-2147352567, '发生了异常。', (0, u'Microsoft Office Excel', u"'data\Modules.xls' 找不到。请检查文件名的拼写,并确认文件位置是否正确。\n\n如果你是从最近使用的文件列表中打开这个文件,请确保文件没有被重命名、移动或删除。", u'C:\Program Files (x86)\Microsoft Office\Office12\1033\XLMAIN11.CHM', 0, -2146827284), None)
5 个回答
0
我尝试了很多情况,主要是关于:
- 原始路径
- 使用 os.path.abspath
- 绝对路径
下面是结果:
(1)失败的案例:
#[1] Fail
# xlsPath = "chart_demo.xls";
# wb = xl.Workbooks.open(xlsPath); #pywintypes.com_error
#[2] Fail
# xlsPath = "D:\tmp\tmp_dev_root\python\excel_chart\chart_demo.xls";
# absPath = os.path.abspath(xlsPath);
# print "absPath=",absPath; #absPath= D:\tmp\tmp_dev_root\python\excel_chart\ mp mp_dev_root\python\excel_chart\chart_demo.xls
# wb = xl.Workbooks.open(absPath); #pywintypes.com_error
#[3] Fail
# xlsPath = "D:\tmp\tmp_dev_root\python\excel_chart\chart_demo.xls";
# normalPath = os.path.normpath(xlsPath);
# print "normalPath=",normalPath; #normalPath= D: mp mp_dev_root\python\excel_chart\chart_demo.xls
# wb = xl.Workbooks.open(normalPath); #pywintypes.com_error
#[4] Fail
# rawPath = r"chart_demo.xls";
# wb = xl.Workbooks.open(rawPath); #pywintypes.com_error
(2)成功的案例:
#[5] OK
# xlsPath = "chart_demo.xls";
# absPath = os.path.abspath(xlsPath);
# print "absPath=",absPath; #absPath= D:\tmp\tmp_dev_root\python\excel_chart\chart_demo.xls
# wb = xl.Workbooks.open(absPath); #OK
#[6] OK
# rawPath = r"D:\tmp\tmp_dev_root\python\excel_chart\chart_demo.xls";
# wb = xl.Workbooks.open(rawPath); # OK
0
我认为你需要指定文件的完整路径,是因为你是通过COM接口和Excel进行交互的。这和直接调用CreateProcess是不一样的。COM接口是告诉Excel去打开一个文件,但这个路径是相对于Excel程序(excel.exe)的工作目录来说的。
9
使用 os.path.abspath() 可以把文件系统的路径转换成绝对路径。你在 Python 和 Excel 中的当前工作目录是不一样的。