Link a foglio specifico nel foglio di calcolo di Google


47

Ho un foglio di calcolo Google complicato con molti fogli e un sommario. C'è un modo per creare un collegamento ai nomi dei fogli in modo che con un clic si possa andare direttamente al foglio? Cioè: facendo clic sulla cella "foglio5" si passa a foglio5?


1
Ora c'è una tale opzione nei fogli di calcolo di Google: puoi selezionare Inserisci -> link e scegliere Fogli in questo foglio di calcolo. Purtroppo, non ho la reputazione necessaria per pubblicare questo come risposta.
Boris Strandjev il

Risposte:


59

Quando passi a un altro foglio in Fogli di lavoro Google, presta attenzione all'URL nella barra degli indirizzi del browser. Alla fine dell'URL dovresti vedere qualcosa del tipo:

#gid=0

Questo numero cambia quando si cambia foglio e specifica quale foglio visualizzare. Copia l'intero URL e crea un collegamento ipertestuale con questa formula:

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

Con una sceneggiatura

Ho pensato a questa domanda molto da quando ho scritto questa risposta per la prima volta, e ho trovato una soluzione che prevede una sceneggiatura.

Con il foglio di calcolo aperto, fare clic sul Strumenti menu, quindi editor di script ... . Incolla tutto questo codice nell'editor:

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

Salvare lo script, quindi aggiornare il foglio di calcolo. Dopo un secondo o due , dopo Aiuto verrà visualizzato un nuovo menu, Attività . C'è un elemento in questo menu: Vai al foglio ...

Attività> Vai al foglio ...

Questa voce di menu aprirà un pannello con un elenco di nomi di tutti i fogli nel foglio di calcolo corrente. Non sembra, ma se fai clic su uno dei nomi dei fogli, quel foglio verrà visualizzato in primo piano.


Come risposta a un'altra domanda, questo script è stato migliorato per includere una vista scorrevole e pulsanti.


Sì, penso che questa sia l'unica soluzione praticabile al momento. Purtroppo non ho trovato il modo di tradurre tra il nome "Foglio5" e il gid=7.
Simon East,

Non sono sicuro esattamente cosa intendi. I fogli sono numerati in ordine da sinistra a partire da 0. Quindi, se un foglio chiamato "Foglio5" è a gid=7, dovrebbe essere l'ottavo foglio da sinistra.
William Jackson,

1
Quello che voglio dire è che non puoi scoprire a livello di programmazione cos'è gidSheet5, solo manualmente. Se cambia posizione, gidcambia, e non puoi più collegarti ad esso in modo affidabile.
Simon East,

Se trovi un modo per collegare per nome, per favore pubblicalo!
Joe Casadonte,

1
Opzione migliore Disponibile qui: stackoverflow.com/a/18518779/1814867
Mandar Pandit

7

Il modo migliore per farlo dalla mia esperienza è legare una funzione a un pulsante / immagine. L'unico inconveniente è che non è possibile passare parametri insieme a uno script assegnato a un pulsante. Per questo motivo dovrai rendere una funzione specifica per ogni navigazione ma possono essere chiamate in un singolo file di script.

passi:

Crea un'immagine (Inserisci -> immagine) e personalizzala secondo le tue preferenze

Creare una funzione personalizzata con quanto segue:

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

e quindi una funzione specifica per il tuo pulsante

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

Finalmente assegna questa funzione al tuo pulsante

Assign Script...
showSheet5

Ora dovresti essere in grado di fare clic sul pulsante e passare a "Foglio5". Questo può anche essere modificato per andare anche in un'area specifica del foglio.


Invece di aggiungere una funzione specifica per ciascun pulsante, è possibile codificarlo per passare al foglio indicato nella "cella corrente", ad esempio cambiare la seconda riga in lettura var sheet = ss.getSheetByName(ss.getActiveCell().getValue()); - è quindi possibile posizionare il "pulsante" su un punto fisso sullo schermo ed etichettalo "Vai al foglio nella cella corrente" e assegnalo "showSheetByName" (che ora non ha bisogno di un parametro). Per usare, basta evidenziare la cella con un nome di foglio (ad esempio Foglio5) e fare clic sul pulsante. È un po 'indiretto ma funziona perché facendo clic su un pulsante non si rimuove lo stato attivo dalla cella evidenziata.
Motti Strom,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.