簡體   English   中英

使用 Google 腳本更新 Google 表格中的行

[英]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中的單元格,而是將數據插入到相應的代碼后面
  • 運行循環不是 5 次(現在是硬編碼的),而是運行次數與代碼行數一樣多? 我嘗試了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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM