如何使用C#代码禁用Excel中所有单元格的剪切/复制选项
本文关键字:单元格 选项 复制 代码 何使用 Excel | 更新日期: 2023-09-27 18:12:37
/*****--编辑--解决方案结果真的很奇怪。我使用的互操作程序集包含禁用单元格选择的方法(App.EnableSelection
(。但它不起作用。我安装了MSOffice 2010(最初使用的是2007(。现在,安装了新版本的程序集,并且代码没有任何更改,excel表在Excel2007和Excel2010上的表现与预期的一样。我仍然无法理解组装级别发生了什么,但它最终解决了我的问题。:(*****/
我正在编写一个WPF应用程序,它通过程序生成一个excel文件(这是一个工资报告(。我已经使用以下代码保护了文件
myWorkSheet.Protect(Password);
保护效果很好,但我不希望用户能够将任何单元格数据复制到另一张工作表中。我已经尝试使用以下代码,但它不起作用
myWorkSheet.Application.CutCopyMode = (Excel.XlCutCopyMode)0;
我仍然可以复制单元格数据。出了什么问题?
注意:环境为.NET Framework 4.5、MSOffice 2007、Microsoft.Office.Interop Assembly 1.6.0.0版
真正奇怪的是,Application.CutCopyMode
具有类型False
、xlCut
和xlCopy
[1]:https://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel._application.cutcopymode.aspx
我正在使用的程序集版本不包含类型False
。我应该升级到Office 2010吗?
我使用的COM引用是Microsoft Office 12.0对象库1.6版。
有人建议我锁定单元格并禁用对它们的选择,以防止用户复制单元格数据。这是代码,但它不起作用。不知道为什么。
Excel.Application xlApp;
Excel.Workbook xlWorkBook;
Excel.Worksheet xlWorkSheet;
object misValue = System.Reflection.Missing.Value;
xlApp = new Excel.ApplicationClass();
xlWorkBook = xlApp.Workbooks.Add(misValue);
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
//Adding some data to the sheet, modifying cells alignments,adding border,headers
xlWorkSheet.UsedRange.Cells.Locked = true;
xlWorkSheet.Protect("Lomesh", misValue, true, misValue, true, misValue,
misValue, misValue, misValue, misValue, misValue, misValue, misValue,
misValue, misValue, misValue);
xlWorkSheet.EnableSelection = Excel.XlEnableSelection.xlUnlockedCells;
上面的代码不起作用。我仍然可以复制单元格数据。
//Saving using save dialog
xlWorkBook.SaveCopyAs(path);
xlWorkBook.Close(true, misValue, misValue);
xlApp.Quit();
仅仅保护工作表是不够的。您还必须:
(1( 锁定单元格(如果尚未锁定(和
(2( 将保护设置为不启用锁定单元格的选择:
myWorkSheet.EnableSelection = xlUnlockedCells
这将阻止用户选择锁定的单元格,从而阻止用户复制这些单元格。