我有一个.NET应用程序,它使用COM接口读取数据库,进行一些分析并更新 Excel 电子表格中的统计信息。我有应用程序,它打开工作簿(或检测它,如果它已经打开),并找到它需要更新的表。
我遇到的问题是,在我的应用程序运行时,用户仍然可以与 Excel (关闭应用程序/工作簿,更改数据等)进行交互。我考虑在我的应用程序咀嚼数据时隐藏Excel,但这是应用程序范围的,并阻止用户与任何打开的电子表格进行交互。
有没有办法通过COM界面锁定Excel的更改,但用户仍然可以可查看/可读?或者,有没有办法隐藏/锁定单个工作簿?
答案 0 :(得分:3)
Application.Interactive=false;
答案 1 :(得分:1)
Application.Interactive=false;
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
最好在自动化之前收集状态,并在完成自动化后将所有这些属性设置回原始状态。
答案 2 :(得分:0)
Worksheets("Sheet1").protect( <password> )
和unprotect(<password>)
可以解决这个问题吗?
答案 3 :(得分:0)
...我能想到的唯一真正聪明的方法就是创建一个Excel应用程序的新实例,隐藏它并在那里进行更改。
然后,如果工作簿已经打开,只需通知用户并要求他们关闭它。
答案 4 :(得分:0)
我能想到的最好的方法是打开它们并立即隐藏整个工作簿。这样你仍然可以通过Interop与它进行交互,但是用户没有可见性(除非他们特别取消隐藏它,但我认为很多用户不知道如何做到这一点)。
xlWorkbook.Windows[1].Visible = false;