Javascript 如何使用GoogleApps脚本将数组写入sheets列并将自定义公式添加到它旁边的列?

Javascript 如何使用GoogleApps脚本将数组写入sheets列并将自定义公式添加到它旁边的列?,javascript,arrays,google-apps-script,google-sheets,google-finance,Javascript,Arrays,Google Apps Script,Google Sheets,Google Finance,问题是: 从股票列表中的列中获取股票行情列表 按下它,使每个代码在数组中显示105次 将结果数组写入另一个工作表的列TickersData 在第一个ticker旁边,每个元素都被带到TickersData,添加公式 下面是代码,我可以在数组中重复这些值,但无法将它们写入另一个工作表: function getGFTickersData() { var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("LIST O

问题是:

从股票列表中的列中获取股票行情列表

按下它,使每个代码在数组中显示105次

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

在第一个ticker旁边,每个元素都被带到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列中应该有一个新的ticker,B列中在其旁边添加了公式:
我相信你的目标如下

您希望从A2:A从库存列表表中检索值。 您希望通过包含105行将检索到的值放入Sheet10 sheet,第一行的公式为=querygooglefinance,'all shares'!A4,“所有股份”!D3,“所有股份”!D4,“所有股份”!D5,选择*,1。 为了实现您的目标,我想提出以下示例脚本

示例脚本: 参考:
不幸的是,我无法理解元素X第一次出现的旁边,请在它旁边添加公式。你的示例图像,在VV的正下方,应该有下一个数组元素和它旁边的公式集。我为此道歉。我可以问你目标的细节吗?你好@Tanaike!我只是把问题重新写了一遍,现在应该更清楚了。很抱歉。因此,我们的目标是在列A2中写入105次代码,并在代码B2的第一行旁边写入公式。然后,下面的股票代码也一样。因此,下一个代码应该写入第107行,并在其旁边的单元格B107中设置公式。非常感谢。谢谢你的回复。不幸的是,我无法理解你的目标。我再次为此道歉。为了正确理解您的目标,您能否提供包含您期望的示例输入和输出的示例电子表格?通过这个,我想试着去理解它。谢谢你的回复。TickersData表是您预期的输出情况吗?如果我的理解是正确的,我可以问你关于样本输入的情况吗?例如,将公式放入单元格B4和B109是您的目标?谢谢您的回复。在这种情况下,示例电子表格中的公式与脚本不同。例如,单元格B4为=查询GoogleFinanceFCEL、B2、D2、E2、F2、select*、1。但是您的示例电子表格中的脚本是var gFinFormula==querygooglefinance+''+tickertarr+'','all shares'!A4,“所有股份”!D3,“所有股份”!D4,“所有股份”!D5,+“”+选择*+“”+,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);
}