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

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

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

如果我试图从Excel中做到这一点,我做到以下几点:

  • 打开文件,input密码
  • 去一个单元格,双击一个单元格进行编辑。
  • 一个对话出现,要求我提供密码,我提供密码,然后我可以编辑。

我想从一个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"); 

Protect仅适用于WorkbookWorksheet类。

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

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

我没有时间去尝试,但这个段落看起来像你在找什么。 看来,你正在寻找的VBA等价物是ActiveSheet.Protection。 AllowEditRanges ,它存储有关用户可以在工作表中编辑的区域的信息。
有一件事你可能也想看看ActiveSheet.Protect上的UserInterfaceOnly选项。 您可以使用用户的密码来保护范围,但不通过macros访问密码。