只创建一个电子表格,用于在doPost中存储数据,无需重复

时间:2016-06-13 00:49:10

标签: google-apps-script google-sheets

我正在使用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);

}


}

如何只创建电子表格的一个实例并向其添加数据?

1 个答案:

答案 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请求,但这不是主要观点。)