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

Цепочка методов

Код выглядит немного запутанным, возможно, потому, что он использует «Цепочку методов», где сразу же возвращается возвращаемое значение из одного метода без захвата объекта в именованный сначала переменная.

Например, класс string имеет метод ToLower(), который можно использовать для получения строчной версии строки. Если у нас есть метод, который возвращает строку (скажем, GetUserName()), то вместо того, чтобы сделать это:

string userName = GetUserName();
string lowerCaseUserName = userName.ToLower();

Мы можем просто сделать это:

string lowerCaseUserName = GetUserName().ToLower();

Если вы понимаете что тогда мы можем разбить цепочку методов на отдельные строки и посмотреть, что делает каждый из них.


Разбить цепочку на отдельные строки

При отладке часто бывает полезно разбить цепочку методов на отдельные строки, чтобы вы могли проверить каждое значение по пути. [1130 ]

Первая строка получает массив FileInfo объектов из каталога (при условии, что dirInfo является экземпляром класса DirectoryInfo), по одному для каждого файла, чей FullName оканчивается на «.pdf»

FileInfo[] allPdfFiles = dirInfo.GetFiles("*.pdf");

Затем следующая строка выбирает свойство Name из каждого объекта FileInfo выше (который является просто именем файла без остальной части пути) и возвращает их в IEnumerable<string>.

]
IEnumerable<string> pdfFileNames = allPdfFiles.Select(fi => fi.Name);

Заметьте , если строка выше выглядит сбивающей с толку, это, вероятно, лямбда-выражение, переданное в оператор Select. Вы можете прочитать это как "для каждого объекта FileInfo в allPdfFiles, который в этом случае называется fi, выберите свойство Name.


Далее мы выбираем первый имя файла, которое не равно "Thumbs.db" (или значение по умолчанию, равное нулю, если не найдено ни одного, отвечающего этому условию). Эта строка не нужна, так как мы знаем, что все имена файлов заканчиваются на «.pdf»

[ 114]

И, наконец, мы разделяем имя файла на символ «-», удаляем все пустые записи и возвращаем фрагменты в виде массива. Поэтому, если имя файла было "My-first-file.pdf", это вернуло бы массив строки: {"My", "first", "file.pdf"}

string[] fileName = firstPdfFileName.Split(new[] {'-'}, 
    StringSplitOptions.RemoveEmptyEntries);
7
задан Community 9 July 2018 в 18:41
поделиться

3 ответа

Я не полагаю, что существует способ сделать это, не используя VBA. Если Вы интересуетесь решением VBA, вот код:

Dim ws as Worksheet
Dim pwd as String

pwd = "" ' Put your password here
For Each ws In Worksheets
    ws.Protect Password:=pwd
Next ws

Снятие защиты является фактически тем же:

Dim ws as Worksheet
Dim pwd as String

pwd = "" ' Put your password here
For Each ws In Worksheets
    ws.Unprotect Password:=pwd
Next ws
14
ответ дан 6 December 2019 в 08:46
поделиться

Не думайте, что существует кнопка, чтобы сделать это, но это - достаточно простой код:

Для Каждого protSheet В Рабочих листах protSheet. Защитите Пароль: = "освищите" Следующий protSheet

3
ответ дан 6 December 2019 в 08:46
поделиться

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

1
ответ дан 6 December 2019 в 08:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: