Пароль для защиты рабочего листа API надстройки Excel Office

У меня вопрос, касающийся защиты рабочего листа Excel ...

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

Я могу установить FormatProtection (range.format.protection.locked = false;) соответственно и WorksheetProtection (worksheet.protection.protect();), чтобы включить это, но, похоже, у меня нет возможности установить пароль через API для защиты рабочего листа? Это означает, например, что любая группа может просто щелкнуть параметр «Снять защиту с листа» на ленте обзора и редактировать листы, которые мне не нужны.

Я пробовал просмотреть приведенную ниже документацию, но, к сожалению, безрезультатно.

В качестве примера приведу функцию, которую я хотел бы выполнить:

function CopyWorksheet() {

        var newAddress;

        Excel.run(function (ctx) {

            var worksheet = ctx.workbook.worksheets.getActiveWorksheet();
            var range = worksheet.getUsedRange();
            range.load();

            // insert new worksheet
            var newWorksheetName = "Copied_Sheet";              
            var newWorksheet = ctx.workbook.worksheets.add(newWorksheetName);

            return ctx.sync().then(function () {

                // copy the old values to the new worksheet
                newAddress = range.address.substring(range.address.indexOf("!") + 1);
                newWorksheet.getRange(newAddress).values = range.values;
                newWorksheet.getRange(newAddress).formulas = range.formulas;
                newWorksheet.getRange(newAddress).text = range.text;

                // protect both worksheets
                worksheet.protection.protect();
                newWorksheet.protection.protect();

                // requirement here to set a password so that no one can 
                // edit the worksheets by selecting 'Unprotect Sheet' in excel
                // ...
            })
            .then(ctx.sync)})
            .catch(function(error) {
                    console.log("Error: " + error);                     
            });
        }

В настоящее время я использую Excel 2016 (настольная версия). Возможно ли это реализовать, или я упустил некоторые существующие функции, которые могут достичь того же результата?

Спасибо за вашу помощь.


person Nigel    schedule 09.08.2016    source источник
comment
что ты уже испробовал? Покажите, пожалуйста, еще немного своего кода. Довольно сложно помочь с такими небольшими подробностями о реальном программировании.   -  person Tom K.    schedule 09.08.2016
comment
@Tom Спасибо за быстрый ответ. Я добавил в сообщение код для дополнительного контекста.   -  person Nigel    schedule 09.08.2016


Ответы (2)


Защита паролем недоступна в наших API. Вы можете защитить лист, чтобы избежать случайного редактирования, но вы не можете защитить его паролем. Причина в том, что защита паролем доступна не на всех конечных точках (IIRC, возникла проблема с Excel Online).

Если вы хотите отправить сообщение об ошибке с предложением на UserVoice, вы можете узнать, рассматриваем ли мы возможность защиты паролем как API только для настольных ПК. До сих пор мы избегали этого в Excel, но я знаю, что Word реализовал несколько API «WordApiDesktop». Так что в зависимости от того, насколько сильно он блокирует ваш (и другие) сценарий, это может быть вариантом. В этом случае вы сможете защитить паролем и снять защиту на рабочем столе, но не сможете выполнять эти действия в Интернете.

person Michael Zlatkovsky - Microsoft    schedule 09.08.2016

Есть обновление для этой проблемы: теперь мы поддерживаем защиту паролем. Проверьте https://docs.microsoft.com/en-us/javascript/api/excel/excel.workbookprotection?view=office-js#protect-password-

person Juan Balmori    schedule 07.11.2018
comment
@Jaun Balmori, у меня есть книга Excel, зашифрованная паролем, но запуск кода в вашей ссылке возвращает false, когда я регистрирую workbook.protection.protected. Это ожидается? Я надеялся, что смогу определить, защищена книга или нет, прежде чем отправлять ее на сервер ... - person cs_pupil; 31.12.2018