我在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";
请建议我解决一下。
答案 0 :(得分:0)
这样,当我的编辑代码正在运行时,工作表将保持不受保护(它可能会消耗一些时间,因为工作表中可能有数千或更多记录)。
如果您在更新处理期间显示模式表单(例如,进度对话框),则在工作表不受保护时,用户将无法进行编辑。
答案 1 :(得分:0)
我已经测试过编写代码而不是运行更长时间说3到4秒,并且似乎默认情况下,excel不允许在代码仍在运行时编辑工作表。