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

时间:2014-08-07 05:24:31

标签: c# excel ms-office office-interop

我在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");

这样,当我的编辑代码正在运行时,工作表将保持不受保护(它可能会消耗一些时间,因为工作表中可能有数千或更多记录)。

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

var cellToEdit = activeWorksheet.Range["A2"];
activeWorksheet.Protection.AllowEditRanges.Add("A1",cellToEdit , "password");
cellToEdit.value = "changed cell";

请建议我解决一下。

2 个答案:

答案 0 :(得分:0)

  

这样,当我的编辑代码正在运行时,工作表将保持不受保护(它可能会消耗一些时间,因为工作表中可能有数千或更多记录)。

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

答案 1 :(得分:0)

我已经测试过编写代码而不是运行更长时间说3到4秒,并且似乎默认情况下,excel不允许在代码仍在运行时编辑工作表。