Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 仅创建一个电子表格,用于在doPost中存储数据,无需重复_Google Apps Script_Google Sheets - Fatal编程技术网

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

Google apps script 仅创建一个电子表格,用于在doPost中存储数据,无需重复,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我正在使用GoogleAppScript从发布到脚本的外部源向电子表格添加数据。如果尚未创建电子表格,我希望创建该电子表格,然后将数据附加到同一电子表格中。但是,每次外部源发布时,脚本都会复制电子表格,我会在驱动器中创建数百个文件 我试过检查电子表格是否处于活动状态且不为空,但由于我是一个完全的初学者,我不确定我在做什么,也不知道如何让脚本识别创建的电子表格,而不是复制它自己 function doPost(e) { var sl = e.parameter; url = PropertiesS

我正在使用GoogleAppScript从发布到脚本的外部源向电子表格添加数据。如果尚未创建电子表格,我希望创建该电子表格,然后将数据附加到同一电子表格中。但是,每次外部源发布时,脚本都会复制电子表格,我会在驱动器中创建数百个文件

我试过检查电子表格是否处于活动状态且不为空,但由于我是一个完全的初学者,我不确定我在做什么,也不知道如何让脚本识别创建的电子表格,而不是复制它自己

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是对外部源进行调试的回调。你的建议奏效了,非常感谢!