5

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

我遇到了一个问题,在我的应用程序运行时,用户仍然可以与Excel进行交互(关闭应用程序/工作簿、更改数据等)。我考虑在我的应用程序处理数据时隐藏 Excel,但这是应用程序范围内的,并且会阻止用户与任何打开的电子表格进行交互。

有没有办法通过 COM 接口锁定 Excel 以防止更改,但用户仍然可以查看/读取它?或者,有没有办法只隐藏/锁定一个工作簿?

4

5 回答 5

3
Application.Interactive=false;
于 2013-05-29T12:13:06.730 回答
1
    Application.Interactive=false;

正如 Sid 建议的那样,你最好的选择是我建议也改变:

    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

一个好主意是在自动化之前收集您的状态,并在您完成自动化后将所有这些属性设置回其原始状态。

于 2014-02-03T19:22:50.357 回答
0

我能想到的最好方法是打开并立即隐藏整个工作簿。这样您仍然可以通过 Interop 与它进行交互,但用户无法看到它(除非他们专门取消隐藏它,但我认为很多用户不知道如何做到这一点)。

xlWorkbook.Windows[1].Visible = false;
于 2012-12-26T22:55:12.247 回答
0

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

于 2012-12-24T16:30:42.983 回答
0

...我能想到的唯一真正智能的方法是创建一个 Excel 应用程序的新实例,将其隐藏并在那里进行更改。

然后,如果工作簿已经打开,只需通知用户并要求他们关闭它。

于 2012-12-24T16:33:02.567 回答