Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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
按列值搜索电子表格,返回行,然后将内容发布到外部API:JavaScript_Javascript_Arrays_Json_Api_Google Sheets Api - Fatal编程技术网

按列值搜索电子表格,返回行,然后将内容发布到外部API:JavaScript

按列值搜索电子表格,返回行,然后将内容发布到外部API:JavaScript,javascript,arrays,json,api,google-sheets-api,Javascript,Arrays,Json,Api,Google Sheets Api,我不熟悉javascript/google应用程序脚本,我正在努力找到完成任务的最佳脚本。我有一个google工作表,需要在其中检查某些列中的值,并根据匹配的情况返回要通过外部API发布的行数据。然后,理想情况下,项目的响应被设置回同一行的不同列 我不确定搜索特定列并不仅获取该值,还获取整行并将其传递给外部API的最有效方法 这就是我曾经尝试过但不幸失败的东西。有人能帮我设计密码,请在这里救我 function findTheLastRow(){ var ui = Sprea

我不熟悉javascript/google应用程序脚本,我正在努力找到完成任务的最佳脚本。我有一个google工作表,需要在其中检查某些列中的值,并根据匹配的情况返回要通过外部API发布的行数据。然后,理想情况下,项目的响应被设置回同一行的不同列

我不确定搜索特定列并不仅获取该值,还获取整行并将其传递给外部API的最有效方法

这就是我曾经尝试过但不幸失败的东西。有人能帮我设计密码,请在这里救我

    function findTheLastRow(){
      var ui = SpreadsheetApp.getUi();
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sheet = ss.getActiveSheet();  
      var range = sheet.getRange("W2:W").getValues();
      var searchString = "0";
      if(searchString = "0")
      {
      var lastRow = lastRowData()
      var data = {

        'name':lastRow[2],
        'client': lastRow[3],
        'starts_at':lastRow[5],
        'ends_at':lastRow[6],
        'project_state':lastRow[4],

    };
    var payload = JSON.stringify(data);
    var options = {
        'method': 'POST',
        'Content-Type': 'application/json', 
        'payload' : data,
    };
      var url = 'https:....';
      var response = UrlFetchApp.fetch(url, options);
      var json = JSON.parse(response);
      var id = json ["id"];
}  

可以使用getLastRow函数[1]缩小数组范围,使其仅包含包含数据的单元格。您必须考虑getValues函数[2]每次都返回一个2D数组。您可以使用setValue函数[3]在匹配的单元格上设置值

function findTheLastRow(){
  var ui = SpreadsheetApp.getUi();
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();  
  var range = sheet.getRange("W2:W"+sheet.getLastRow()).getValues();
  var searchString = "0";

  for (var i = 0; i<range.length; i++) {
    if(range[i][0] == searchString) {
      var lastRow = sheet.getRange(2+i,1,1,7).getValues(); //Assuming you only need 7 columns from each row
      var data = {

        'name':lastRow[0][2],
        'client': lastRow[0][3],
        'starts_at':lastRow[0][5],
        'ends_at':lastRow[0][6],
        'project_state':lastRow[0][4],

      };
      var payload = JSON.stringify(data);
      var options = {
        'method': 'POST',
        'Content-Type': 'application/json', 
        'payload' : data,
      };
      var url = 'https:....';
      var response = UrlFetchApp.fetch(url, options);
      var json = JSON.parse(response);
      var id = json["id"];
      //Assuming you want id value in 8th column
      sheet.getRange(2+i, 8).setValue(id);
    }
  }
}
[1]

[2]


[3]

Hi@Andres,谢谢您的光临,给了我宝贵的见解。我编辑了列号以反映我的情况。代码运行良好,并按预期获得搜索结果,但是,我无法获得发布到外部API的数据。调试未显示任何错误或格式问题。请你进一步建议好吗?你的意思是你的请求没有得到回应?噢,见鬼!,我的错。我给行编号时出错了。现在可以了。哇,你是最好的@Andres。最后一个问题,如果我想在响应中,将0-Search字符串更新为1,我该怎么做?searchString变量是您需要更改为所需字符串的变量,1,等等。