web-dev-qa-db-fra.com

Importer des données XML recharger chaque fois que j'ouvre la feuille

J'ai un problème avec mes feuilles de Google en mettant à jour les données IMPORTXML chaque fois que j'ouvre ma feuille.

La fonction importxml est-elle exécutée à chaque fois que j'ouvre Google Sheets? Y at-il un moyen de désactiver cela? Je ne veux pas que les données soient actualisées à chaque fois que j'ouvre la feuille. Il doit sûrement y avoir un moyen de contrôler quand la mise à jour doit être faite.

3
HopeKing

Je ne pense pas qu'il existe un moyen intégré pour désactiver les mises à jour automatiques de importXML, mais voici une solution de contournement. Entrez le script donné ci-dessous dans l'éditeur de script. Il ajoutera un nouvel élément de menu, Personnalisé> Mettre à jour les données importées, lors de la prochaine ouverture de la feuille de calcul.

Placez toutes les formules importXML dans la première ligne d'une feuille et faites-les précéder d'un préfixe, de sorte qu'elles ne soient pas immédiatement reconnues:

`=importXML("http://cnn.com", "//div")

Cela ne fait rien par lui-même. Mais lorsque la commande "Mettre à jour les données importées" est exécutée, la formule actuelle (sans crapaud) se trouve une ligne plus bas, de sorte qu'elle est exécutée. Après cela, toutes les formules de la feuille seront remplacées par leur sortie; en particulier, il ne restera plus aucune formule active importXML. La formule originale collée en arrière restera en place afin que les données puissent être actualisées à nouveau en utilisant simplement le même élément de menu.

function onOpen() {
  var menu = [{name: "Update imported data", functionName: "update"}];
  SpreadsheetApp.getActiveSpreadsheet().addMenu("Custom", menu);
}

function update() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getDataRange();
  range.offset(1, 0).clear();
  var values = range.getValues()[0];
  for (var j=0; j<values.length; j++) {
    if (/^`=import/i.test(values[j])) {
      range.getCell(1, j+1).offset(1, 0).setFormula(values[j].slice(1));
    }
  }
  SpreadsheetApp.flush();
  var range = sheet.getDataRange().offset(1, 0);
  range.copyTo(range, {contentsOnly: true});
}

Limites

Lors de la mise à jour de la sortie, le script efface tout ce qui se trouve sous la première ligne, afin de laisser de la place pour de nouvelles données. Vous ne pouvez donc pas ajouter grand chose d'autre sur cette feuille, à l'exception de importXML. Mettez le reste de la logique sur d'autres feuilles.

Vous pouvez également modifier le script pour ne pas affecter les N premières lignes et utiliser les lignes commençant par N + 1 pour les données importées.

3
user79865