我有一个小的python(2.7)脚本从网络驱动器上的excel文件中读取信息。工作正常,但在开发过程中有点烦人,在每个脚本运行后,excel文件被关闭。如果excel文件在启动脚本时已经关闭,那么这将是预期的行为,但我正在编辑excel来测试脚本。此外,如果有人已经打开工作簿,我会发现问题,因为我不会自动打开工作簿作为只读副本(这很好,因为我只读过)。
所以问题是如何在python中满足以下要求:
到目前为止的努力:
除了谷歌搜索,我已经搜索了这方面的类似主题(例如"我如何检查Excel是否打开")。大多数时候答案是关于如何规避问题的核心,所以他们没有帮助我。答案 0 :(得分:1)
如果您只是从文件中读取,则可以考虑使用xlrd
模块而不是win32com
。这是跨平台的,不需要Excel工作。
答案 1 :(得分:1)
我回过头来解决这个确切的问题,首先向Excel询问已经打开的工作簿列表。如果我要打开的文件已经打开,那么我会设置一个标志" leaveOpenOnExit = True&#34 ;,否则将其保留为false,然后打开它。然后进行处理。然后在结束时,使用标志来决定是否关闭工作簿。
实际上,我还测试了我的脚本启动后是否已启动Excel,使用win32com' s GetActiveObject
如果没有可用则引发异常,然后我相应地设置了一个标志。使用该标志,在退出时我只会关闭Excel,如果它已在脚本启动时打开。模式是:
from win32com.client import GetActiveObject
from win32com.client import constants as comConst # will only contain COM constants if
# makepy.py has been run on Excel or if EnsureDispatch has been used once
try:
excelRunsAtStart = True
excel = GetActiveObject("Excel.Application")
except com_error:
excelRunsAtStart = False
excel = Dispatch("Excel.Application")
# use comApp...
wb = excel.Workbooks.Open(excelPath, comConst.ReadOnly=1)