【问题标题】:Can't detect if the excel file is open without prompting user to save file / cancel无法检测excel文件是否打开而不提示用户保存文件/取消
【发布时间】:2019-08-05 23:28:47
【问题描述】:

使用 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 文件。

【问题讨论】:

    标签: python excel ironpython


    【解决方案1】:

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

    workbook = excel.Workbooks.Open(UserExcelFile)
    

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

    【讨论】:

    • 由于我无法将 Iron Python 版本升级到 Win32 COM Api,有没有办法只使用 Microsoft.Office.Interop 来实现它?这在一个模拟程序中运行,它有一个固定版本的 Iron Python。
    • 也许您可以在尝试再次打开之前检查文件是否已关闭?您可以通过在尝试再次打开之前检查 workbook.closed 是真还是假来做到这一点。
    【解决方案2】:

    我终于得到了这个工作,如果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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-31
      • 2010-12-20
      • 1970-01-01
      • 2013-08-08
      • 2015-08-30
      • 2013-04-19
      • 1970-01-01
      相关资源
      最近更新 更多