Боюсь, что с кодом было несколько ошибок. Следующий пример работает нормально. Но он использует модель, в которой электронная таблица продавца (источника) помещает данные в электронную таблицу менеджера (адресата), которая является опубликованным веб-приложением.
Конечно, вы можете сделать это, используя модель извлечения, где веб-приложение находится в исходных электронных таблицах, а данные помещаются в целевую электронную таблицу. Что лучше всего, зависит от таких факторов, как количество таблиц, как часто они меняются, ваша общая модель безопасности и т. Д.
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]);
}