这是我的第一个脚本经验。我必须制作两种类型的电子表格。一个是给卖方的,另一个是给经理的。带有脚本按钮的卖方工作表中的数据将导入到经理工作表中。我需要使用网络应用程序,因为卖家看不到经理的电子表格。
这是我损坏的代码。卖方脚本部分:
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);
}
你能告诉我,这是怎么回事?
答案 0 :(得分:0)
恐怕代码有些错误。下面的示例工作正常。但是它使用的模型是卖方的(源)电子表格将数据推送到经理的(目的地)电子表格(即已发布的Web应用程序)。
您当然可以使用拉模型执行此操作,其中Web应用程序位于源电子表格中,数据被拉入目标表中。哪种方法最好取决于所有因素,例如将要有多少个电子表格,它们多久更改一次以及您的总体安全模型等。
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]);
}