无法从Google表格中的自定义功能输出或保存API响应

时间:2017-07-05 17:15:40

标签: javascript google-apps-script google-apps google-sheets-api

我有以下谷歌应用程序脚本最终返回一个矩阵,但我能够改变行并使用appendRow方法,因为我试图从自定义函数调用它。

咨询有关自定义函数返回的有关stackoverflow和GAS文档的其他相关问题,应该在调用它的单元格中显示。

我能够在Google脚本编辑器中使用GAS Logger查看返回,但就是这样。如何输出到工作表或以其他方式保存并导出此响应?

示例响应如下:

[[diy_move, forward_mail, update_account, renters_insurance, recommended_provider, utility, home_service, offer, share],
 [forward_mail, update_account, utility, home_service, offer, share]]



// Get current row
function getActiveRow() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var activeRow = sheet.getActiveCell().getRow();

  return activeRow;
}

// call updater api
function getSteps() {
  var values = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
  var userIds = [];
  
  var sheet = SpreadsheetApp.getActiveSheet();
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sss = ss.getSheets()[0];
  var range = sheet.getRange(getActiveRow(), 1, 1, 1);
  var id = range.getValues(); 
  
  function first(list) {
    return list[0];
  }
  
  function getProperty(property) {
    return function (item) {
      return item[property];
    }
  }
  
  var getCode = getProperty('code');
 
  var userIds = values.map(first);
 
  var headers = {
    // auth
    "Content-Type": "application/json",
    "app": "company",
    "uid": "phong@updater.com",
    "client": "*****",
    "access-token": "*****"
  };
  
  
  var options = {
    "method": "GET", 
    "headers": headers
    //"muteHttpExceptions": true
  };
  
  function callApi(id) {
    var url = "http://api.updater.com/v2/item_definitions?user_id=" + id;
    var response = UrlFetchApp.fetch(url, options)
    var json = response.getContentText();
    var data = JSON.parse(json);
    
    return data.map(getCode);
  }
  
  
  function createSupersteps(ids) {
     return ids.map(callApi);
  }
  Logger.log(createSupersteps(userIds));
  sss.appendRow(createSupersteps(userIds));
  //createSupersteps(userIds)
}




1 个答案:

答案 0 :(得分:0)

尝试将[]添加到sss.appendRow([createSupersteps(userIds)]);,使其成为 var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheets()[0]; // Appends a new row with 3 columns to the bottom of the // spreadsheet containing the values in the array sheet.appendRow(["a man", "a plan", "panama"]);

基于文档示例代码appendRow(rowContents)

  

在电子表格中添加一行。这个操作是原子的;它可以防止用户请求最后一行的问题,然后写入该行,并在获取最后一行和写入它之间发生插入变异。

function insert(){
 var ss = SpreadsheetApp.openById('FILE_ID');
 var sheet = ss.getSheets()[0];
 var sample = "sample";
 // Appends a new row with 3 columns to the bottom of the
 // spreadsheet containing the values in the array
 sheet.appendRow([sample]);
}

以下是我的示例代码:

function ascii_to_hexa(str)
{
    var arr1 = [];
    for (var n = 0, l = str.length; n < l; n ++) 
    {
        var hex = Number(str.charCodeAt(n)).toString(16);
        arr1.push(hex);
    }
    return arr1.join('');
}

尝试使用sheet.appendRow(示例)添加;给出错误 enter image description here

希望这有帮助。