Quelles sont les caractéristiques d'actualisation des fonctions d'importation de feuilles de calcul Google?

8

Les données importées ne sont pas toujours à jour avec les pages source lorsque je charge la feuille de calcul. Lorsque cela se produit, l'actualisation F5 n'aide pas. Ctl-F5 non plus. Apparemment, il y a une sorte de mise en cache.

Je pense qu'ils peuvent limiter les récupérations d'URL lorsque j'essaie d'actualiser trop souvent - comme lorsque je modifie activement ma feuille de calcul.

Référence du document: http://docs.google.com/support/bin/answer.py?answer=75507

Chris Noe
la source
1
Avez-vous essayé le hack Chris?
Jacob Jan Tuinstra

Réponses:

5

Conformément à ce fil de discussion Google Docs Forum , les données doivent être actualisées toutes les heures

Dans ce fil, une affiche suggère d'ajouter une chaîne de requête aléatoire à l'URL dont vous souhaitez extraire -

J'ai utilisé une solution simple pour ajouter un paramètre qui se met à jour toutes les minutes.

L'appel de fonction est: = ImportHtml ("http://www.fifa.com/worldcup/standings/index.html?" & H81; "table"; 4)

La formule dans H81 est: = Minute (Now ())

Cela fait l'affaire pour moi.

mvark
la source
2
Vraiment bien :)
Lipis
1
Intéressant, disent-ils toutes les heures. Il semble que j'obtienne des données instantanées à chaque chargement de page. C'est jusqu'à ce qu'il rechigne. Peut-être que le délai d'une heure entre en jeu. Mais quelle est la rime ou la raison du verrouillage. Je vais essayer votre hack quand cela arrivera. Merci.
Chris Noe
1
Pour l'instant, la formule proposée renvoie "Erreur: cette fonction n'est pas autorisée à référencer une cellule avec NOW (), RAND () ou RANDBETWEEN ()"
Rubén
4

Réponse courte

Vous avez raison, les fonctions d'importation mettent à jour leur résultat à certains intervalles.

Explication

Depuis Modifier les paramètres régionaux, le fuseau horaire, le recalcul et la langue d'une feuille de calcul , un article d'aide de la documentation officielle,

Remarque: Les fonctions de données externes recalculent aux intervalles suivants:

  • ImportRange: 30 minutes
  • ImportHtml, ImportFeed, ImportData, ImportXml: 1 heure
  • GoogleFinance: 2 minutes

Il vaut la peine de dire que les formules sont recalculées lorsque leurs arguments changent, nous pourrions donc l'utiliser pour forcer un rafraîchissement des données importées.

solution de contournement

Une façon de forcer le recalcul des formules avec des fonctions d'importation est de concaténer à l'URL un paramètre déterministe mais inoffensif.

Exemple

Dans l'exemple suivant, "#rev =" & A2 est ajouté à l'URL d'origine

A1: https://en.wikipedia.org/wiki/List_of_gravitationally_rounded_objects_of_the_Solar_System
A2: 1
A3: 4
A4:=IMPORTHTML(A1&"#rev="&A2,"table",A3)

Chaque fois que l'une des valeurs ou A1, A2 ou A3 change, la formule est recalculée. Nous pourrions changer la valeur de A2 pour "forcer" une actualisation du tableau 4 à partir de l'URL dans A1.

Intervalle d'actualisation personnalisé pour les fonctions d'importation

Pour disposer d'un intervalle d'actualisation personnalisé pour les fonctions d'importation, utilisez un script de déclenchement temporel pour mettre à jour le paramètre d'URL déterministe mais inoffensif.

/**
 *
 * Updates at the interval set in the time driven trigger configuration
 * a cell value to be used as a deterministic bu unnicouus URL parameter 
 *
 */
function forceRefresh() {
  //Cell addrees of the deterministic but unnicouos URL parameter
  var reference = 'Sheet1!A2';   
  var rng = SpreadsheetApp.getActiveSpreadsheet().getRange(reference);
  rng.setValue(rng.getValue()+1);
}

