以编程方式构建指向表格中命名范围的超链接

问题描述 投票:0回答:3

我有一个包含许多命名范围的电子表格,我想要一种目录,它提供了跳转到它们的超链接。

在 UI 中,我可以创建指向命名范围的超链接,其最终格式为:

https://docs.google.com/spreadsheets/d/xxxxx/edit#rangeid=yyyyy

其中 xxxx 是一个长电子表格 ID,yyyy 是一系列数字。

由于我有很多这些链接,我想使用 Google Apps 脚本以编程方式生成所有这些链接。我可以使用 Spreadsheet.getRangeByName 找到命名范围对象,但我找不到从中获取 rangeid 的方法。

google-sheets google-apps-script named-ranges
3个回答
2
投票

这似乎是不可能的,但作为一种解决方法,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); 
}

2
投票

您可以使用高级 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 中看到的不同:


-3
投票
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\")");
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.