2010-01-10 338 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選項。您可以使用用戶密碼保護範圍,但無需通過宏密碼即可訪問該範圍。

相關問題