javascript - 需要脚本来遍历股票代码列表、复制结果输出并将输出粘贴到工作簿中的单独工作表
问题描述
如果有人可以帮助我创建以下 Google 表格脚本,我将不胜感激:
我在一个工作簿中有三张名为tickers
,data
的工作表。results
b9
目前,我在工作表的单元格中手动输入股票代码data
。然后该表检索数据(大约需要 30 秒从谷歌金融检索数据、运行公式并将数据返回到F2:AU2
同一数据表中的范围内。
请求:创建一个脚本,loop
通过工作ticker
表(范围B2:B40
)中的 40 个股票代码列表,一次将 1 个符号粘贴到工作表b9
中的单元格中data
,等待 google Finance API 运行,然后copy
在范围内生成结果F2:AU2
,然后粘贴将这些结果放入results
选项卡中,一次 1 行,直到生成 40 行数据以与前面提到的 40 个股票代码列表相对应。
谁能帮我解决这个请求?我会非常感激。
解决方案
此代码在“帮助”菜单旁边添加了一个名为“更新股票”的菜单项,该菜单项提供触发器以运行脚本并清除除标题行(第 1 行)之外的结果选项卡的所有行。我还在“结果选项卡”中添加了“代码”和“运行日期”列。让我知道这是否是您正在寻找的。
/** @OnlyCurrentDoc */
function onOpen() {
let ui = SpreadsheetApp.getUi();
ui.createMenu('Stocks')
.addItem('UPDATE STOCKS', 'getNewPrices')
.addItem('Clear Data','clearData')
.addToUi();
};
function getNewPrices() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const tickerSheet = ss.getSheetByName('tickers');
const dataSheet = ss.getSheetByName('data');
const resultsSheet = ss.getSheetByName('results');
let data;
let myListOfTickers = tickerSheet.getRange('B2:B40').getValues().filter(String).sort();
myListOfTickers.forEach(ticker => {
dataSheet.getRange('B9').setValue(ticker[0]);
data = dataSheet.getRange('F2:AU2').getValues()[0];
pasteData(resultsSheet, data, ticker);
});
};
function pasteData(resultsSheet,data, ticker){
let nextRow = resultsSheet.getLastRow() + 1;
////////////////////////////////////////////////
//
// set timezone to your timezone
// https://gist.github.com/diogocapela/12c6617fc87607d11fd62d2a4f42b02a
//
////////////////////////////////////////////////
let timeZone = "America/New_York";
//let timeZone = "America/Detroit";
//let timeZone = "America/Chicago";
//let timeZone = "America/Denver";
//let timeZone = "America/Los_Angeles";
resultsSheet.getRange(nextRow,1).setValue(ticker);
resultsSheet.getRange(nextRow,2).setValue(Utilities.formatDate(new Date(),timeZone,"MM/dd/yyy"));
data.forEach((datum,index) => {
resultsSheet.getRange(nextRow,index + 3,1,1).setValue(datum);
});
};
function clearData(){
const ss = SpreadsheetApp.getActiveSpreadsheet();
const resultsSheet = ss.getSheetByName('results');
const range = resultsSheet.getRange(2,1,resultsSheet.getLastRow(),resultsSheet.getLastColumn());
range.clearContent();
}
推荐阅读
- r - 在R中查找多边形的最近邻
- python - 有没有办法从 return 语句中分离两个值?
- ios - 在嵌入式 SFSafariViewController 中打开通用链接
- python - 在python中选择排序算法
- javascript - 条形图 d3 条形下方的圆圈
- c# - 具有动态属性的 EF 查询
- python - 编写机器学习分类器算法
- javascript - jQuery .on("click", ".dropdown-menu li a", function () not working
- python - (Discord.py)我如何创建一个命令来给你一个指定的角色?
- ruby-on-rails - url id 不小心被 rails 中的 favicon 替换了