首页 > 解决方案 > 如何使用谷歌应用程序脚本将数组写入工作表列并在其旁边的列中添加自定义公式?

问题描述

这是问题所在:

从工作表中的列中获取代码列表(股票清单)

推它,这样每个股票在数组中出现 105 次

将结果数组写入另一个工作表的列 (TickersData)

在每个元素带到 TickersData 的第一个代码旁边,添加公式。

这是代码,我可以在其中重复数组中的值,但不能将它们写入另一张表:

function getGFTickersData() {

  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("LIST OF STOCKS");
  var tickerRng = ss.getRange(2, 1, ss.getLastRow(), 1).getValues();
  var TDSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("TickersData");
  var startRow = 2;
  var tickerArr = [];

  for (var b = 0; b < tickerRng.length; b++) {
    var tickerToArr = tickerRng[b];
    if (tickerRng[b] != '') {
      var repeated = [].concat(... new Array(104).fill([tickerToArr]));
      tickerArr.push(repeated);
    }
  }
  Logger.log(tickerArr.length);

  TDSheet.getRange(TDSheet.getLastRow() + 1, 1, tickerArr.length, 1).setValues(tickerArr);

  var targetRow = TDSheet.getRange("B:B").getValues();
  var maxIndex = targetRow.reduce(function (maxIndex, row, index) {
    return row[0] === "" ? maxIndex : index;
  }, 0);

  var row = TDSheet.getRange(maxIndex + 2, 2).setFormula("=query(googlefinance(" + '"' + tickerArr + '"' + ",'all shares'!A4,'all shares'!D3,'all shares'!D4,'all shares'!D5)," + '"' + "select *" + '"' + ",1)");
}

日志

这是一个股票代码的图像作为示例。在 105 行之后,A 列中应该有一个新的代码,B 列中应该在它旁边添加一个公式: 在此处输入图像描述

标签: javascriptarraysgoogle-apps-scriptgoogle-sheetsgoogle-finance

解决方案


我相信你的目标如下。

  • 您想从“股票清单”表中的“A2:A”中检索值。
  • 您希望通过包含 1 行具有公式的 105 行将检索到的值放入“Sheet10”表=query(googlefinance("###",'all shares'!A4,'all shares'!D3,'all shares'!D4,'all shares'!D5),"select *",1)

为了实现您的目标,我想提出以下示例脚本。

示例脚本:

function getGFTickersData() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("LIST OF STOCKS");
  var tickerRng = ss.getRange(2, 1, ss.getLastRow() - 1, 1).getValues();
  var TDSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet10");
  var values = tickerRng.flatMap(([a]) => [[a, `=query(googlefinance("${a}",'all shares'!A4,'all shares'!D3,'all shares'!D4,'all shares'!D5),"select *",1)`], ...new Array(104).fill([a, ""])]);
  TDSheet.getRange(TDSheet.getLastRow() + 1, 1, values.length, 2).setValues(values);
}

参考:


推荐阅读