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

评论

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

#1 楼

当您切换到Google Spreadsheets中的其他工作表时,请注意浏览器地址栏中的URL。在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之间进行转换的方法。

–西蒙东
2012年5月23日下午3:50

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

–威廉·杰克逊
2012年5月23日15:23

我的意思是,您无法以编程方式仅通过手动方式找到Sheet5是什么。如果位置发生变化,则gid发生变化,您将无法再可靠地链接到该位置。

–西蒙东
2012年5月24日3:23



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

–乔·卡萨登特(Joe Casadonte)
2012年7月7日在16:36

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

– Mandar Pandit
17-4-30在11:59



#2 楼

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

步骤:

创建图像(插入- >图片)并根据您的喜好对其进行样式设置

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

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
2013年6月6日12:32

#3 楼

现在,无需任何脚本即可轻松实现此功能:


单击要链接的单元格,然后单击cmd + k(或转到Insert > Insert link
现在应该弹出一个窗口出现在您的单元格中,在Link字段中带有一个选项,可让您选择Sheets in this spreadsheet。单击该按钮,然后(如下图所示),您应该能够从已经创建的所有工作表中进行选择。确保您已经创建了要链接的工作表,否则它不会作为选项出现。




您可以输入任何文本在下拉菜单的Text字段中,将其作为链接的别名。