如何使用公式将超链接插入Google工作表中的单元格?

UK9*_*K97 2 hyperlink google-sheets google-apps-script array-formulas google-sheets-formula

我正在尝试以一种可以使用'= MATCH()“函数进行复制的方式将超链接插入到单元格中。但是,我似乎无法找到一种无需使用GID即可链接Google表格中单元格的方法。

当我右键单击并“获取到此单元格的链接”时,我得到的URL末尾带有“#gid = 1933185132”。但是,它没有结构,我不能将其与MATCH公式一起使用,也不能像在Excel中通常那样自动填充它。

https://docs.google.com/spreadsheets/d/sheetkey/edit#gid=1933185132

但是,如果这具有像这样的单元格引用

https://docs.google.com/spreadsheets/d/sheetkey/edit#Sheet1!C12

我可以轻松地为MATCH函数重新创建它。

问题:是否有一种替代方法,可以像上面显示的那样链接单元格?如果不能,我可以使用公式提取“ Sheet1!C12”的GID吗?

我已尽我所能搜索了Google论坛和堆栈溢出,并且我看到的唯一解决方案似乎是使用带有“ var sheet”的脚本,而我对0编码知识一无所知。

这应该是一件非常简单的事情,但是我找不到出路。任何对此问题的见解都将受到赞赏。非常感谢你。

Max*_*rov 5

范围

您可以创建这样的链接:

=hyperlink("#gid=1166414895range=A1", "link to A1")

每个标签都有一个唯一的键,称为gid,您可以在链接中找到它:

在此处输入图片说明

  • #gid永远不会改变。标签名称可能会更改,并且使用gid更安全,公式也会中断。
  • A1是您需要使用matchaddress函数获取动态链接的一部分。

我找不到有关此主题的文档,也找不到使用选项卡名称的方法。

命名范围

  1. 在文档中定义一个命名范围。
  2. 在单元格中,选择“插入链接”。
  3. 在链接对话框中,选择“此电子表格中的命名范围”。
  4. 选择在步骤1中创建的范围的名称。
  5. 点击“应用”按钮。
  6. 将鼠标指针移到新链接上。将会出现一个包含“#rangeid = nnnnnnnnnn”之类的链接的弹出窗口。
  7. 右键单击弹出窗口中的链接以打开浏览器的上下文菜单。
  8. 选择“复制链接地址”或仅选择“复制”功能。

现在,根据您的浏览器,您的剪贴板将包含完整的URL:

https://docs.google.com/spreadsheets/d/xxxxxxxxxx/edit#rangeid=nnnnnnnnnn

否则剪贴板将只有范围ID片段:

#rangeid=nnnnnnnnnn

如果只有片段,则需要将其附加到文档的URL上,以创建范围的完整URL。

可能还有其他一些更简单的方法来获取范围ID,但是我还没有注意到。看到相关问题回答类似问题

PS:复制命名范围的URL后,您可以按照上述步骤删除创建的链接。

自定义功能

在公式中使用。

简单范围:

=HYPERLINK(getLinkByRange("Sheet1","A1"), "Link to A1")

命名范围:

=HYPERLINK(getLinkByNamedRange("NamedRange"), "Link to named range")

将代码插入脚本编辑器(“工具”>“脚本编辑器”):

function getLinkByRange(sheetName, rangeA1, fileId)
{
  // file + sheet
  var file = getDafaultFile_(fileId);  
  var sheet = file.getSheetByName(sheetName);

  return getCombinedLink_(rangeA1, sheet.getSheetId(), fileId, file)    
}

function getLinkByNamedRange(name, fileId)
{
  // file + range + sheet
  var file = getDafaultFile_(fileId);    
  var range = file.getRangeByName(name);  
  var sheet = range.getSheet();

  return getCombinedLink_(range.getA1Notation(), sheet.getSheetId(), fileId, file)

}


function getDafaultFile_(fileId)
{
  // get file
  var file;
  if (fileId) { file = SpreadsheetApp.openById(fileId); }
  else file = SpreadsheetApp.getActive();      
  return file;      
}

function getCombinedLink_(rangeA1, sheetId, fileId, file)
{
  var externalPart = '';
  if (fileId) { externalPart = file.getUrl(); }    
  return externalPart + '#gid=' + sheetId + 'range=' + rangeA1;   
}
Run Code Online (Sandbox Code Playgroud)