Я пытаюсь манипулировать файлом 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");
У меня не было времени попробовать, но этот параграф выглядит так, как вы ищите. Кажется, что эквивалентный объект VBA, который вы ищете, ActiveSheet.Protection. AllowEditRanges, в котором хранится информация о области, которые могут редактироваться пользователями на листе.
Одна вещь, которую вы, возможно, захотите изучить, - это параметр UserInterfaceOnly в ActiveSheet.Protect. Вы можете защитить диапазон с помощью пароля для пользователей, но получить доступ к нему без пароля с помощью макросов.
Protect
доступен только Workbook
и Worksheet
.
В качестве альтернативы вы можете попробовать работать с Worksheet.Protection Property
:
ActiveSheet.Protection.AllowEditRanges.Add _
Title:="Range123", Range:=Range("K4:L10"), Password:="123"