2010-01-10 2 views
2

Я пытаюсь манипулировать файлом excel с помощью C# с помощью Microsoft.Office.Interop.Excel. Рабочая книга, которую я пытаюсь манипулировать, имеет общую защиту между пользователями.Как я могу отредактировать или снять защиту одной ячейки в защищенном листе Excel с C#?

У меня есть пароль к файлу, и у меня есть пароль для ячеек, которые я хочу получить и редактировать.

Если я пытаюсь сделать из 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 только доступны Workbook и Worksheet классов.

В качестве альтернативы, вы можете попробовать работать с Worksheet.Protection Property:

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

спасибо, но как отредактировать ячейку, не снимая защиту всей общей книги, которую я имею в виду, с помощью excel я просто нажимаю на ячейку и набираю свой pw для этой ячейки, а затем ее редактируемый, каждый пользователь имеет разные pws для разных ячеек , Я должен быть в состоянии сделать это, не имея pw для защищенной общей книги, так как я могу сделать это от excel – Stacker

+0

Большое вам спасибо, вот что я пробовал: excelWorksheet.Activate(); xl.Range myrange = excelWorksheet.get_Range ("b16", "b16"); excelWorksheet.Protection.AllowEditRanges.Добавить («Название», myrange, «1»); генерирует ошибку: Исключение из HRESULT: 0x800A03EC – Stacker

+0

Извините, но я не знаю, чтобы отсюда оттуда = ( –

1

У меня не было времени, чтобы попробовать, но this paragraph выглядит то, что вы ищете. Похоже, что эквивалентный объект VBA, который вы ищете, - ActiveSheet.Protection.AllowEditRanges, в котором хранится информация об областях, которые могут редактироваться пользователями на листе.
Одна вещь, которую вы, возможно, захотите изучить, также является опцией UserInterfaceOnly на ActiveSheet.Protect. Вы можете защитить диапазон с помощью пароля для пользователей, но получить доступ к нему без пароля с помощью макросов.

Смежные вопросы