@OpenReligion

Как настроить отправку данных из таблицы в виде одной строки в другую закрытую таблицу?

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

Проблема в том, что менеджер не должен иметь прав просмотра конечной таблицы. А для того, чтобы скрипт работал, права на внесения изменений (а, значит, и просмотра), должны быть.

Как это можно решить?

Вот пример моего скрипта:

var SHEET_ID = '***';
var spreadsheet = SpreadsheetApp.getActive();
var TEST = spreadsheet.getRange("B4").getValue();
var TWO = spreadsheet.getRange("B5").getValue();
var THREE = spreadsheet.getRange("B6").getValue();
var FOUR = spreadsheet.getRange("B7").getValue();
var FIVE = spreadsheet.getRange("B8").getValue(); 

function myFunction() {
  SpreadsheetApp.openById(SHEET_ID).getSheets()[0].appendRow([new Date(), TEST, TWO, FIVE, FOUR, THREE ]);
  
};
  • Вопрос задан
  • 1390 просмотров
Решения вопроса 1
oshliaer
@oshliaer Куратор тега Google Apps Script
Google Products Expert
Действительно, это не так очевидно с первого раза, но, когда сталкиваешься, то понимаешь, что пользователь должен быть редактором, чтобы вносить изменения. Чтобы решить эту задачу необходимо предоставить другой интерфейс для ввода данных.

Замените myFunction на что-то вроде:
function recordToMain(){
  // Берет диапазон 'Источник!B4:B8' активной Таблицы, т.о. это встроенный скрипт
  var data = SpreadsheetApp.getActive().getRange('Источник!B4:B8')
  .getValues().map(function(row){return row[0];});
  var url = 'https://script.google.com/macros/s/ZZZ/exec';
  var options = {
    method: 'POST',
    headers: {
      ContentType: 'application/json'
    },
    payload: JSON.stringify(data),
    muteHttpExceptions: true
  };
  UrlFetchApp.fetch(url, options); 
};


Так же создайте новый проект скриптов, в котором создайте функцию вроде:
function doPost(e) {
  SpreadsheetApp.openById('YYY') // Должна существовать
  .getSheetByName('Приемник')    // Должен быть лист 'Приемник'
  .appendRow([new Date()].concat(JSON.parse(e.postData.contents)));
}

Когда вы опубликуете новый проект для всех от имени себя, то получите url_master для первой функции.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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