Как запретить редактирование, но разрешить скрытие столбцов / строк - PullRequest
0 голосов
/ 07 мая 2020

У меня есть рабочая тетрадь с несколькими листами. У меня также есть настраиваемое меню, которое, как предполагается, позволяет любому пользователю скрывать / отображать определенные столбцы и строки. Я не хочу, чтобы кто-либо (кроме меня) имел возможность редактировать лист. Я «Защитил» лист, чтобы только у меня был доступ «Редактировать». У меня отлично работает функция показать / скрыть.

Однако всякий раз, когда пользователь пытается это сделать, это терпит неудачу. Мне нужно, чтобы функция отображения / скрытия работала для тех, у кого нет прав на редактирование. Я пробовал использовать "Только предупреждение", но, очевидно, это все еще позволяет им редактировать.

Есть мысли о том, как я могу sh это сделать?

Мой код прост:

function showPercents() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet()
  //var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();

  //for (var j = 0; j < sheets.length ; j++ ) {
   // var sheet = sheets[j];
    var sheetname = sheet.getSheetName();

    if (sheetname != 'Charts' && sheetname != 'DataIn' && sheetname != 'Config')
    {

      var numofcolumns = sheet.getLastColumn();

      var i = 3;

      while (i < numofcolumns - 1)
      {
        sheet.showColumns(i)
        sheet.showColumns(i+2)
        sheet.showColumns(i+4)
        sheet.showColumns(i+5)
        sheet.showColumns(i+7)
        sheet.showColumns(i+9)
        sheet.showColumns(i+10)

        i = i + 11

      }

    }

  //}

}

function hidePercents() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet()
  //var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();

  //for (var j = 0; j < sheets.length ; j++ ) {
   // var sheet = sheets[j];
    var sheetname = sheet.getSheetName();

    if (sheetname != 'Charts' && sheetname != 'DataIn' && sheetname != 'Config')
    {

      var numofcolumns = sheet.getLastColumn();

      var i = 3;

      while (i < numofcolumns - 1)
      {
        sheet.hideColumns(i)
        sheet.hideColumns(i+2)
        sheet.hideColumns(i+4)
        sheet.hideColumns(i+5)
        sheet.hideColumns(i+7)
        sheet.hideColumns(i+9)
        sheet.hideColumns(i+10)

        i = i + 11

      }

    }

  //}

}

1 Ответ

1 голос
/ 07 мая 2020

Создайте второй лист с любыми разрешениями, которые вам нужны, а затем импортируйте необходимые данные из своего первого.

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

Таким образом пользователи могут отображать скрытие или что-то еще, без необходимости сохранять локальную копию, и вы можете заблокировать первую электронную таблицу (ввод данных) (у которого есть собственный URL-адрес), так что они даже не могут его увидеть.

=IMPORTRANGE("abcd123abcd123", "sheet1!A1:C10")

=IMPORTRANGE("http://docs.google.com/spreadsheets/d/URL/to/spreadsheet/edit" , "A22:E27")

Эти замечательные ресурсы помогут показать, как их установить разрешения, если вы хотите полностью заблокировать этот первый лист

https://www.howtogeek.com/442246/how-to-import-data-from-another-google-sheet/

https://support.google.com/a/users/answer/9308940?hl=en

Обновление

На сайте поддержки Google есть большие ресурсы по этому вопросу, краткий ответ на то, как заблокировать определенный c диапазон ячеек, составляет go Data > Protected Sheets and Ranges. Затем вы можете «Установить разрешения» на «Только вы» или подобное, независимо от общего уровня защиты листа.

Если все еще не понятно, просто попробуйте и посмотрите примеры на сайте поддержки Google, довольно сам объяснил, хотя, как только вы используете его один раз

Надеюсь, что дополнительная информация поможет

...