如何在Google表格应用脚本中创建范围超链接?

时间:2017-09-19 13:14:48

标签: google-apps-script hyperlink google-sheets

我正在尝试使用Google表格应用程序脚本中的范围的超链接填充单元格,并且我在GUI中完成相同的预期结果。我设法以“gid = ...”的形式创建表格的超链接,其中...是一个sheetID。但我很难获得在GUI中生成超链接时使用的rangeID,例如

HYPERLINK("#rangeid=1420762593";"'List 4'!F2:F15") 

是否可以在应用脚本中创建指向范围的超链接?

4 个答案:

答案 0 :(得分:5)

是的,您可以在App Script中执行此操作。这是一个非常简单的实现,其中构建了HYPERLINK函数并将其附加到单元格中:

function hyperlinkRange() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet1 = ss.getSheetByName("Sheet1");
  var sheet2 = ss.getSheetByName("Sheet2").getSheetId();

  sheet1.getRange("A1").setValue('=hyperlink("#gid='+sheet2+'&range='+sheet1.getRange('A1:A10').getA1Notation()+'", "Click to jump to Sheet 2")');
}

您可以将此功能与循环结合使用,以设置跨多个工作表的链接值。

答案 1 :(得分:0)

自定义功能

在公式中使用。

简单范围:

=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;   
}

答案 2 :(得分:0)

这是另一个例子。希望它是干净的,不言自明的

function hyperlinkRange(shDest,rgDest,shSrc,rgSrc,linkText) {
  
  // get the spreadsheet
  var ss = SpreadsheetApp.getActiveSpreadsheet()
  
  // get the destination sheet id
  var idDest = shDest.getSheetId()  
  
  // link the range
  var formula = '=hyperlink("#gid='+idDest+'&range='+rgDest+'","'+linkText+'")'
  shSrc.getRange(rgSrc).setValue(formula)
  
}

答案 3 :(得分:0)

如果您要创建指向另一个工作表的链接,该链接将在相同浏览器选项卡中打开工作表,这是您要执行的操作: 1.获取工作表的ID。检查浏览器中的链接,您将看到#gid=x,其中x是工作表ID 2.然后,您要在单元格中设置公式(超链接)并使其显示为超链接 SpreadsheetApp.getActiveSheet().getRange("A1").setFormula('=HYPERLINK("#gid=X","test")').setShowHyperlink(true); 如果您不使用setShowHyperlink(true),它将以常规文本显示。