首页 > 解决方案 > 遍历数组中的 API 调用(GAS/Javascript)

问题描述

我对 JS 和 GAS 还是很陌生。我有一个 API 调用来从 gov.uk API 系统获取某些数据。我已经到了可以调用一个变量(在本例中为 VRM)并从中获取我需要的某些数据的地步,但我想添加另一个版本,我可以在其中放入大量 VRM 列表并取出 1 个部分(日期)并将该日期添加到该 VRM 旁边。我尝试在其中添加一个 for 循环以循环数组中的 VRM,并且我也尝试在 for 循环中添加此代码,但没有成功。

这是我的代码(出于显而易见的原因,空白键和链接);非常感谢任何建议。

function motapi(reg) {

 // Clear Sheet before running
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var destSheet = ss.getSheetByName("regList");
  var clearPrevious = destSheet.getRange('B2:B').clearContent(); 
  var lastRow = destSheet.getLastRow();

  //call api
  var vrm = SpreadsheetApp.getActiveSheet().getRange(2,1).getValue();
    var keyoptions = {
      method : "GET",
      headers : {
    "Accept": "application/json+v6",
    "x-api-key": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
      }
  };
  var url = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' + vrm;
  var response = UrlFetchApp.fetch(url, keyoptions);
  var prompt = vrm + " | API call complete";

 // Logger.log(response)

  //parse response
  // var json = JSON.parse(response);
  var json = response.getContentText();
  var data = JSON.parse(json);

  Logger.clear();
 // Logger.log(data);
  // log seperate parts of json parse

 // Logger.log(data[0]["motTests"]);
 Logger.log(data[0].motTests[0].expiryDate);

  var dataSet = data[0].motTests //[0].expiryDate;


 // Log expiry dates

  var rows = [],
    data;
  for (i = 0; i < dataSet.length; i++) {
    data = dataSet[i];
    rows.push([data.expiryDate]); //your JSON entities here
  };

 // Logger.log(rows);

// return api call variables to function
  return {
      motdata: json,


};
}

function goodWay() {

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('regList');
var rangeData = sheet.getDataRange();
var lastColumn = rangeData.getLastColumn();
var lastRow = rangeData.getLastRow();
var searchRange = sheet.getRange(1,1, lastRow-1, lastColumn-1);
var motApi = motapi();

  // Get array of values in the search Range
  var rangeValues = searchRange.getValues();
  Logger.log(rangeValues);
  // Loop through array and if condition met, add relevant
  // background color.
  for ( i = 0; i < lastColumn - 1; i++){
    for ( j = 0 ; j < lastRow - 1; j++){
      if(rangeValues[j][i] === "-"){
        sheet.getRange(j+1,i+2).push(motApi);
      }else if (rangeValues[j][i] === 0){
        sheet.getRange(j+2,i+2).setValue();
      }; 
    };
  };

}

标签: javascriptarraysloopsgoogle-apps-scriptgoogle-sheets

解决方案


推荐阅读