【问题标题】:Google App Script - can't setValue with data from APIGoogle App Script - 无法使用 API 中的数据设置值
【发布时间】:2021-03-26 03:50:43
【问题描述】:

我有一个调用 API 的 Google 脚本,我想将结果放入 Google Sheet。 我的代码如下。我可以从 API 获得响应没有问题,但我不能将其插入工作表中。当我运行脚本时出现错误:

异常:参数 (number[]) 与方法签名不匹配 对于 SpreadsheetApp.Range.setValues。

谁能告诉我我在这里做错了什么?

// custom menu
function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Custom Menu')
      .addItem('Get Data','displayData')
      .addToUi();
}

// function to call API
function calldata() {
  
  // Call the API
    var response = UrlFetchApp.fetch("https://webhooks.mongodb-realm.com/api/client/v2.0/app/cards-fvyrn/service/Cards/incoming_webhook/getCardMetadata");

  
  // Parse the JSON reply
  var json = response.getContentText();
  var data = JSON.parse(json);
  
  Logger.log(data[0]); <--first item in the returned data
  Logger.log(data.length);
  
  return data;
  
}

function displayData() {
  var data = calldata();
  var numRows = data.length  
  var sheet = SpreadsheetApp.getActiveSheet();
  //var headerRow = ['brand', 'manufacturer', 'variation']
  //sheet.appendRow(headerRow)
 
  var newLine = sheet.getLastRow() + 1;
  var newRange = sheet.getRange(newLine,1,numRows,4);
  newRange.setValues(data); 
}

返回的数据如下所示(截断)

 [{_id={$oid=5fd5de40134d172aa8279cac}, manufacturer=SAGE, brand=, variation=Jerseys Printing Plates Yellow}, {_id={$oid=5fd5de40134d172aa8279cad}, variation=Crusade Materials Prime, brand=Rookies and Stars, manufacturer=Leaf}, {variation=Biography of a Legend Autographs Silver, manufacturer=SP, brand=Chirography, _id={$oid=5fd5de40134d172aa8279cae}}, {variation=Future Star Materials Gold, manufacturer=Upper Deck, _id={$oid=5fd5de40134d172aa8279caf}, brand=Rookie Debut}, {manufacturer=SPx, brand=, variation=Rookie Autographs NFL Logo, _id={$oid=5fd5de40134d172aa8279cb0}}, {_id={$oid=5fd5de40134d172aa8279cb1}, brand=Absolute Memorabilia, manufacturer=Playoff, variation=Team Quads Materials Prime Spectrum}, {_id={$oid=5fd5de40134d172aa8279cb2}, variation=Century Club Printing Plates Yellow, brand=Aspire, manufacturer=Sage}, {manufacturer=Upper Deck, variation=Sweet Leather Signatures Dual, brand=Sweet Spot, _id={$oid=5fd5de40134d172aa8279cb3}}, {brand=Premier, _id={$oid=5fd5de40134d172aa8279cb4}, variation=Stitchings Variation, manufacturer=Upper Deck}, {manufacturer=Upper Deck, variation=Loyalty Signatures, _id={$oid=5fd5de40134d172aa8279cb5}, brand=Ultimate Collection}, {brand=Premier, _id={$oid=5fd5de40134d172aa8279cb6}, variation=Stitchings Variation Platinum, manufacturer=Upper Deck}, {variation=Rookie Swatch Supremacy, manufacturer=SPx, brand=, _id={$oid=5fd5de40134d172aa8279cb7}}, {brand=Certified Materials, variation=Certified Skills Blue, _id={$oid=5fd5de40134d172aa8279cb8}, manufacturer=Leaf}, {manufacturer=Playoff, brand=Absolute Memorabilia, variation=Star Gazing Materials Prime Oversize Spectrum, _id={$oid=5fd5de40134d172aa8279cb9}}, {brand=Absolute Memorabilia, variation=War Room Spectrum, _id={$oid=5fd5de40134d172aa8279cba}, manufacturer=Playoff}, {brand=Cerified Materials, _id={$oid=5fd5de40134d172aa8279cbb}, variation=Certified Potential Gold, manufacturer=Certified}, {variation=Spectrum Platinum Autographs, _id={$oid=5fd5de40134d172aa8279cbc}, brand=Absolute Memorabilia, manufacturer=Playoff}, {_id={$oid=5fd5de40134d172aa8279cbd}, manufacturer=Playoff, brand=Absolute Memorabilia, variation=Team Trios Silver}, {manufacturer=Playoff, variation=Xtra Points Black, _id={$oid=5fd5de40134d172aa8279cbe}, brand=Prestige}, {brand=Prestige, _id={$oid=5fd5de40134d172aa8279cbf}, manufacturer=Playoff, variation=Gridiron Heritage Materials Prime}, {manufacturer=Topps, brand=, _id={$oid=5fd5de40134d172aa8279cc0}, variation=Hall of Fame Tribute Cut Autographs}, {brand=National Treasures, variation=75th Anniversary Team Materials, manufacturer=Playoff, _id={$oid=5fd5de40134d172aa8279cc1}}, {manufacturer=Topps, brand=Draft Picks and Prospects, _id={$oid=5fd5de40134d172aa8279cc2}, variation=Senior Standout Jersey Combos Holofoil}, {_id={$oid=5fd5de40134d172aa8279cc3}, brand=Gridiron Gear, manufacturer=Donruss, variation=}, {variation=Chrome Silver, brand=Draft Picks and Prospects, manufacturer=Topps}]

【问题讨论】:

  • 谢谢@TheMaster。那么建议是转换为二维数组还是有其他方法?
  • @StuartBrown 检查我的答案。但请仔细阅读 TheMaster 提到的帖子。
  • @Marios,抱歉,我们的帖子越过了。我已经检查了你的答案,它运行良好 - 非常感谢

标签: javascript google-apps-script google-sheets data-manipulation


【解决方案1】:

解释:

请仔细阅读TheMasterpost,其中清楚地解释了如何在工作表中设置值。

在您的特定情况下,您需要将 API 返回的 json 对象转换为将粘贴到工作表中的二维数组。您可以使用 forEach 或您选择的任何循环来做到这一点:

var outputData = [['brand', 'manufacturer', 'variation']];
data.forEach(r=>{
    outputData.push([r.brand,r.manufacturer,r.variation])    
  });

解决方案:

将当前的displayData 替换为以下内容:

function displayData() {
  var data = calldata();
  var sheet = SpreadsheetApp.getActiveSheet();
  var outputData = [['brand', 'manufacturer', 'variation']];
  data.forEach(r=>{
    outputData.push([r.brand,r.manufacturer,r.variation])    
  });
  var newLine = sheet.getLastRow() + 1;
  var newRange = sheet.getRange(newLine,1,outputData.length,outputData[0].length);
  newRange.setValues(outputData); 
}

【讨论】:

    猜你喜欢
    • 2021-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多