Как я могу отредактировать или снять защиту одной ячейки в защищенном листе Excel из C #?

2

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

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

Если я попытаюсь сделать это из Excel, я делаю следующее:

  • откройте файл, введите пароль
  • перейдите в ячейку, дважды щелкните ячейку для редактирования.
  • появится диалог с просьбой предоставить пароль, я предоставляю пароль, а затем могу редактировать.

Я хочу сделать это из приложения С#.

Мой текущий код выглядит следующим образом:

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");
Теги:
excel
ms-office
interop

2 ответа

1

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

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
  • 0
    Большое спасибо, вот что я попробовал: excelWorksheet.Activate (); xl.Range myrange = excelWorksheet.get_Range ("b16", "b16"); excelWorksheet.Protection.AllowEditRanges.Add ("Заголовок", myrange, "1"); выдает ошибку: исключение из HRESULT: 0x800A03EC
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню