我的問題類似于需要腳本來回圈遍歷股票行情串列,復制結果輸出,并將輸出粘貼到作業簿中的單獨作業表。但是,不是在最后一個非空行下方復制和粘貼單行(對于每個股票行情),我需要在最后一個非空行下方復制和粘貼 100 行(對于每個股票行情)。
我在一個作業簿中有三張名為Tickers、Data和Results的作業表。
如果手動完成,作業將如下所示: 在作業Data表的單元格 A2 中輸入股票代碼。然后該作業表從谷歌金融檢索歷史時間序列資料,運行公式并將 100 行和 7 列資料(股票代碼、日期、開盤價、最高價、最低價、收盤價、成交量)回傳到同一作業Data表內的 A5:G254 范圍內。復制 100 行回傳的資料并將資料粘貼到結果表上最后一個非空行下方。然后對每個代碼重復該程序。
請求:創建一個腳本來回圈遍歷作業表中 50 個股票代碼的串列Ticker(范圍 B2:B51),一次將 1 個代碼粘貼到作業表的單元格 A2 中Data,等待谷歌金融 API 運行,然后復制所有在 A5:G254 范圍內生成的結果行,并將這些結果粘貼到作業Results表中,在從前一個代碼生成的資料下方,直到有一個“長格式”的時間序列資料表,其中包含 50 個代碼中的每一個的時間序列資料。
我當前腳本的問題在于它僅粘貼所需范圍 A5:G254 的第一行。
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:B51').getValues().filter(String).sort();
myListOfTickers.forEach(ticker => {
dataSheet.getRange('A2').setValue(ticker[0]);
data = dataSheet.getRange('A5:G254').getValues()[0];
pasteData(resultsSheet, data);
});
};
function pasteData(resultsSheet,data){
let nextRow = resultsSheet.getLastRow() 1;
data.forEach((datum,index) => {
resultsSheet.getRange(nextRow,index 1,1,1).setValue(datum);
});
};
uj5u.com熱心網友回復:
我不完全確定,但我認為這就是你想要的
function getNewPrices() {
const ss = SpreadsheetApp.getActive();
const tsh = ss.getSheetByName('Tickers');
let tvs = tsh.getRange('B2:B51').getValues().filter(String).sort();
const dsh = ss.getSheetByName('Data');
const rsh = ss.getSheetByName('Results');
dsh.getRange(2,1,tvs.length,tvs[0].length).setValues(tvs);
let dvs = dsh.dsh.getRange('A5:G254').getValues();
rsh.getRange(rsh.getLastRow() 1, 1, dvs.length, dvs[0].length).setValues(dvs);
}
您可以轉到Google Apps Script Reference并使用搜索框查找您不理解的任何功能。如果它是純 JavaScript 函式,請轉到此處
uj5u.com熱心網友回復:
問題解決了。如果有人想稍后使用它,這里是最終代碼。感謝您提供初始代碼 Cooper。
function getNewPrices() {
const ss = SpreadsheetApp.getActive();
const tsh = ss.getSheetByName('Tickers');
let tvs = tsh.getRange('B2:B51').getValues().filter(String).sort();
const dsh = ss.getSheetByName('Data');
const rsh = ss.getSheetByName('Results');
tvs.forEach(ticker =>{
dsh.getRange('A2').setValue(ticker[0]);
let dvs = dsh.getRange('A5:G254').getValues();
rsh.getRange(rsh.getLastRow() 1, 1, dvs.length, dvs[0].length).setValues(dvs);
});
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/372953.html
標籤:javascript 循环 谷歌应用程序脚本 谷歌表格
