我正在使用Google App Script将数据从POST发送到脚本的外部源添加到电子表格中。我想创建电子表格(如果尚未创建),然后将数据附加到同一电子表格中。但是,每次外部源POST时,脚本都会复制电子表格,并且我在驱动器中创建了数百个文件。
我已经尝试检查电子表格是否处于活动状态而不是null,但由于我是初学者,我不确定自己在做什么,并且无法弄清楚如何制作脚本识别创建的电子表格,而不是重复自己。
function doPost(e)
{
var sl = e.parameter;
url = PropertiesService.getScriptProperties().getProperty('url');
var payload =
{
"List":sl
};
var options =
{
"method" : "post",
"payload" : payload
};
var response = UrlFetchApp.fetch(url,options);
if(SpreadsheetApp.getActive() != null)
{
//append data
}
else
{
var ssNew = SpreadsheetApp.create("Finances");
var ssUrl = ssNew.getUrl();
ssNew.setActiveSpreadSheet().openByUrl(ssUrl);
}
}
如何只创建电子表格的一个实例并向其添加数据?
答案 0 :(得分:0)
由doPost
触发的脚本没有Active Spreadsheet的概念(即使它已绑定到电子表格)。您应该使用openByUrl或openById来访问任何电子表格。最简单的方法是自己创建一个电子表格,并在脚本的openByUrl命令中使用其URL。
如果由于某种原因您不想手动创建电子表格,请使用脚本属性跟踪创建:
function doPost(e) {
// some stuff
var props = PropertiesService.getScriptProperties();
var ss, ssId = props.getProperty('ssId');
if (ssId) {
ss = SpreadsheetApp.openById(ssId);
}
else {
ss = SpreadsheetApp.create("Finances");
props.setProperty('ssId', ss.getId());
}
// access/create some sheet in "ss" and append data
}
此处的逻辑是从脚本属性中获取Id并使用该Id打开电子表格,除非它为空,在这种情况下会创建新的电子表格并存储其ID。
(我不明白为什么你的doPost功能本身会发布一个Post请求,但这不是主要观点。)