首页 > 解决方案 > 谷歌脚本循环覆盖所有行

问题描述

我编写了一个脚本来使用 API 从网站读取数据,并且我想将输出写入谷歌表中。每个 json 对象的 ID 有 4 个数据项,我想将它们写入 4 列 C - F,从第 2 行开始直到第 32 行。

标签: javascriptloopsgoogle-apps-script

解决方案


我相信你的目标如下。

  • 您想将[current_price,forecast,demand,available_shares]单元格“C2”中的值放在活动工作表上。

为此,这个答案怎么样?

修改点:

  • 在您的脚本中,该值与for (i = 2; i < 33; i++) {}每个 each一起放入电子表格中stockId。这样,旧值将被下一个值覆盖。我认为这是您的问题的原因。
  • 我认为在您的情况下,可以使用以下流程。
    1. 在 for 循环之前准备了一个数组。
    2. 将 的值放入[current_price,forecast,demand,available_shares]数组。
    3. 当 for 循环完成时,数组被放入电子表格。

通过此流程,将每个stockId值放入数组中,然后将数组放入电子表格中。当以上几点反映到您的脚本时,它变成如下。

修改后的脚本:

function myFunction() {

  let values = [];  // Added

  for (let stockId = 1; stockId < 32; stockId++) {
    if (stockId == 24) continue;
    var response = UrlFetchApp.fetch("https://api.torn.com/torn/" + stockId + "?selections=stocks&key=" + API);
    var content = response.getContentText();
    var json = JSON.parse(content);
    var current_price = json["stocks"][stockId]["current_price"];
    var forecast = json["stocks"][stockId]["forecast"];
    var demand = json["stocks"][stockId]["demand"];
    var available_shares = json["stocks"][stockId]["available_shares"];

    values.push([current_price,forecast,demand,available_shares]);  // Added
  }
  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();  // Added
  ss.getRange("C2:F" + (values.length + 1)).setValues(values);  // Added
}

参考:


推荐阅读