我有一个包含许多命名范围的电子表格,我想要一种目录,它提供了跳转到它们的超链接。
在 UI 中,我可以创建指向命名范围的超链接,其最终格式为:
https://docs.google.com/spreadsheets/d/xxxxx/edit#rangeid=yyyyy
其中 xxxx 是一个长电子表格 ID,yyyy 是一系列数字。
由于我有很多这些链接,我想使用 Google Apps 脚本以编程方式生成所有这些链接。我可以使用 Spreadsheet.getRangeByName 找到命名范围对象,但我找不到从中获取 rangeid 的方法。
这似乎是不可能的,但作为一种解决方法,Karl_S建议使用确实有效的范围链接:
function createNamedRangeUrl(name) {
var root = SpreadsheetApp.getActiveSpreadsheet();
var range = root.getRangeByName(name);
var sheetId = range.getSheet().getSheetId();
var rangeCode = range.getA1Notation();
return ("https://docs.google.com/spreadsheets/d/" +
root.getId() + "/edit#gid=" + sheetId + "&range=" + rangeCode);
}
您可以使用高级 Google 服务获取命名范围的 ID:Google Sheets API。在资源 - 高级 Google 服务...
打开它spreadsheets.get
获取您的 Google 表格数据,包括命名范围信息:
var spreadsheetId = '...';
var ssData = Sheets.Spreadsheets.get(spreadsheetId);
var namedRanges = ssData.namedRanges;
Logger.log(namedRanges);
结果:
注意:API 返回的
namedRangeId
已被混淆(?),您不能直接使用它以编程方式创建链接。由于某种原因,它与 UI 中看到的不同:
var fullSpreadsheetLink = "full spreadsheet link goes here"
var spreadsheetTabName = "tab name goes here"
var spreadsheet = SpreadsheetApp.openByUrl(fullSpreadsheetLink);
var sheet = spreadsheet.getSheetByName(spreadsheetTabName);
var myCell = sheet.getRange("A1");
var linkCell = sheet.getRange("A2")
var dataSourceUrl = myCell.getDataSourceUrl();
var urlArray = dataSourceUrl.split("&");
linkCell.setValue("=HYPERLINK(\"#"+urlArray[3]+"&"+urlArray[4]+"\",\"link to A1\")");