首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用公式在Google工作表中插入到单元格的超链接?

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

Stack Overflow用户
提问于 2018-01-06 10:51:40
回答 3查看 22.5K关注 0票数 16

我试图以一种可以使用'=MATCH()“函数复制的方式插入到单元格的超链接,但是,我似乎无法找到一种不使用GID就可以链接Google中的单元格的方法。

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

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

但是,如果这是一个单元格引用,则如下所示

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

我可以很容易地为匹配函数重新创建它。

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

我已经搜索了google论坛和堆栈溢出,尽了最大的努力,我看到的唯一解决方案似乎使用了带有"var sheet“的脚本--这是我无法理解的--拥有0的编码知识。

这应该是一件非常简单的事情,但我无法找到出路。对这一问题的任何见解都是值得赞赏的。非常感谢。

EN

回答 3

Stack Overflow用户

发布于 2018-08-15 09:08:13

范围

您可以创建如下链接:

=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,但我还没有注意到其中一个。见related questionanswer to a similar question

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

自定义函数

在配方中使用。

简单范围:

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

命名范围:

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

将代码插入脚本编辑器(Tools > script Editor):

代码语言:javascript
运行
复制
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;   
}
票数 22
EN

Stack Overflow用户

发布于 2019-10-29 00:03:02

GID不要求是以https开头的有效URL .

你所需要的就是超链接,就像:

代码语言:javascript
运行
复制
=HYPERLINK("#gid=1933185132&range=C12", "sheet name")

如果你想超链接所有的床单,你可以这样做:

代码语言:javascript
运行
复制
function SHEETLIST() {
try {
  var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets()
  var out = new Array( sheets.length+1 ) ;
  out[0] = [ "NAME" , "#GID" ];
  for (var i = 1 ; i < sheets.length+1 ; i++ ) out[i] = 
  [sheets[i-1].getName() , sheets[i-1].getSheetId() ];
  return out
}
catch( err ) {
  return "#ERROR!" 
}
}
代码语言:javascript
运行
复制
=ARRAYFORMULA(HYPERLINK("#gid="&
 QUERY(INDEX(SHEETLIST();;2); "offset 1"); 
 QUERY(INDEX(SHEETLIST();;1); "offset 1")))
票数 7
EN

Stack Overflow用户

发布于 2019-03-18 07:04:28

由于以下部分的URL将是一个常量,所以可以首先在单元格中定义它。

代码语言:javascript
运行
复制
https://docs.google.com/spreadsheets/d/sheetkey/edit#

我相信您已经在一列中定义了gid=1933185132部分(假设它的列A)。因此,要获得工作表的实际URL,您只需将这两个链接连接起来。因此,在B列中,您必须编写以下公式。

代码语言:javascript
运行
复制
=HYPERLINK(CONCAT(A1,A2),A2)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48126574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档