如何通过COM进行交互时“locking”excel

我有一个.NET应用程序读取数据库,做一些分析,并使用COM接口更新Excel电子表格中的统计信息。 我有应用程序打开工作簿(或检测到,如果它已经打开),并find它需要更新的工作表。

我遇到了一个问题,即在我的应用程序正在运行时,用户仍然可以与Excel进行交互(closures应用程序/工作簿,更改数据等)。 我已经考虑隐藏Excel,而我的应用程序正在咀嚼数据,但这是应用程序范围,并阻止用户与任何打开的电子表格进行交互。

有没有办法通过COM接口lockingExcel的变化,但仍然可以看到/用户可读 ? 或者,是否有办法隐藏/locking单个工作簿?

Application.Interactive=false; 
  Application.Interactive=false; 

正如锡德所build议的那样,我build议你也是最好的select:

  Application.ScreenUpdating = false; // to avoid screen flicker Application.DisplayAlerts = false; // if you wish to suppress most excel messages Application.EnableEvents = false; // if there is vba in the workbook you wish to avoid triggering Application.Calulation = xlCalculationManual; // if it's a calc intensive automation 

在完成自动化之前,最好先收集自己的状态,然后将所有这些属性设置回原来的位置。

Worksheets("Sheet1").protect( <password> )unprotect(<password>)做的伎俩?

…我能想到的唯一真正的智能方法就是创build一个Excel应用程序的新实例,将其隐藏起来并在其中进行更改。

那么,如果工作簿已经打开,只需通知用户并要求他们closures它。

我能想到的最好办法是打开它们,并立即隐藏整个工作簿。 这样,你仍然可以通过Interop与它交互,但是用户没有可见性(除非他们特意取消隐藏,但是我认为很多用户不知道该怎么做)。

 xlWorkbook.Windows[1].Visible = false;