如何使用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具有类型FalsexlCutxlCopy[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();

如何使用C#代码禁用Excel中所有单元格的剪切/复制选项

仅仅保护工作表是不够的。您还必须:

(1( 锁定单元格(如果尚未锁定(和

(2( 将保护设置为不启用锁定单元格的选择:

myWorkSheet.EnableSelection = xlUnlockedCells 

这将阻止用户选择锁定的单元格,从而阻止用户复制这些单元格。