web-dev-qa-db-fra.com

Lien vers une feuille spécifique dans une feuille de calcul Google

J'ai une feuille de calcul Google complexe avec de nombreuses feuilles et une table des matières. Existe-t-il un moyen de créer un lien vers les noms des feuilles de sorte qu’un clic permet d’aller directement à la feuille? C’est-à-dire: cliquer sur la cellule "feuille5" permet de passer à feuille5?

47
JBWhitmore

Lorsque vous passez à une autre feuille dans Google Spreadsheets, faites attention à l'URL dans la barre d'adresse de votre navigateur. À la fin de l'URL, vous devriez voir quelque chose comme:

#gid=0

Ce numéro change lorsque vous changez de feuille et spécifie la feuille à afficher. Copiez l'URL entière et créez un lien hypertexte avec cette formule:

=hyperlink("https://docs.google.com/spreadsheet/ccc?key=0AsaQpHJE_LShcDJ0dWNudHFZWVJqS1dvb3FLWkVrS0E#gid=0", "LINK TEXT")

Avec un script

J'ai beaucoup réfléchi à cette question depuis que j'ai écrit cette réponse pour la première fois et j'ai trouvé une solution qui implique un script.

Avec la feuille de calcul ouverte, cliquez sur le menu Outils , puis sur Editeur de script ... . Collez tout ce code dans l'éditeur:

function onOpen(event) {
  var ss = event.source;
  var menuEntries = [];
  menuEntries.Push({name: "Go to sheet...", functionName: "showGoToSheet"});
  ss.addMenu("Tasks", menuEntries);
}

function showGoToSheet() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var allsheets = ss.getSheets();
  var app = UiApp.createApplication();
  app.setTitle("Go to sheet...").setWidth(800).setHeight(600);
  var table = app.createFlexTable();
  table.setCellPadding(5).setCellSpacing(0);
  var goToSheetClick = app.createServerHandler('handleGoToSheetClick');
  var widgets = [];
  for (var i = 0; i < allsheets.length; i++) {
    var sheet_name = allsheets[i].getName();
    widgets[i] = app.createHTML(sheet_name).setId(sheet_name).addClickHandler(goToSheetClick);
    table.setWidget(i, 1, widgets[i])
  }
  var panel = app.createSimplePanel();
  panel.add(table);
  app.add(panel);
  ss.show(app);
}

function handleGoToSheetClick(e) {
  var sheet_name = e.parameter.source;
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName(sheet_name);
  sheet.activate();
  var app = UiApp.getActiveApplication();
  app.close();
  return app;
}

Enregistrez le script, puis actualisez la feuille de calcul. Après une seconde ou deux, un nouveau menu , ainsi que des tâches , s'affichera après Aide . Il y a un élément dans ce menu: Aller à la feuille ...

Tasks > Go to sheet...

Cet élément de menu ouvrira un panneau avec une liste de noms de toutes les feuilles de la feuille de calcul actuelle. Cela ne ressemble pas à cela, mais si vous cliquez sur l'un des noms de feuille, cette feuille apparaîtra au premier plan.


En réponse à une autre question, ce script a été amélioré pour inclure une vue et des boutons à défilement.

59
William Jackson

D'après mon expérience, le meilleur moyen de le faire est de lier une fonction à un bouton/une image. Le seul inconvénient est que vous ne pouvez pas transmettre de paramètres avec un script attribué à un bouton. Pour cette raison, vous devrez créer une fonction spécifique à chaque navigation, mais celle-ci peut être appelée dans un fichier de script unique.

Pas:

Créez une image (Insérer -> image) et donnez-lui un style

Créez une fonction personnalisée avec les éléments suivants:

function showSheetByName(Name) {
   var ss = SpreadsheetApp.getActiveSpreadsheet();
   var sheet = ss.getSheetByName(Name);
   SpreadsheetApp.setActiveSheet(sheet);
}

puis une fonction spécifique à votre bouton

function showSheet5() {
   showSheetByName("Sheet5");
}

Enfin, assignez cette fonction à votre bouton

Assign Script...
showSheet5

Vous devriez maintenant pouvoir cliquer sur votre bouton et naviguer jusqu'à "Sheet5". Cela peut également être modifié pour aller à une zone spécifique de la feuille.

7
LoganDell