web-dev-qa-db-fra.com

Dupliquer et renommer une feuille en une seule action sur Google Sheets

J'ai un script qui fait référence au nom d'une feuille dans Google Spreadsheets. Lorsque je duplique une feuille avec une cellule qui utilise cette fonction, celle-ci est immédiatement appelée et renvoie un résultat tel que Copy of Sheet1. Lorsque je renomme Copy of Sheet1 en Sheet2, la fonction n'est pas appelée à nouveau car le résultat est mis en cache.

Si je passe un paramètre tel que Today() à la fonction et que je l'ignore simplement, la fonction sera recalculée tous les jours, mais cette opération est sous-optimale pour deux raisons:

  • Je n'ai pas besoin de recalculer cette formule tous les jours. Je ne changerai pas le nom des feuilles, il me faut donc le calculer une fois.
  • Je préférerais ne pas attendre une journée entière pour que la formule soit calculée après avoir dupliqué une feuille.

Ce que je voudrais faire est de dupliquer une feuille et de lui donner un nom avant que les formules de la feuille ne soient calculées. Est-ce possible? Si tel est le cas, comment cela peut-il se faire? Si non, avez-vous d'autres suggestions?

4
Daniel

Cela peut être fait avec un script, en utilisant la méthode insertSheet qui prend le nouveau nom de la feuille et le modèle après lequel il doit être créé. La première fonction ajoute un élément de menu personnalisé lorsque la feuille de calcul est ouverte, la seconde effectue une duplication lorsque cet élément de menu est appelé.

Autant que je sache, le contenu est copié de la même manière qu'avec la fonction "Dupliquer".

function onOpen() {
  var menu = [{name: "Duplicate and name", functionName: "dupName"}];
  SpreadsheetApp.getActiveSpreadsheet().addMenu("Custom", menu);
}

function dupName() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var name = Browser.inputBox('Enter new sheet name');
  ss.insertSheet(name, {template: sheet});
}
2
user79865