链接到Google电子表格中的特定工作表


47

我有一个复杂的Google电子表格,其中包含许多工作表和一个目录。有什么方法可以创建工作表名称的链接,以便单击即可直接转到工作表?即:单击单元格“ sheet5”切换到sheet5?


1
现在,Google电子表格中有一个这样的选项-您可以选择插入->链接,然后在此电子表格中选择表格。遗憾的是,我不具备将其发布为答案所需的声誉。
鲍里斯·斯特兰杰夫

Answers:


59

当您切换到Google Spreadsheets中的其他工作表时,请注意浏览器地址栏中的URL。在网址末尾,您应该看到类似以下内容的内容:

#gid=0

切换工作表时,此数字会更改,并指定要显示的工作表。复制整个URL,并使用以下公式为其创建超链接:

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

带有脚本

自从我第一次写这个答案以来,我已经思考了很多这个问题,然后我想到了一个涉及脚本的解决方案。

与电子表格打开,点击工具菜单,然后脚本编辑器...。将所有这些代码粘贴到编辑器中:

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

保存脚本,然后刷新电子表格。一两秒钟后,“ 帮助”之后将出现一个新菜单“ 任务”。此菜单中只有一项:转到工作表...

任务>转到工作表...

该菜单项将打开一个面板,其中包含当前电子表格中所有工作表的名称列表。它看起来不像,但是如果您单击工作表名称之一,则该工作表将位于最前面。


为了回答另一个问题,此脚本经过了改进,包括可滚动的视图和按钮。


是的,我认为这是目前唯一可行的解​​决方案。不幸的是,我还没有找到在名称“ Sheet5”和之间进行转换的方法gid=7
西蒙·伊斯特

我不确定你到底是什么意思。工作表从左开始按从0开始的顺序编号。因此,如果名为“ Sheet5”的工作表在gid=7,则它应该是从左数第八的工作表。
威廉·杰克逊

1
我的意思是,您无法以编程方式gid仅通过手动方式找到Sheet5是什么。如果位置发生变化,它gid也会发生变化,您将无法再可靠地链接到它。
西蒙·伊斯特

如果您想出一种通过名称链接的方法,请发布!
Joe Casadonte 2012年

1
更好的选择在这里可用:stackoverflow.com/a/18518779/1814867
Mandar Pandit

7

根据我的经验,执行此操作的最佳方法是将功能绑定到按钮/图像。唯一的缺点是您不能将参数和分配给按钮的脚本一起传递。因此,您将需要针对每个导航创建一个函数,但是它们可以在单个脚本文件中被调用。

脚步:

创建一个图像(插入->图像)并根据您的喜好设置其样式

使用以下命令创建自定义函数:

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

然后是按钮特有的功能

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

最后将此功能分配给您的按钮

Assign Script...
showSheet5

现在,您应该可以单击按钮并导航到“ Sheet5”。也可以将其修改为也可以到达页面的特定区域。


无需添加特定于每个按钮的功能,您可以将其硬编码为跳转到“当前单元格”中命名的工作表的位置,例如,将第二行更改为“读取” var sheet = ss.getSheetByName(ss.getActiveCell().getValue()); -然后可以将“按钮”放在屏幕上的固定位置并将其标记为“在当前单元格中跳至图纸”,并将其分配为“ showSheetByName”(现在不需要参数)。要使用,只需突出显示带有工作表名称的单元格(例如Sheet5),然后单击按钮。这有点间接,但是可以正常工作,因为单击按钮不会将焦点从突出显示的单元格中移开。
Motti Strom
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.