Google apps script 仅创建一个电子表格,用于在doPost中存储数据,无需重复
我正在使用GoogleAppScript从发布到脚本的外部源向电子表格添加数据。如果尚未创建电子表格,我希望创建该电子表格,然后将数据附加到同一电子表格中。但是,每次外部源发布时,脚本都会复制电子表格,我会在驱动器中创建数百个文件 我试过检查电子表格是否处于活动状态且不为空,但由于我是一个完全的初学者,我不确定我在做什么,也不知道如何让脚本识别创建的电子表格,而不是复制它自己Google apps script 仅创建一个电子表格,用于在doPost中存储数据,无需重复,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我正在使用GoogleAppScript从发布到脚本的外部源向电子表格添加数据。如果尚未创建电子表格,我希望创建该电子表格,然后将数据附加到同一电子表格中。但是,每次外部源发布时,脚本都会复制电子表格,我会在驱动器中创建数百个文件 我试过检查电子表格是否处于活动状态且不为空,但由于我是一个完全的初学者,我不确定我在做什么,也不知道如何让脚本识别创建的电子表格,而不是复制它自己 function doPost(e) { var sl = e.parameter; url = PropertiesS
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);
}
}
如何仅创建电子表格的一个实例并向其中添加数据?由
doPost
触发的脚本没有活动电子表格的概念(即使它绑定到电子表格)。您应该使用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为null,否则将创建一个新的电子表格并存储其Id
(我不明白为什么doPost函数本身会发出Post请求,但这与要点无关。)由doPost触发的脚本没有活动电子表格的概念(即使它绑定到电子表格)。您应该使用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为null,否则将创建一个新的电子表格并存储其Id
(我不明白为什么doPost函数本身会发出Post请求,但这与要点无关。)Post是对外部源代码的回调,用于调试。你的建议奏效了,非常感谢!post是对外部源进行调试的回调。你的建议奏效了,非常感谢!