Références

Rubén
la source
0

Une autre alternative qui ne repose pas sur la modification de lien:

= if (Minute (Now ()) = Minute (Now ()), ImportHtml (" http://www.fifa.com/worldcup/standings/index.html ?"; "table"; 4), "")

Puisque Minute(Now())=Minute(Now())c'est toujours vrai, le if retournera toujours le ImportHtml

VDizzle
la source
Comment savez-vous que les données récupérées sont la dernière version au lieu d'une version mise en cache?
Rubén
-1

Cliquez sur Fichier> Paramètre de feuille de calcul ... et vérifiez que les deux feuilles sont dans le même paramètre régional et si les réponses proviennent de Jotforms, définissez également le même paramètre régional.

Elsie Cooper
la source
-2

Forcer le recalcul de la plage d'importation en rétablissant la formule de cellule

Obligatoire:

Données importées - Votre cible vers laquelle tout sera copié.

Configuration des données importées - contient les champs suivants:

+ --------------------------------------------- + --- ----------------------------- +
| A | B |
+ --------------------------------------------- + --- ----------------------------- +
| Importez des données à partir de la feuille de calcul avec la clé: | clé |
| Importer des données à partir d'une feuille de calcul entre les plages: | A: AA |
| Colonnes de sélection des données importées: | SELECT * |
| Critères de données importées: | O Col Col2 contient «XYZ» |
| Les données importées doivent être classées par colonne: | COMMANDER PAR Col2 |
+ --------------------------------------------- + --- ----------------------------- +

Scénario:

function onOpen() {
try {
var ss = SpreadsheetApp.getActiveSpreadsheet();
}
catch(err)
{
Browser.msgBox(err);
}

var configsheet = ss.getSheetByName("Imported Data Config");

var configkey = configsheet.getRange("B1").getValue();
var configrange = configsheet.getRange("B2").getValue();
var configselect = configsheet.getRange("B3").getValue();
var configwhere = configsheet.getRange("B4").getValue();
var configorderby = configsheet.getRange("B5").getValue();

var importedsheet = ss.getSheetByName("Imported Data");
importedsheet.getRange("A1").setValue('=QUERY(IMPORTRANGE("' + configkey + '","' + configrange + '"),"' + configselect + ' ' + configwhere + ' ' + configorderby + '")');

SpreadsheetApp.flush();

// Solution of sourcecode is: http://stackoverflow.com/questions/13631584/how-can-i-force-a-recalculation-of-cell-using-importrange-function-in-a-google-s
// OnOpen Trigger: https://developers.google.com/apps-script/understanding_triggers
// Active Spreadsheet solution: https://productforums.google.com/forum/#!topic/docs/XIY0WNX0uL8

Browser.msgBox("Sync Complete!");
}

Cela vous permet de modifier votre formule sans modifier le script et de faciliter le transfert du script sur différentes feuilles.

REMARQUE: cela n'est plus requis dans les nouvelles feuilles de calcul Google publiées en mai 2014.

user58180
la source
3
Merci d'avoir posté. Vous semblez l'ajouter à pas mal de questions ici sur SE. Cela aide-t-il réellement le PO?
Jacob Jan Tuinstra
-3

La minute fonctionne maintenant très bien (et vous pouvez simplement l'inclure dans la formule plutôt que de référencer une cellule).

Cependant, avec certaines URL, cela ne fonctionne pas et semble changer le lien lui-même et peut référencer une autre feuille.

Je ne vais pas être précis, mais un lien se terminant par exemple par:

.....ranking?ranking=xp_total&table=0"&Minute(Now()),"table",4)

va gâcher le lien lui-même. Ce n'est pas une solution complète mais fonctionne toujours pour probablement 90% des liens que les gens utilisent.

Eric Moz
la source
2
À l'heure actuelle, Google Sheets n'autorise pas l'utilisation de fonctions non déterministes sur les fonctions d'importation.
Rubén