如何从C#编辑或取消保护受保护的Excel工作表中的单个单元格?

时间:2010-01-10 11:33:48

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

我正在尝试使用Microsoft.Office.Interop.Excel使用C#操作excel文件。 我试图操作的工作簿在用户之间共享保护。

我有文件密码,我有我想要访问和编辑的单元格的密码。

如果我尝试从Excel执行此操作,请执行以下操作:

  • 打开文件,输入密码
  • 转到单元格,双击单元格进行编辑。
  • 出现对话框,要求我提供密码,我提供密码然后我就可以编辑。

我想从C#应用程序中执行此操作。

我目前的代码如下:

xl.Application excelApp = new xl.Application();
excelApp.Visible = true;
xl.Workbook newworkbook =
    excelApp.Workbooks.Open(@"C:\1.xls", 0, false, 5, "password", "", false,
                            xl.XlPlatform.xlWindows, "", true, false, 0, true,
                            false, false);
xl.Sheets excelSheets = newworkbook.Worksheets;
xl.Worksheet excelWorksheet = (xl.Worksheet)excelSheets.get_Item("Sign On_Off");
excelWorksheet.Select(true);
xl.Range myrange = excelWorksheet.get_Range("b16", "b16");
myrange.Value2 = "testing"; 

最后一行给出了以下错误消息:

  

您尝试更改的单元格或图表受到保护,因此是只读的。

我无法取消保护整个工作表的原因,这意味着我将仅为我打开文件,而其他用户无法保存更改。

所以我的问题是:我是否只能取消保护细胞?

我想象的是:

myrange.unprotect("pw");

2 个答案:

答案 0 :(得分:1)

Protect仅适用于WorkbookWorksheet个类。

或者,您可以尝试使用Worksheet.Protection Property

ActiveSheet.Protection.AllowEditRanges.Add _
    Title:="Range123", Range:=Range("K4:L10"), Password:="123"

答案 1 :(得分:1)

我没有时间尝试,但this paragraph看起来像你在找什么。您正在寻找的VBA等效对象似乎是ActiveSheet.Protection.AllowEditRanges,它存储有关用户可以在工作表中编辑的区域的信息。
您可能想要研究的一件事是ActiveSheet.Protect上的UserInterfaceOnly选项。您可以使用用户密码保护范围,但可以通过宏访问它而无需密码。