Enlace a una hoja específica en la hoja de cálculo de Google

47

Tengo una complicada hoja de cálculo de Google con muchas hojas y una tabla de contenido. ¿Hay alguna forma de crear un enlace a los nombres de las hojas para que con un clic uno pueda ir directamente a la hoja? Es decir: al hacer clic en la celda "hoja5", ¿cambia a hoja5?

JBWhitmore
fuente
1
Ahora existe esa opción en las hojas de cálculo de Google: puede seleccionar Insertar -> enlace y elegir Hojas en esta hoja de cálculo. Lamentablemente, no tengo la reputación necesaria para publicar esto como respuesta.
Boris Strandjev

Respuestas:

59

Cuando cambie a una hoja diferente en las Hojas de cálculo de Google, preste atención a la URL en la barra de direcciones de su navegador. Al final de la URL debería ver algo como:

#gid=0

Este número cambia cuando cambia de hoja y especifica qué hoja mostrar. Copie la URL completa y cree un hipervínculo con esta fórmula:

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

Con un guión

He pensado mucho en esta pregunta desde la primera vez que escribí esta respuesta, y se me ocurrió una solución que involucra un script.

Con la hoja de cálculo abierta, haga clic en el Herramientas menú, entonces editor de secuencias de comandos ... . Pegue todo este código en el 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;
}

Guarde el script y luego actualice la hoja de cálculo. Después de un segundo o dos , aparecerá un nuevo menú, Tareas , después de la Ayuda . Hay un elemento en este menú: Ir a la hoja ...

Tareas> Ir a la hoja ...

Este elemento del menú abrirá un panel con una lista de nombres de todas las hojas en la hoja de cálculo actual. No lo parece, pero si hace clic en uno de los nombres de las hojas, esa hoja aparecerá al frente.


Como respuesta a otra pregunta, este script se mejoró para incluir una vista desplazable y botones.

William Jackson
fuente
Sí, creo que esta es la única solución viable en este momento. Lamentablemente, no he encontrado una manera de traducir entre el nombre "Sheet5" y el gid=7.
Simon East
No estoy seguro exactamente a qué te refieres. Las hojas están numeradas en orden desde la izquierda comenzando en 0. Entonces, si una hoja llamada "Hoja5" está en gid=7, debería ser la octava hoja desde la izquierda.
William Jackson
1
Lo que quiero decir es que no puedes descubrir programáticamente qué gides Sheet5, solo manualmente. Si su posición cambia, gidcambia, y ya no puede vincularlo de manera confiable.
Simon East
Si encuentra una manera de vincular por nombre, ¡publíquelo!
Joe Casadonte
1
Mejor opción disponible aquí: stackoverflow.com/a/18518779/1814867
Mandar Pandit
7

La mejor manera de hacer esto desde mi experiencia es vincular una función a un botón / imagen. El único inconveniente es que no puede pasar parámetros junto con un script asignado a un botón. Debido a esto, tendrá que hacer una función específica para cada navegación, pero pueden llamar a estar en un solo archivo de script.

Pasos:

Crea una imagen (Insertar -> imagen) y dale estilo a tu preferencia

Cree una función personalizada con lo siguiente:

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

y luego una función específica para su botón

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

Finalmente asigne esta función a su botón

Assign Script...
showSheet5

Ahora debería poder hacer clic en su botón y navegar a "Sheet5". Esto también se puede modificar para ir a un área específica de la hoja también.

LoganDell
fuente
En lugar de agregar una función específica a cada botón, puede codificarla al salto a la hoja nombrada en la "celda actual", por ejemplo, cambiar la segunda línea para leer var sheet = ss.getSheetByName(ss.getActiveCell().getValue()); ; luego puede colocar el "botón" en un lugar fijo en la pantalla y etiquetarlo "Saltar a la hoja en la celda actual" y asignarlo "showSheetByName" (que ahora no necesita un parámetro). Para usar, simplemente resalte la celda con un nombre de hoja (por ejemplo, Hoja5) y haga clic en el botón. Es un poco indirecto, pero funciona porque al hacer clic en un botón no se elimina el foco de la celda resaltada.
Motti Strom