Link zu einem bestimmten Blatt in der Google-Tabelle

47

Ich habe eine komplizierte Google-Tabelle mit vielen Blättern und einem Inhaltsverzeichnis. Gibt es eine Möglichkeit, einen Link zu den Blattnamen zu erstellen, sodass Sie mit einem Klick direkt zum Blatt wechseln können? Das heißt: Wenn Sie auf die Zelle "sheet5" klicken, wechseln Sie zu sheet5.

JBWhitmore
quelle
1
Jetzt gibt es eine solche Option in Google-Tabellen - Sie können Einfügen -> Link auswählen und in dieser Tabelle Tabellen auswählen. Leider habe ich nicht den Ruf, dies als Antwort zu veröffentlichen.
Boris Strandjev

Antworten:

59

Wenn Sie in Google Spreadsheets zu einem anderen Blatt wechseln, beachten Sie die URL in der Adressleiste Ihres Browsers. Am Ende der URL sollte Folgendes stehen:

#gid=0

Diese Nummer ändert sich beim Wechseln der Blätter und gibt an, welches Blatt angezeigt werden soll. Kopieren Sie die gesamte URL und erstellen Sie einen Hyperlink mit dieser Formel:

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

Mit einem Skript

Seit ich diese Antwort geschrieben habe, habe ich viel über diese Frage nachgedacht und eine Lösung gefunden, die ein Skript beinhaltet.

Mit der Tabelle öffnen, klicken Sie auf die Werkzeuge Menü, dann Editor Script ... . Fügen Sie den gesamten Code in den Editor ein:

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;
}

Speichern Sie das Skript und aktualisieren Sie die Tabelle. Nach ein oder zwei Sekunden wird nach der Hilfe ein neues Menü Aufgaben angezeigt . Es gibt einen Punkt in diesem Menü: Gehe zu Blatt ...

Aufgaben> Gehe zu Blatt ...

Dieser Menüpunkt öffnet ein Fenster mit einer Liste der Namen aller Blätter in der aktuellen Tabelle. Es sieht nicht so aus, aber wenn Sie auf einen der Blattnamen klicken, wird dieses Blatt in den Vordergrund gerückt.


Als Antwort auf eine andere Frage wurde dieses Skript um eine scrollbare Ansicht und Schaltflächen erweitert.

William Jackson
quelle
Ja, ich denke, dies ist derzeit die einzig gangbare Lösung. Leider habe ich keine Möglichkeit gefunden, zwischen dem Namen "Sheet5" und dem zu übersetzen gid=7.
Simon East
Ich weiß nicht genau, was du meinst. Die Blätter werden von links beginnend mit 0 durchnummeriert. Wenn sich also ein Blatt mit dem Namen "Sheet5" bei befindet gid=7, sollte es das achte Blatt von links sein.
William Jackson
1
Was ich meine ist, dass Sie nicht programmgesteuert herausfinden können, was gidSheet5 ist, nur manuell. Wenn sich die Position ändert, gidändert sich die Position , und Sie können keine zuverlässige Verbindung mehr herstellen.
Simon East
Wenn Sie einen Weg finden, wie Sie mit Namen verlinken können, posten Sie ihn bitte!
Joe Casadonte
1
Better Option Hier erhältlich: stackoverflow.com/a/18518779/1814867
Mandar Pandit
7

Der beste Weg, dies aus meiner Erfahrung heraus zu tun, besteht darin, eine Funktion an eine Schaltfläche / ein Bild zu binden. Der einzige Nachteil ist, dass Sie keine Parameter zusammen mit einem Skript übergeben können, das einer Schaltfläche zugewiesen ist. Aus diesem Grund müssen Sie für jede Navigation eine spezifische Funktion festlegen, die jedoch auch in einer einzelnen Skriptdatei aufgerufen werden kann.

Schritte:

Erstellen Sie ein Bild (Einfügen -> Bild) und gestalten Sie es nach Ihren Wünschen

Erstellen Sie eine benutzerdefinierte Funktion mit folgenden Elementen:

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

und dann eine spezifische Funktion für Ihre Taste

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

Weisen Sie diese Funktion abschließend Ihrer Taste zu

Assign Script...
showSheet5

Sie sollten nun in der Lage sein, auf Ihre Schaltfläche zu klicken und zu "Sheet5" zu navigieren. Dies kann auch geändert werden, um auf einen bestimmten Bereich des Blatts zuzugreifen.

LoganDell
quelle
Anstatt für jede Schaltfläche eine spezifische Funktion hinzuzufügen, können Sie sie fest codieren, um zu dem Blatt zu springen, das in der "aktuellen Zelle" angegeben ist. Ändern Sie beispielsweise die 2. Zeile in "Lesen", und platzieren var sheet = ss.getSheetByName(ss.getActiveCell().getValue()); Sie die "Schaltfläche" dann an einer festen Stelle auf dem Bildschirm und beschriften Sie es mit "Gehe zu Blatt in aktueller Zelle" und weisen Sie es "showSheetByName" zu (was jetzt keinen Parameter benötigt). Markieren Sie dazu einfach die Zelle mit einem Blattnamen (z. B. Sheet5) und klicken Sie auf die Schaltfläche. Es ist ein wenig indirekt, funktioniert aber, weil durch Klicken auf eine Schaltfläche der Fokus nicht von der hervorgehobenen Zelle entfernt wird.
Motti Strom