2010-01-10 341 views
2

我想通过使用Microsoft.Office.Interop.Excel操纵Excel文件与C#。 我试图操作的工作簿在用户之间共享保护。如何在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"); 

回答

1

Protect只是提供给WorkbookWorksheet类。

或者,你可以尝试用Worksheet.Protection Property工作:

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

谢谢,但我怎么编辑一个单元格,而不保护整个共享工作簿,我的意思是用Excel,我只需点击单元格,然后键入我的PW为这个单元格,然后它的可编辑, 每个用户有不同的单元格为不同的单元格, 我应该可以做到这一点,而不必为受保护的共享工作簿pw,因为我可以从excel – Stacker 2010-01-10 11:45:50

+0

这么做,非常感谢,以下是我曾尝试的: excelWorksheet.Activate(); xl.Range myrange = excelWorksheet.get_Range(“b16”,“b16”); excelWorksheet.Protection.AllowEditRanges。添加(“Title”,myrange,“1”); 它生成一个错误:异常来自HRESULT:0x800A03EC – Stacker 2010-01-10 12:09:02

+0

对不起,但我不知道从这里去= =( – 2010-01-10 12:10:39

1

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

相关问题