Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google sheets 谷歌电子表格:动态超链接公式_Google Sheets - Fatal编程技术网

Google sheets 谷歌电子表格:动态超链接公式

Google sheets 谷歌电子表格:动态超链接公式,google-sheets,Google Sheets,我正在尝试创建一个动态超链接公式,该公式将根据a列中的工作表名称自动创建链接,但我不确定如何(或是否可能)根据名称获取工作表的URL 以下是设置: 一个谷歌电子表格和多个标签 选项卡名称:1500、1501、1502、合并 在“合并”选项卡上,我有两列:A列是工作表名称,B列是超链接公式,单击时应打开相应的工作表 是否有一种方法可以基于列a中的工作表名称以编程方式获取工作表的URL?也许我可以使用一个脚本用URL填充C列,然后使用以下公式:=HYPERLINK(C2,A2) 谢谢你的帮助 惊

我正在尝试创建一个动态超链接公式,该公式将根据a列中的工作表名称自动创建链接,但我不确定如何(或是否可能)根据名称获取工作表的URL

以下是设置:

  • 一个谷歌电子表格和多个标签
  • 选项卡名称:1500、1501、1502、合并
在“合并”选项卡上,我有两列:A列是工作表名称,B列是超链接公式,单击时应打开相应的工作表

是否有一种方法可以基于列a中的工作表名称以编程方式获取工作表的URL?也许我可以使用一个脚本用URL填充C列,然后使用以下公式:=HYPERLINK(C2,A2)


谢谢你的帮助

惊讶地发现这是谷歌的顶级搜索,但没有答案

无论如何,我发现了一种适合我的方法:使用
&
将超链接与不同列中的值结合起来,下面是一个基本示例:


如果您试图根据特定工作表的名称自动生成指向这些工作表的直接URL,并且不想使用脚本,那么您就倒霉了。目前,直接链接到特定工作表的唯一方法是将正确的gid编号附加到电子表格URL。gid必须从活动工作表的URL手动复制,或使用脚本创建的自定义函数自动提取

既然您对使用脚本持开放态度,那么我似乎找到了一个关于如何使用脚本的详细教程


超链接是动态生成的。你所建议的方式会起作用,或者你可以把整个URL放在超链接中formula@Calum:对混乱表示歉意;我知道链接是在成功输入超链接公式时生成的。我要寻找的是一种基于a列中的工作表名称动态生成URL字符串的方法。有什么想法吗?嗨,无论如何,设置/前缀值
https://example.com/
链接到特定列中的所有值?这在链接到其他工作表时特别有用:您可以在一行中填入“A1”、“A2”。。。然后使用
#gid=0&range=“&
链接。对于希望复制意大利面
=HYPERLINK(“https://example.com/“&A2,“链接”)
function onOpen() {

  var ui = SpreadsheetApp.getUi();

  ui.createMenu('Index Menu')
      .addItem('Create Index', 'createIndex')
      .addItem('Update Index', 'updateIndex')
      .addToUi();
}


// function to create the index
function createIndex() {

  // Get all the different sheet IDs
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets();

  var namesArray = sheetNamesIds(sheets);

  var indexSheetNames = namesArray[0];
  var indexSheetIds = namesArray[1];

  // check if sheet called sheet called already exists
  // if no index sheet exists, create one
  if (ss.getSheetByName('index') == null) {

    var indexSheet = ss.insertSheet('Index',0);

  }
  // if sheet called index does exist, prompt user for a different name or option to 
cancel
  else {

    var indexNewName = Browser.inputBox('The name Index is already being used, 
please choose a different name:', 'Please choose another name', 
Browser.Buttons.OK_CANCEL);

    if (indexNewName != 'cancel') {
      var indexSheet = ss.insertSheet(indexNewName,0);
    }
    else {
      Browser.msgBox('No index sheet created');
    }

  }

  // add sheet title, sheet names and hyperlink formulas
  if (indexSheet) {

    printIndex(indexSheet,indexSheetNames,indexSheetIds);

  }

}



// function to update the index, assumes index is the first sheet in the workbook
function updateIndex() {

  // Get all the different sheet IDs
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets();
  var indexSheet = sheets[0];

  var namesArray = sheetNamesIds(sheets);

  var indexSheetNames = namesArray[0];
  var indexSheetIds = namesArray[1];

  printIndex(indexSheet,indexSheetNames,indexSheetIds);
}


// function to print out the index
function printIndex(sheet,names,formulas) {

  sheet.clearContents();

  sheet.getRange(1,1).setValue('Workbook Index').setFontWeight('bold');
  sheet.getRange(3,1,names.length,1).setValues(names);
  sheet.getRange(3,2,formulas.length,1).setFormulas(formulas);

}


// function to create array of sheet names and sheet ids
function sheetNamesIds(sheets) {

  var indexSheetNames = [];
  var indexSheetIds = [];

  // create array of sheet names and sheet gids
  sheets.forEach(function(sheet){
    indexSheetNames.push([sheet.getSheetName()]);
    indexSheetIds.push(['=hyperlink("#gid=' 
                        + sheet.getSheetId() 
                        + '","' 
                        + sheet.getSheetName() 
                        + '")']);
  });

  return [indexSheetNames, indexSheetIds];

}