web-dev-qa-db-fra.com

Comment puis-je mettre à jour automatiquement les feuilles de calcul Google pour les mettre à jour lorsque je ne regarde pas?

Ma question est similaire à celle-ci, pour laquelle aucune réponse n’a encore été postée. Comment puis-je obtenir que Google Sheets mette à jour automatiquement une référence à une autre feuille?

Je remplis une feuille de calcul Google avec Zapier, qui crée de nouvelles lignes de données. J'utilise ensuite ImportRange pour transférer certaines données de cette feuille dans une autre, où elles sont traitées et génèrent du texte que j'utilise pour envoyer des courriels ou des SMS.

Cette deuxième feuille est lue par Zapier afin d’envoyer le courrier électronique ou le SMS.

Le problème est que la 2ème feuille ne se met pas à jour automatiquement lorsque je ne suis pas connecté à une modification. c'est-à-dire importrange () ne met pas à jour 'quand je ne cherche pas'.

J'ai les deux feuilles préréglées pour se rafraîchir toutes les minutes et Zapier les "lit" toutes les 5 minutes (en écrivant sur la première feuille, en ne lisant que sur la seconde ").

J'ai essayé tous les scripts, bien que j'aie essayé d'utiliser les fonctions Now () et concatenate () afin de modifier les données extraites par importrange () - ce qui n'a pas résolu le problème.

La deuxième feuille est un peu complexe et prend du temps à charger.

2
user70699

J'ai été capable de trouver un moyen de résoudre mon problème (détaillé ici ) en utilisant un script Apps avec une fonction personnalisée.

Si vous remplacez =IMPORTRANGE(spreadsheet_url, range_string) dans votre feuille de calcul par =DynamicImportRange(spreadsheet_url, sheet_name, range) et collez le code ci-dessous dans Outils -> Editeur de script -> Projet vide, cela devrait fonctionner (voir this pour plus d'informations). informations sur l'écriture de scripts d'applications).

/**
Usage: =DynamicImportRange(spreadsheet_url, sheet_name, range)
Compare to: =IMPORTRANGE(spreadsheet_url, range_string)
 */
function DynamicImportRange(sheet_url, sheet_name, sheet_range) {
  var values = SpreadsheetApp.openByUrl(sheet_url).getSheetByName(sheet_name).getRange(sheet_range).getValues();
  return values
};

/**
*/
function RefreshSheet() {
  // Update the following two variables to suit your particular situation
  var sheet_name = "sheet1"
  var range = "A1"

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheet_name);
  var formula1 = "Loading...";
  var formula2 = sheet.getRange("range").getFormula().toString().replace('"', '\"');
  // Note that the following command will delete everything on the sheet.
  // If you do not want to do this, you may need to get creative
  // with how you specify what gets deleted.  You could potentially split
  // out the last argument of "formula2" to find the range that needs cleared.
  sheet.clear();
  sheet.getRange("range").setValue(formula1);
  Utilities.sleep(245);
  sheet.getRange("range").setValue(formula2);
};

Si vous souhaitez que la feuille soit mise à jour régulièrement, vous pouvez configurer un déclencheur en accédant à Ressources -> Déclencheurs du projet actuel dans la fenêtre de script Apps.

3
tlewis3348

Vous pouvez également utiliser IMPORTRANGE dans une formule conditionnelle toujours VRAI:

=if(now()>0;IMPORTRANGE("1IyAx_*****************************************Lza5x1iVfs"; "Masterlist!AT1:TA39");"CRASH")

De plus, vous pouvez (dans les paramètres de la feuille de calcul) ajouter une mise à jour toutes les minutes. IMPORTRANGE sera mis à jour au moins toutes les minutes.

2
R.G

J'ai résolu ce problème en créant une boucle d'actualisation à l'aide d'une cellule NOW, les deux feuilles se croisant mutuellement dans la cellule NOW.

Lorsque la feuille d'origine est ajoutée avec une soumission de formulaire ou quelque chose de ce type, elle met à jour sa propre cellule NOW et met à jour sa propre cellule IMPORTRANGE. La deuxième feuille de calcul fait de même et met à jour sa propre cellule NOW afin de fournir à la feuille d'origine les données correctes. Comme la deuxième feuille de calcul s'est mise à jour elle-même, elle met également à jour la IMPORTRANGE principale qui actualise les données que vous souhaitez afficher en premier lieu, ainsi que la cellule IMPORTRANGE qui récupère la cellule NOW à partir de la feuille de calcul d'origine.

Au moins, je suis à peu près sûr que c'est comme ça que ça marche. Tout ce que je sais, et tout ce qui m'importe, franchement, c'est que ça marche

0
Jimmy