Link para uma planilha específica na planilha do Google

47

Eu tenho uma planilha complicada do Google com muitas planilhas e um sumário. Existe alguma maneira de criar um link para os nomes das planilhas para que, com um clique, você possa ir diretamente para a planilha? Ou seja: clicar na célula "planilha5" muda para a planilha5?

JBWhitmore
fonte
1
Agora existe essa opção nas planilhas do Google - você pode selecionar Inserir -> link e escolher Planilhas nesta planilha. Lamentavelmente, não tenho a reputação necessária para postar isso como resposta.
Boris Strandjev 7/12

Respostas:

59

Quando você muda para uma planilha diferente no Google Spreadsheets, preste atenção ao URL na barra de endereços do navegador. No final do URL, você verá algo como:

#gid=0

Esse número muda quando você alterna as folhas e especifica qual folha exibir. Copie o URL inteiro e crie um hiperlink para ele com esta fórmula:

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

Com um script

Pensei bastante nessa questão desde que escrevi essa resposta e criei uma solução que envolve um script.

Com o aberto planilha, clique no Ferramentas menu, depois editor Script ... . Cole todo esse código no 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;
}

Salve o script e atualize a planilha. Após um ou dois segundos, um novo menu, Tarefas , aparecerá após a Ajuda . Há um item neste menu: Ir para a planilha ...

Tarefas> Ir para a planilha ...

Este item de menu abrirá um painel com uma lista de nomes de todas as folhas na planilha atual. Não parece, mas se você clicar em um dos nomes das folhas, ela aparecerá na frente.


Como resposta a outra pergunta, esse script foi aprimorado para incluir uma exibição e botões roláveis.

William Jackson
fonte
Sim, acho que essa é a única solução viável no momento. Infelizmente, não encontrei uma maneira de traduzir entre o nome "Sheet5" e o gid=7.
Simon East
Não sei exatamente o que você quer dizer. As folhas são numeradas na ordem da esquerda, começando em 0. Portanto, se uma folha chamada "Folha5" estiver em gid=7, ela deverá ser a oitava folha da esquerda.
William Jackson
1
O que quero dizer é que você não pode descobrir programaticamente o que gidé a Sheet5, apenas manualmente. Se a posição mudar, será gidalterada e você não poderá mais vincular a ela com confiabilidade.
Simon East
Se você descobrir uma maneira de vincular por nome, poste-a!
Joe Casadonte 07/07
1
Melhor opção disponível aqui: stackoverflow.com/a/18518779/1814867
Mandar Pandit
7

A melhor maneira de fazer isso com a minha experiência é amarrar uma função a um botão / imagem. A única desvantagem é que você não pode passar parâmetros junto com um script atribuído a um botão. Devido a isso, você precisará criar uma função específica para cada navegação, mas elas podem ser chamadas em um único arquivo de script.

Passos:

Crie uma imagem (Inserir -> imagem) e estilize-a conforme sua preferência

Crie uma função personalizada com o seguinte:

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

e depois uma função específica para o seu botão

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

Finalmente, atribua esta função ao seu botão

Assign Script...
showSheet5

Agora você deve poder clicar no seu botão e navegar para "Planilha5". Isso também pode ser modificado para ir para uma área específica da planilha.

LoganDell
fonte
Em vez de adicionar uma função específica para cada botão, você pode codificá-la para o salto para a planilha nomeada na "célula atual", por exemplo, alterar a segunda linha para ler var sheet = ss.getSheetByName(ss.getActiveCell().getValue()); - você pode colocar o "botão" em um local fixo na tela e identifique-o como "Ir para a planilha na célula atual" e atribua-lhe "showSheetByName" (que agora não precisa de um parâmetro). Para usar, basta realçar a célula com um nome de planilha (por exemplo, Planilha5) e clique no botão. É um pouco indireto, mas funciona porque clicar em um botão não remove o foco da célula destacada.
Motti Strom 06/06