0

使用 Iron Python 我需要首先确定 excel 文件是否已经打开,然后如果它已打开,请访问它。如果它没有打开然后打开它。问题:在我的尝试语句中,当我尝试打开工作簿时,如果它已经打开而不是尝试失败,它会完成它并提示用户在 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 文件。

4

2 回答 2

0

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

workbook = excel.Workbooks.Open(UserExcelFile)

您应该检查文件是否已经自己打开。可以在堆栈上找到有关如何完成的建议:Python:使用 Win32 COM Api 打开 Excel 工作簿

于 2019-06-20T20:20:47.647 回答
0

我终于得到了这个工作,如果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]
于 2019-08-05T15:28:47.137 回答