Скопируйте данные с одного листа Google Sheet на другой с помощью скрипта и веб-приложения. - PullRequest
0 голосов
/ 22 января 2019

Это мой первый сценарий.Я должен сделать два типа электронных таблиц.Один для продавцов, другой для менеджера.Данные из листа продавца с кнопкой скрипта импортируются на лист менеджера.Мне нужно использовать веб-приложение, потому что продавец не должен видеть электронную таблицу менеджера.

Это мой неработающий код.Скрипт части для продавцов:

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() {
  var data = "[new Date(), TEST, TWO, FIVE, FOUR, THREE ];"
  UrlFetchApp.fetch('https://script.google.com/a/***/exec', {payload: data}); 
};

И веб-приложение:

var SHEET_ID = '***';

function doPost(e){
  SpreadsheetApp.openById(SHEET_ID).getSheets()[0].appendRow(e.postData);
}

Не могли бы вы сказать, что с ним не так?

1 Ответ

0 голосов
/ 22 января 2019

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

Конечно, вы можете сделать это, используя модель извлечения, где веб-приложение находится в исходных электронных таблицах, а данные помещаются в целевую электронную таблицу. Что лучше всего, зависит от таких факторов, как количество таблиц, как часто они меняются, ваша общая модель безопасности и т. Д.


Button handling code in the source / sending spreadsheet.

function called_by_button(data_to_be_sent){
          // Make some test data.
          var data = {
            'date': new Date(),
            'first': 'data1',
            'second': 'data2'
          };

          var options = {
            'method' : 'post',
            'payload' : data,
            muteHttpExceptions: true
          };
          // This is probably the best way to use UrlFetchApp() and handle errors.

      var url = 'https://script.google.com/macros/s/your-url-here/exec';

      try {
        var response = UrlFetchApp.fetch(url, options); // Post the data (make the HTTP Request)
            var responseCode = response.getResponseCode();
            if (responseCode === 200) { // 200 = SUCCESS
              Logger.log("url_fetch() response code %s ", responseCode);
              return response; 
            } else {
              Logger.log(Utilities.formatString("url_fetch() Request failed for: %s, Expected 200, got %d",url,responseCode ));
              return false; 
              // 
            }
          }// end Try
          catch (err) {
             Logger.log(Utilities.formatString("url_fetch() Request failed (underlying network error). %s, response code: %s",err, responseCode));
             return false;
          } 
   }

doPost() published as a web app from the destination spreadsheet

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

function doPost(e){
  var ss = SpreadsheetApp.getActive();
  var ws = ss.getActiveSheet();
  ws.appendRow([e.parameter.date]);
  ws.appendRow([e.parameter.first]);
  ws.appendRow([e.parameter.second]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...