微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用谷歌应用程序脚本将数组写入表格列并将自定义公式添加到旁边的列? 示例脚本:参考:

如何解决如何使用谷歌应用程序脚本将数组写入表格列并将自定义公式添加到旁边的列? 示例脚本:参考:

问题来了:

从工作表中的一列中获取股票行情列表(股票列表)

按下它,这样每个股票在数组中出现 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,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)");
}

The logs

一个股票代码图片为例。在 105 行之后,A 列中应该有一个新的代码,并且在 B 列中在它旁边添加了公式:

enter image description here

解决方法

我相信你的目标如下。

  • 您想从“库存清单”表中的“A2:A”中检索值。
  • 您想将检索到的值放入“Sheet10”工作表,方法是包含 105 行,其中第一行的公式为 =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}",1)`],...new Array(104).fill([a,""])]);
  TDSheet.getRange(TDSheet.getLastRow() + 1,values.length,2).setValues(values);
}

参考:

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。