Google apps script 如何使用公式在Google工作表中插入指向单元格的超链接?
我正在尝试以一种可以使用“=MATCH()”函数复制的方式插入一个指向单元格的超链接。但是,如果不使用GID,我似乎无法找到在Google工作表中链接单元格的方法 当我右键单击并“获取指向此单元格的链接”时,我会得到一个最后带有“#gid=1933185132”的URL。但是,这没有结构,我无法将其与匹配公式一起使用,也无法像在Excel中通常做的那样自动填充 但是,如果这是一个单元格引用,那么 我可以很容易地为匹配函数重新创建它 问题:有没有其他方法可以像我上面所展示的那样链接单元格? 如果不是 我可以使用公式提取“Sheet1!C12“ 我已经尽我最大的努力搜索了google论坛和stack overflow,我看到的唯一解决方案似乎是使用带有“var sheet”的脚本,这是我无法理解的编码知识 这应该是一件非常直截了当的事情,但我找不到出路。我们非常感谢您对这个问题的任何见解。非常感谢。Range 您可以创建如下链接:Google apps script 如何使用公式在Google工作表中插入指向单元格的超链接?,google-apps-script,google-sheets,hyperlink,google-sheets-formula,array-formulas,Google Apps Script,Google Sheets,Hyperlink,Google Sheets Formula,Array Formulas,我正在尝试以一种可以使用“=MATCH()”函数复制的方式插入一个指向单元格的超链接。但是,如果不使用GID,我似乎无法找到在Google工作表中链接单元格的方法 当我右键单击并“获取指向此单元格的链接”时,我会得到一个最后带有“#gid=1933185132”的URL。但是,这没有结构,我无法将其与匹配公式一起使用,也无法像在Excel中通常做的那样自动填充 但是,如果这是一个单元格引用,那么 我可以很容易地为匹配函数重新创建它 问题:有没有其他方法可以像我上面所展示的那样链接单元格? 如
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!"
}
}
=hyperlink(#gid=1166414895range=A1,“链接到A1”)
每个选项卡都有一个唯一的键,称为gid,您可以在以下链接中找到它:
将永远不会更改。选项卡名称可能会更改,公式将中断,使用#gid
更安全gid
是您需要使用A1
,match
函数来获取动态链接的一部分address
https://docs.google.com/spreadsheets/d/xxxxxxxxxx/edit#rangeid=nnnnnnnnnn
或者剪贴板将只包含范围ID片段:
#rangeid=nnnnnnnnnn
如果只有片段,则需要将其附加到文档的URL,以创建该范围的完整URL
可能还有其他更简单的方法来获取范围ID,但我还没有注意到。请参阅
PS:复制指定区域的URL后,您可以删除按照上述步骤创建的链接
自定义函数
在公式中使用
简单范围:
=超链接(getLinkByRange(“Sheet1”、“A1”),“链接到A1”)
命名范围:
=超链接(getLinkByNamedRange(“NamedRange”),“链接到命名范围”)
将代码插入脚本编辑器(工具>脚本编辑器):
由于到下面部分的URL将是一个常量,因此可以首先在单元格中定义它
https://docs.google.com/spreadsheets/d/sheetkey/edit#
我相信你已经在一列(比如a列)中定义了gid=1933185132
部分。因此,要获得工作表的实际URL,你只需将这两个链接起来。因此,在B列中,你必须编写以下公式
=HYPERLINK(CONCAT(A1,A2),A2)
GID不要求是以https开头的有效URL 您所需要的只是像这样的超链接:
=HYPERLINK("#gid=1933185132&range=C12", "sheet name")
如果您想超链接所有工作表,可以这样做:
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!"
}
}
我在“帮助”中找到的最接近的主题:
=ARRAYFORMULA(HYPERLINK("#gid="&
QUERY(INDEX(SHEETLIST();;2); "offset 1");
QUERY(INDEX(SHEETLIST();;1); "offset 1")))