【问题标题】:Search spreadsheet by column value, return rows then post the content to external API: JavaScript按列值搜索电子表格,返回行然后将内容发布到外部 API:JavaScript
【发布时间】:2019-11-26 05:50:34
【问题描述】:

我是 javascript/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"];
}  

【问题讨论】:

    标签: javascript arrays json api google-sheets-api


    【解决方案1】:

    您可以使用 getLastRow() 函数 [1] 来缩小数组范围,使其仅包含包含数据的单元格。您必须考虑到 getValues 函数 [2] 每次都返回一个二维数组。并且您可以使用 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]https://developers.google.com/apps-script/reference/spreadsheet/sheet#getlastrow

    [2]https://developers.google.com/apps-script/reference/spreadsheet/range#getvalues

    [3]https://developers.google.com/apps-script/reference/spreadsheet/range#setvaluevalue

    【讨论】:

    • 嗨@Andres,感谢您的光临并给了我宝贵的见解。我已经编辑了列号以反映我的情况。代码运行良好并按预期获得搜索结果,但是,我无法将数据发布到外部 API。 Debugg 没有显示错误或格式问题。请您提供进一步的建议吗?
    • 您的意思是您没有从请求中得到响应?
    • 哦,开枪!,我的错。我在给行编号时犯了一个错误。现在可以了。哇,你是最棒的@Andres。最后一个问题,如果我想要响应,零 (0)--搜索字符串更新为 1,我该怎么做?
    • searchString变量是你需要改成你需要的字符串,1等
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多