【问题标题】:How can I edit or unprotect a single cell in a protected Excel sheet from C#?如何从 C# 编辑或取消保护受保护的 Excel 工作表中的单个单元格?
【发布时间】:2011-10-29 04:34:29
【问题描述】:

我正在尝试使用 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");

【问题讨论】:

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


    【解决方案1】:

    Protect 仅适用于 WorkbookWorksheet 类。

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

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

    【讨论】:

    • 谢谢,但是如何在不取消保护整个共享工作簿的情况下编辑单元格,我的意思是使用 excel 我只需单击单元格并为此单元格输入密码,然后其可编辑,每个用户都有不同的不同单元格的密码,我应该能够在没有受保护的共享工作簿的密码的情况下做到这一点,因为我可以从 excel 中做到这一点
    • 非常感谢,这是我尝试过的:excelWorksheet.Activate(); xl.Range myrange = excelWorksheet.get_Range("b16", "b16"); excelWorksheet.Protection.AllowEditRanges.Add("Title", myrange, "1");它会产生一个错误:HRESULT 异常:0x800A03EC
    • 对不起,我不知道从这里去那里=(
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2015-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-13
      相关资源
      最近更新 更多