如何通过Excel Interop在VSTO中锁定指定Excel单元格而非整张表
解决VSTO加载项中部分单元格锁定问题
Excel里所有单元格默认的Locked属性是true,所以你直接锁定AV27再调用Protect方法时,整张表的单元格都会被锁定——因为它们本来就是默认锁定状态,保护生效后就全不能改了。
正确的处理步骤应该是:
- 先解锁工作表的所有单元格
- 单独设置需要保护的单元格为锁定状态
- 最后执行工作表保护
修改后的代码如下:
private void LockCells() { // 解锁所有单元格,让默认锁定状态失效 _worksheet.Cells.Locked = false; // 锁定需要固定的AV27单元格 _worksheet.Range["AV27"].Locked = true; // 保护工作表,可根据需求调整允许的操作 _worksheet.Protect("somepassword", allowFormattingCells: false, allowFormattingColumns: false, allowFormattingRows: false, allowInsertingColumns: false, allowInsertingRows: false, allowInsertingHyperlinks: false, allowDeletingColumns: false, allowDeletingRows: false, allowSorting: false, allowFiltering: false, allowUsingPivotTables: false); }
如果需要让用户在保护状态下能执行某些操作(比如调整单元格格式、插入行),可以把Protect方法里对应的allowXXX参数改成true,这样既能保护指定单元格,又不影响用户的其他正常操作。
内容的提问来源于stack exchange,提问作者skrat
相关产品推荐
相关产品推荐

