如何使用脚本在Google表格中生成范围ID超链接#rangeID = XXXXXXXXXX?

时间:2018-04-12 20:29:34

标签: google-apps-script google-sheets

最近,Google添加了一个功能,您可以在其中超链接到特定的单元格,这很棒。为此,您可以使用特定单元格上的“插入链接”功能,然后从下拉菜单中单击“选择要链接的单元格范围”,然后选择您要添加的单元格或范围要链接到。通过这样做,Google生成了一个非常方便(和动态)的十位“范围ID”。

它看起来像这样:= HYPERLINK(“#rangeid = 1234567890”,“link”)

但我无法弄清楚的是如何使用脚本创建它。

我觉得这个功能不存在似乎很奇怪,因为它可以手动完成。

我可以使用以下代码生成工作表ID,在创建在页面之间跳转的超链接时非常方便:

var ss = SpreadsheetApp.getActive(); 
var sheet1 = ss.getSheetByName(name); 
var gid = sheet.getSheetId();
sheet2.getRange("A1").setFormula('=hyperlink("#gid='+gid+'","'name'")');

我可以使用以下代码创建指向特定单元格的链接,但它不是动态的,并且一旦将行/列插入到工作表中就会中断:

var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var range = ss.getRangeByName("A10");
var sheetID = range.getSheet().getSheetId();
var rangeCode = range.getA1Notation();
sheet2.getRange("J10").setFormula('=hyperlink("https://docs.google.com/spreadsheets/d/'+ss.getId()+'/edit#gid='+sheetID+'&range='+rangeCode+'","link")');

必须有一种方法可以在下面的代码中执行此类操作,但目前我无法找到方法:

var ss = SpreadsheetApp.getActiveSpreadsheet();
var range = ss.getRangeByName("A10");
var rangeID = range.**getRangeID()**;
sheet2.getRange("J10").setFormula('=hyperlink("#rangeID='+rangeID+'","link")');

我知道Google Scripts的可用选项中当前不存在“getRangeID()”;但是,有什么功能可以实现吗?如果存在这个命令,这将是非常有用的。

那里有任何帮助吗?是否还有另一种方法可以实现这一目标,我不知道?

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

这是named ranges的完美用例,并且它不需要对您的脚本逻辑进行任何更改。

var range = ss.getRangeByName("NamedRange1");

答案 1 :(得分:0)

您可以使用相对网址。链接文档中的答案可以在https://webapps.stackexchange.com/questions/44473/link-to-a-cell-in-a-google-sheets-via-url处找到。

示例:

=hyperlink("#gid=0&range=A2",Bookmarks!A2)

我认为#gid = 0代表第一张纸。然后,我可以在工作表中指定范围。我无法使命名工作表正常工作。除了第一个工作表/标签外,其他所有标签都有一个#gid,您可以在该工作表的网址中找到它。

例如:

=hyperlink("#gid=1756281106&range=A2",Bookmarks!A2)