web-dev-qa-db-ja.com

Googleスプレッドシートの特定の時刻のIMPORTHTML

数式のように自動的に更新するのではなく、特定の時間に1日に1回、この数式からテーブルをインポートする方法を探しています。毎日市場の特定の動きを追跡するためにこれを行う必要があります。

=IMPORTHTML("http://www.cmegroup.com/trading/agricultural/grain-and-oilseed/corn.html","table",1)
4
Isaac Brekke

テーブル全体を記録する場合

importhtmlを1つのシートに保持し、別のシートを履歴ログに使用します。これらの下にSheet1とSheet2があります。

function dailyLog() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var currentSheet = ss.getSheetByName('Sheet1');
  var logSheet = ss.getSheetByName('Sheet2');
  var lastRow = logSheet.getLastRow();
  logSheet.getRange(lastRow + 1, 1).setValue(new Date());  // insert timestamp
  var range = currentSheet.getDataRange();
  range.copyTo(logSheet.getRange(lastRow + 2, 1), {contentsOnly: true});
}

このスクリプトは毎日実行するように設定する必要があります(スクリプトエディターで、[リソース]> [このプロジェクトのトリガー]に移動し、そのための毎日のトリガーを作成します)。

スクリプトは、Sheet1のデータ範囲をSheet2のデータ範囲の最後にコピーし、内容のみを保持します(手動アクションCtrl-Shift-Vと同等)。

テーブルの最初の行を記録する場合

最初に、importhtml()コマンドをarray_constrain(..., 2, 99)でラップして、テーブルにテーブルの2行(ヘッダーと最初のデータ行)のみが存在するようにします。

次に、次の機能を毎日実行するようにスケジュールします。シートの2行目を取得し、同じシート内で下にコピーします。

function dailyLog() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Sheet1');
  var lastRow = sheet.getLastRow();
  var lastColumn = sheet.getLastColumn();
  var range = sheet.getRange(2, 1, 1, lastColumn);
  range.copyTo(sheet.getRange(lastRow+1, 1), {contentsOnly: true});
}
2
user79865