Link do określonego arkusza w arkuszu kalkulacyjnym Google

47

Mam skomplikowany arkusz kalkulacyjny Google z wieloma arkuszami i spisem treści. Czy istnieje sposób na utworzenie łącza do nazw arkuszy, aby jednym kliknięciem przejść bezpośrednio do arkusza? To znaczy: kliknięcie komórki „arkusz5” przełącza na arkusz5?

JBWhitmore
źródło
1
Teraz jest taka opcja w arkuszach kalkulacyjnych Google - możesz wybrać Wstaw -> link i wybrać Arkusze w tym arkuszu kalkulacyjnym. Niestety nie mam reputacji potrzebnej do opublikowania tego jako odpowiedzi.
Boris Strandjev

Odpowiedzi:

59

Po przełączeniu się na inny arkusz w Arkuszach kalkulacyjnych Google zwróć uwagę na adres URL w pasku adresu przeglądarki. Na końcu adresu URL powinieneś zobaczyć coś takiego:

#gid=0

Liczba ta zmienia się po przełączeniu arkuszy i określa, który arkusz ma zostać wyświetlony. Skopiuj cały adres URL i utwórz do niego hiperłącze za pomocą tej formuły:

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

Ze skryptem

Dużo myślałem o tym pytaniu, odkąd po raz pierwszy napisałem tę odpowiedź, i wymyśliłem rozwiązanie obejmujące skrypt.

Z otwartym arkuszu kalkulacyjnym, kliknij Narzędzia menu, a następnie edytor skryptów ... . Wklej cały ten kod do edytora:

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

Zapisz skrypt, a następnie odśwież arkusz kalkulacyjny. Po sekundzie czy dwóch pojawi się nowe menu, Zadania , po Pomocy . W tym menu jest jeden element: Przejdź do arkusza ...

Zadania> Przejdź do arkusza ...

Ta pozycja menu otworzy panel z listą nazw wszystkich arkuszy w bieżącym arkuszu kalkulacyjnym. Nie wygląda to tak, ale jeśli klikniesz jedną z nazw arkuszy, arkusz ten pojawi się na początku.


W odpowiedzi na inne pytanie skrypt został ulepszony o przewijalny widok i przyciski.

William Jackson
źródło
Tak, myślę, że w tej chwili jest to jedyne realne rozwiązanie. Niestety nie znalazłem sposobu na tłumaczenie między nazwą „Arkusz5” a gid=7.
Simon East
Nie jestem pewien, co dokładnie masz na myśli. Arkusze są ponumerowane w kolejności od lewej, zaczynając od 0. Więc jeśli arkusz o nazwie „Arkusz5” jest w gid=7, powinien to być ósmy arkusz od lewej.
William Jackson
1
Mam na myśli to, że nie możesz programowo dowiedzieć się, co to gidjest Sheet5, tylko ręcznie. Jeśli zmienia się pozycja, gidzmienia się i nie można już niezawodnie z nią linkować.
Simon East
Jeśli wymyślisz sposób na link według nazwy, opublikuj go!
Joe Casadonte,
1
Lepsza opcja Dostępne tutaj: stackoverflow.com/a/18518779/1814867
Mandar Pandit
7

Z mojego doświadczenia najlepiej to zrobić, aby powiązać funkcję z przyciskiem / obrazem. Jedyną wadą jest to, że nie można przekazać parametrów wraz ze skryptem przypisanym do przycisku. Z tego powodu musisz utworzyć funkcję specyficzną dla każdej nawigacji, ale mogą one być wywoływane w jednym pliku skryptu.

Kroki:

Utwórz obraz (Wstaw -> obraz) i stylizuj go według własnych preferencji

Utwórz niestandardową funkcję za pomocą:

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

a następnie funkcja specyficzna dla twojego przycisku

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

Na koniec przypisz tę funkcję do przycisku

Assign Script...
showSheet5

Powinieneś być teraz w stanie kliknąć przycisk i przejść do „Arkusza5”. Można to również zmodyfikować, aby przejść również do określonego obszaru arkusza.

LoganDell
źródło
Zamiast dodawać funkcję specyficzną dla każdego przycisku, możesz zakodować go na stałe do skoku do arkusza nazwanego w „bieżącej komórce”, np. Zmienić drugi wiersz na czytany var sheet = ss.getSheetByName(ss.getActiveCell().getValue()); - możesz następnie umieścić „przycisk” na stałym miejscu na ekranie i oznacz go „Przejdź do arkusza w bieżącej komórce” i przypisz mu „showSheetByName” (który teraz nie wymaga parametru). Aby użyć, po prostu podświetl komórkę nazwą arkusza (np. Arkusz5) i kliknij przycisk. Jest to trochę pośrednie, ale działa, ponieważ kliknięcie przycisku nie usuwa fokusa z podświetlonej komórki.
Motti Strom