C#Excel加载项:通过代码使工作表只读但可编辑

C#Excel加载项:通过代码使工作表只读但可编辑,c#,excel,ms-office,office-interop,C#,Excel,Ms Office,Office Interop,我已经在C#中创建了一个Excel外接程序,在我的外接程序中,我有一个从web服务检索数据并将其写入Excel的表单,我想使Excel工作表只读,但我还想在代码后面对其进行编辑 我想做什么: 基本上我想阻止用户访问工作表,他只能通过我创建的表单进行更改 我试过: 1-添加单元格验证以禁止对单元格进行任何更改,但仍允许在工作表上执行其他操作,如删除行、列等 2-使用如下密码保护工作表 var activeWorksheet = ((Excel.Worksheet)Globals.ThisAddIn

我已经在C#中创建了一个Excel外接程序,在我的外接程序中,我有一个从web服务检索数据并将其写入Excel的表单,我想使Excel工作表只读,但我还想在代码后面对其进行编辑

我想做什么:

基本上我想阻止用户访问工作表,他只能通过我创建的表单进行更改

我试过:

1-添加单元格验证以禁止对单元格进行任何更改,但仍允许在工作表上执行其他操作,如删除行、列等

2-使用如下密码保护工作表

var activeWorksheet = ((Excel.Worksheet)Globals.ThisAddIn.Application.ActiveSheet);
activeWorksheet.Protect("password");
但是上面的内容不允许我通过代码编辑工作表,我必须在任何时候解锁工作表以进行更改

activeWorksheet.Unprotect("password");
// Do some changes.
activeWorksheet.Protect("password");
这样,当我的编辑代码运行时,工作表将保持不受保护(工作表中可能有数千条或更多记录,这可能会占用一些时间)

我能想到的一种方法是解锁双单元格以编辑它们并再次锁定它们,我尝试了以下代码,但不起作用:

var cellToEdit = activeWorksheet.Range["A2"];
activeWorksheet.Protection.AllowEditRanges.Add("A1",cellToEdit , "password");
cellToEdit.value = "changed cell";
请给我建议一些解决办法

这样,当我的编辑代码运行时,工作表将保持不受保护(工作表中可能有数千条或更多记录,这可能会占用一些时间)


如果在更新处理过程中显示模式表单(例如,进度对话框),则当工作表未受保护时,用户将无法进行编辑。

我测试过编写的代码运行时间超过3到4秒,默认情况下,excel不允许在代码仍在运行时编辑工作表。

好主意,但我不知道如何在excel中显示进度对话框,这可能吗?如果是,你能告诉我什么资源吗?