我试图以一种可以使用'= MATCH()“函数复制的方式向单元格插入超链接。但是我似乎无法找到一种方法来链接Google表格中的单元格而不使用GID。
当我右键单击并“获取此单元格的链接”时,我最终得到一个带有“#gid = 1933185132”的URL。然而,这没有结构,我不能使用它与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吗?
我已经搜索了谷歌论坛和堆栈溢出到我的最大范围,我看到的唯一的解决方案似乎使用脚本与“var sheet”的东西,我不能理解有0编码的知识。
这应该是一件非常简单的事情,但我无法找到出路。对此问题的任何见解表示赞赏。非常感谢你。
您可以创建如下链接:
=hyperlink("#gid=1166414895range=A1", "link to A1")
每个标签都有一个唯一的密钥,称为gid,您可以在链接中找到它:
#gid
永远不会改变。选项卡名称可能会更改,公式将中断,使用gid
更安全。A1
是您需要使用match
,address
函数来获取动态链接的一部分。我找不到关于此主题的文档,也找不到使用选项卡名称的方法。
根据您的浏览器,剪贴板现在将包含完整的URL:
https://docs.google.com/spreadsheets/d/xxxxxxxxxx/edit#rangeid=nnnnnnnnnn
或者剪贴板只有范围ID片段:
#rangeid=nnnnnnnnnn
如果您只有片段,则需要将其附加到文档的URL以创建范围的完整URL。
可能还有其他更简单的方法来获取范围ID,但我还没有注意到。见related question,answer to a similar question。
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;
}