Защита листов
Защита листов
Введение
Основные параметры защиты в Microsoft Excel:
- Содержимое
- Объекты
- Сценарии
Защита листов не скрывает и не защищает конфиденциальные данные, поэтому это отличается от шифрования файлов. Обычно защита листа подходит для ознакомительных целей. Она предотвращает изменение данных, содержимого и форматирования в листе.
Защита листа
Aspose.Cells предоставляет класс Workbook, который представляет файл Microsoft Excel. Класс Workbook содержит коллекцию Worksheets, которая позволяет получить доступ к каждому листу в файле Excel. Лист представлен классом Worksheet.
Класс Worksheet предоставляет метод Protect, который используется для применения защиты на листе. Метод Protect принимает следующие параметры:
- Тип защиты, тип защиты, применяемый для листа. Тип защиты применяется с помощью перечисления ProtectionType.
- Новый пароль, новый пароль, используемый для защиты листа.
- Старый пароль, старый пароль, если лист уже защищен паролем. Если лист еще не защищен, то просто передайте null.
Перечисление ProtectionType содержит следующие предопределенные типы защиты:
Типы защиты | Описание |
---|---|
All | Пользователь не может изменять ничего на этом листе |
Contents | Пользователь не может вводить данные на этом листе |
Objects | Пользователь не может изменять рисуночные объекты |
Scenarios | Пользователь не может изменять сохраненные сценарии |
Structure | Пользователь не может изменять структуру |
Windows | Защита применяется к окнам |
None | Никакая защита не применяется |
Приведенный ниже пример показывает, как защитить лист паролем.
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); | |
// Creating a file stream containing the Excel file to be opened | |
FileStream fstream = new FileStream(dataDir + "book1.xls", FileMode.Open); | |
// Instantiating a Workbook object | |
// Opening the Excel file through the file stream | |
Workbook excel = new Workbook(fstream); | |
// Accessing the first worksheet in the Excel file | |
Worksheet worksheet = excel.Worksheets[0]; | |
// Protecting the worksheet with a password | |
worksheet.Protect(ProtectionType.All, "aspose", null); | |
// Saving the modified Excel file in default format | |
excel.Save(dataDir + "output.out.xls", SaveFormat.Excel97To2003); | |
// Closing the file stream to free all resources | |
fstream.Close(); |
Как только указанный выше код используется для защиты листа, вы можете проверить защиту на листе, открыв его. После открытия файла и попытки добавить данные на лист, вы увидите следующий диалог:
Предупреждение о том, что пользователь не может изменять лист |
---|
![]() |
Для работы на листе снимите защиту листа, выбрав Защита, затем Снять защиту таблицы из меню Инструменты.
После выбора пункта меню Снять защиту таблицы откроется диалоговое окно, призывающее вас ввести пароль, чтобы вы могли работать на листе, как показано ниже:
||
Защита нескольких ячеек на листе c помощью Microsoft Excel
Могут быть определенные сценарии, когда вам нужно заблокировать только несколько ячеек на листе. Если вы хотите заблокировать определенные ячейки на листе, вам нужно разблокировать все остальные ячейки на листе. Все ячейки на листе уже инициализированы для блокировки, вы можете проверить это, открыв любой файл Excel в MS Excel и нажав Формат | Ячейки…, чтобы показать диалоговое окно Формат ячеек, а затем щелкнув вкладку Защита и убедившись, что флажок “Заблокирован” по умолчанию установлен.
Следующие пункты описывают, как заблокировать несколько ячеек с помощью MS Excel. Этот метод применим к Microsoft Office Excel 97, 2000, 2002, 2003 и более новым версиям.
- Выберите весь лист, нажав кнопку Выбрать все (серый прямоугольник над номером строки для строки 1 и слева от буквы столбца A).
- Щелкните Ячейки на вкладке Формат, щелкните вкладку Защита, а затем снимите отметку с Заблокировано. Это разблокирует все ячейки на листе. Если команда Ячейки недоступна, части листа могут уже быть заблокированы. На меню Инструменты наведите указатель на Защита, а затем щелкните Снять защиту листа.
- Выберите только ячейки, которые вы хотите заблокировать, и повторите шаг 2, но на этот раз установите флажок Заблокировано.
- На меню Инструменты наведите указатель на Защита, щелкните Защитить лист и затем щелкните OK.
- В диалоговом окне Защитить лист у вас есть возможность указать пароль и выбрать элементы, которые пользователь сможет изменить.
Защита нескольких ячеек на листе с использованием Aspose Cells
В этом методе мы используем только Aspose.Cells API для выполнения этой задачи.
Пример: В следующем примере показано, как защитить несколько ячеек на листе. Сначала разблокировать все ячейки на листе, а затем заблокировать 3 ячейки (A1, B1, C1). Наконец, защитить лист. Объект Style содержит свойство логического типа IsLocked. Вы можете установить свойство IsLocked в значение true или false и применить метод Column/Row.ApplyStyle() для блокировки или разблокировки строки/столбца с выбранными атрибутами.
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); | |
// Create directory if it is not already present. | |
bool IsExists = System.IO.Directory.Exists(dataDir); | |
if (!IsExists) | |
System.IO.Directory.CreateDirectory(dataDir); | |
// Create a new workbook. | |
Workbook wb = new Workbook(); | |
// Create a worksheet object and obtain the first sheet. | |
Worksheet sheet = wb.Worksheets[0]; | |
// Define the style object. | |
Style style; | |
// Define the styleflag object | |
StyleFlag styleflag; | |
// Loop through all the columns in the worksheet and unlock them. | |
for (int i = 0; i <= 255; i++) | |
{ | |
style = sheet.Cells.Columns[(byte)i].GetStyle(); | |
style.IsLocked = false; | |
styleflag = new StyleFlag(); | |
styleflag.Locked = true; | |
sheet.Cells.Columns[(byte)i].ApplyStyle(style, styleflag); | |
} | |
// Lock the three cells...i.e. A1, B1, C1. | |
style = sheet.Cells["A1"].GetStyle(); | |
style.IsLocked = true; | |
sheet.Cells["A1"].SetStyle(style); | |
style = sheet.Cells["B1"].GetStyle(); | |
style.IsLocked = true; | |
sheet.Cells["B1"].SetStyle(style); | |
style = sheet.Cells["C1"].GetStyle(); | |
style.IsLocked = true; | |
sheet.Cells["C1"].SetStyle(style); | |
// Finally, Protect the sheet now. | |
sheet.Protect(ProtectionType.All); | |
// Save the excel file. | |
wb.Save(dataDir + "output.out.xls", SaveFormat.Excel97To2003); |
Защита строки на листе
Aspose.Cells позволяет легко заблокировать любую строку на листе. Здесь мы можем использовать метод ApplyStyle() класса Aspose.Cells.Row, чтобы применить Style к определенной строке на листе. Этот метод принимает два аргумента: объект Style и объект StyleFlag, содержащий все члены, связанные с применяемым форматированием.
В следующем примере показано, как защитить строку на листе. Сначала разблокировать все ячейки на листе, затем заблокировать первую строку. Наконец, защитить лист. Объект Style содержит свойство логического типа IsLocked. Вы можете установить свойство IsLocked в значение true или false, чтобы заблокировать или разблокировать строку/столбец с использованием объекта StyleFlag.
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); | |
// Create directory if it is not already present. | |
bool IsExists = System.IO.Directory.Exists(dataDir); | |
if (!IsExists) | |
System.IO.Directory.CreateDirectory(dataDir); | |
// Create a new workbook. | |
Workbook wb = new Workbook(); | |
// Create a worksheet object and obtain the first sheet. | |
Worksheet sheet = wb.Worksheets[0]; | |
// Define the style object. | |
Style style; | |
// Define the styleflag object. | |
StyleFlag flag; | |
// Loop through all the columns in the worksheet and unlock them. | |
for (int i = 0; i <= 255; i++) | |
{ | |
style = sheet.Cells.Columns[(byte)i].GetStyle(); | |
style.IsLocked = false; | |
flag = new StyleFlag(); | |
flag.Locked = true; | |
sheet.Cells.Columns[(byte)i].ApplyStyle(style, flag); | |
} | |
// Get the first row style. | |
style = sheet.Cells.Rows[0].GetStyle(); | |
// Lock it. | |
style.IsLocked = true; | |
// Instantiate the flag. | |
flag = new StyleFlag(); | |
// Set the lock setting. | |
flag.Locked = true; | |
// Apply the style to the first row. | |
sheet.Cells.ApplyRowStyle(0, style, flag); | |
// Protect the sheet. | |
sheet.Protect(ProtectionType.All); | |
// Save the excel file. | |
wb.Save(dataDir + "output.out.xls", SaveFormat.Excel97To2003); |
Защита столбца на листе
Aspose.Cells позволяет легко заблокировать любой столбец на листе. Здесь мы можем использовать метод ApplyStyle() класса Aspose.Cells.Column, чтобы применить Style к определенному столбцу на листе. Этот метод принимает два аргумента: объект Style и объект StyleFlag, содержащий все члены, связанные с применяемым форматированием.
В следующем примере показано, как защитить столбец на листе. Сначала разблокировать все ячейки на листе, затем заблокировать первый столбец. Наконец, защитить лист. Объект Style содержит свойство логического типа IsLocked. Вы можете установить свойство IsLocked в значение true или false, чтобы заблокировать или разблокировать строку/столбец с использованием объекта StyleFlag.
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); | |
// Create directory if it is not already present. | |
bool IsExists = System.IO.Directory.Exists(dataDir); | |
if (!IsExists) | |
System.IO.Directory.CreateDirectory(dataDir); | |
// Create a new workbook. | |
Workbook wb = new Workbook(); | |
// Create a worksheet object and obtain the first sheet. | |
Worksheet sheet = wb.Worksheets[0]; | |
// Define the style object. | |
Style style; | |
// Define the styleflag object. | |
StyleFlag flag; | |
// Loop through all the columns in the worksheet and unlock them. | |
for (int i = 0; i <= 255; i++) | |
{ | |
style = sheet.Cells.Columns[(byte)i].GetStyle(); | |
style.IsLocked = false; | |
flag = new StyleFlag(); | |
flag.Locked = true; | |
sheet.Cells.Columns[(byte)i].ApplyStyle(style, flag); | |
} | |
// Get the first column style. | |
style = sheet.Cells.Columns[0].GetStyle(); | |
// Lock it. | |
style.IsLocked = true; | |
// Instantiate the flag. | |
flag = new StyleFlag(); | |
// Set the lock setting. | |
flag.Locked = true; | |
// Apply the style to the first column. | |
sheet.Cells.Columns[0].ApplyStyle(style, flag); | |
// Protect the sheet. | |
sheet.Protect(ProtectionType.All); | |
// Save the excel file. | |
wb.Save(dataDir + "output.out.xls", SaveFormat.Excel97To2003); |
Разрешить пользователям редактировать диапазоны
В следующем примере показано, как разрешить пользователям редактировать диапазон в защищенном листе.
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); | |
// Create directory if it is not already present. | |
bool IsExists = System.IO.Directory.Exists(dataDir); | |
if (!IsExists) | |
System.IO.Directory.CreateDirectory(dataDir); | |
// Instantiate a new Workbook | |
Workbook book = new Workbook(); | |
// Get the first (default) worksheet | |
Worksheet sheet = book.Worksheets[0]; | |
// Get the Allow Edit Ranges | |
ProtectedRangeCollection allowRanges = sheet.AllowEditRanges; | |
// Define ProtectedRange | |
ProtectedRange proteced_range; | |
// Create the range | |
int idx = allowRanges.Add("r2", 1, 1, 3, 3); | |
proteced_range = allowRanges[idx]; | |
// Specify the passoword | |
proteced_range.Password = "123"; | |
// Protect the sheet | |
sheet.Protect(ProtectionType.All); | |
// Save the Excel file | |
book.Save(dataDir + "protectedrange.out.xls"); |