[英]Updating rows in Google Sheets using Google script
我有以下帶有名為db
的標簽的 Google 表格:
實際上,這個列表要長得多。 最終,我希望每小時觸發一個功能,從 Yahoo! 下載 50 家公司的數據! 金融,因為不受利率限制。
我目前正在開發此功能,並在Code.gs
中有以下內容:
function trigger() {
var db = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('db');
var tickers = db.getRange('A2:A').getValues();
for (var row = 1; row <= 5; row++) {
console.log(tickers[row])
var data = yahoo(tickers[row]);
db.getRange(row, 2, 1, 3).setValues(data);
}
}
我一直在搞亂row
的不同起始值,但只是沒有得到預期的結果。 相反,我得到:
我怎樣才能:
B1, C1, D1
中的單元格,而是將數據插入到相應的代碼后面?row <= tickers.length()
但出現錯誤。嘗試
function trigger() {
var db = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('db');
var tickers = db.getRange('A2:A' + db.getLastRow()).getValues().flat();
for (var row = 0; row < tickers.length; row++) {
console.log(tickers[row])
var data = yahoo(tickers[row]);
db.getRange(row + 2, 2, 1, 3).setValues(data);
}
}
解釋:數組(tickers)的索引從 0 開始,而不是 1,因此,當我們捕獲第 2 行的代碼時,您必須添加 2 才能獲得相應的代碼。
使用getRange(row, column, numRows, numColumns)
方法時,請記住數字 1 對應於第 1 行,因此如果您不想覆蓋標題,則必須將其初始化為 2。
同樣重要的是要提到,您使用的方法效率非常低,因為每次循環迭代時您都在調用服務。 如果您打算每小時調用一次此腳本,您可能會超出配額。 所以我建議你使用setValues(values)
。
這是一些可能對您有所幫助的偽代碼。
const sS = SpreadsheetApp.getActiveSheet()
function fillWithoutLoops() {
const tickers = sS.getRange('A2:A').getValues().flat().filter(n => n)
const tickersParsed = tickers.map(yahoo)
sS
.getRange(2, 1, tickersParsed.length, tickersParsed[0].length)
.setValues(tickersParsed)
}
function yahoo(ticker) {
return [ticker, "SOME", "DATA", "MORE"]
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.