web-dev-qa-db-fra.com

IMPORTHTML à une certaine heure de la journée dans Google Spreadsheets

Je cherche un moyen d'importer le tableau à partir de cette formule une fois par jour à une heure donnée au lieu de le mettre à jour automatiquement, comme les formules semblent le faire. Je dois le faire pour suivre chaque jour certains mouvements du marché.

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

Si vous enregistrez la table entière

Je garderais importhtml dans une feuille et utiliserais une autre pour le journal historique. En dessous de ceux-ci sont Sheet1 et 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});
}

Ce script doit être configuré pour une exécution quotidienne (dans Script Editor, accédez à Ressources> Déclencheurs de ce projet et créez-en un pour chaque jour).

Le script copie la plage de données de la feuille Sheet1 à la fin de celle-ci dans la feuille Sheet2, en conservant uniquement le contenu (équivalent de l'action manuelle Ctrl-Maj-V).

Si vous enregistrez la première ligne de la table

Commencez par encapsuler votre commande importhtml() dans array_constrain(..., 2, 99) afin que seules deux lignes de la table soient présentes dans la feuille: les en-têtes et la première ligne de données.

Planifiez ensuite la fonction suivante pour qu'elle s'exécute quotidiennement. Il prend la deuxième ligne de la feuille et la copie ci-dessous, dans la même feuille.

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