在不提示用户保存文件/取消的情况下无法检测到excel文件是否打开

时间:2019-06-20 20:01:00

标签: python excel ironpython

使用Iron Python,我首先需要确定excel文件是否已经打开,然后再打开。如果未打开,则将其打开。问题:当我尝试打开工作簿(如果已经打开而不是尝试失败)时,在我的try语句中,它会完成它,并提示用户在excel中保存/取消打开的文件。如果excel文件已经打开,我不希望提示用户。

我使用Marshal Interopt库访问打开的文件,效果很好

UserExcelFile = os.path.join(userdirectory, 'podi.xlsx')    
try:
  workbook = excel.Workbooks.Open(UserExcelFile)
except:
  print "Looks like it was already open"
  return
workbook = excel.ActiveWorkbook
ws = excel.ActiveSheet

如果文件已经打开,“ workbook = excel.ActiveWorkbook”可以完美地编辑已打开的excel文件。

2 个答案:

答案 0 :(得分:0)

我认为您的tryexcept语句不会在这里捕获异常。即使下面的行已经打开,它也会再次打开该文件。

workbook = excel.Workbooks.Open(UserExcelFile)

您应该检查文件是否已经自己打开。有关如何完成此操作的建议,请参见以下堆栈:Python: Open Excel Workbook using Win32 COM Api

答案 1 :(得分:0)

我最终使它可以在interop中检查excel文件是否已经打开,如果没有打开,它将打开并启动..如果它已经打开,那么它将开始编辑打开的工作簿。对我来说这只是大事,因为它的Iron Python和Win32 COM Api无法与Iron一起使用。

    if ex.Workbooks.Open(UserExcelFile) == True:
        ExtAPI.Log.WriteMessage("excel file already open")
        workbook = excel.ActiveWorkbook
        ex = workbook
        ws = excel.ActiveSheet
    else: 
        workbook = ex.Workbooks.Open(UserExcelFile)
        ws = workbook.Worksheets[1]