【问题标题】:Google Spreadsheet: Dynamic Hyperlink FormulaGoogle 电子表格:动态超链接公式
【发布时间】:2015-03-06 02:11:33
【问题描述】:

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

设置如下:

  • 具有多个标签的单个 Google 电子表格
  • 选项卡名称:1500、1501、1502、合并

在“合并”选项卡上,我有两列:A 列是工作表名称,B 列是一个 HYPERLINK 公式,点击后应该会打开相应的工作表。

有没有办法根据 A 列中的工作表名称以编程方式获取工作表的 URL?也许我可以使用脚本用 URL 填充 C 列,然后使用以下公式:=HYPERLINK(C2,A2)?

感谢您的帮助!

【问题讨论】:

  • 超链接是动态生成的。您建议的方式可行,或者您可以将整个 URL 放入 HYPERLINK 公式中
  • @Calum:为混乱道歉;我了解链接是在成功输入 HYPERLINK 公式时生成的。我正在寻找的是一种基于 A 列中的工作表名称动态生成 URL 字符串的方法。有什么想法吗?

标签: google-sheets


【解决方案1】:

惊讶地发现这是 Google 上的热门搜索,但没有任何答案。

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

【讨论】:

  • 嗨,无论如何要将值 https://example.com/ 设置/前缀为特定列中的所有值?
  • 这在链接到其他工作表时特别有用:您可以用“A1”、“A2”...填充一行,然后使用#gid=0&range="& 链接。
  • 对于任何想要复制意大利面的人=HYPERLINK("https://example.com/"&A2, "Link")
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    由于您对使用脚本持开放态度,看来我找到了有关如何执行此操作的详细教程。 https://www.benlcollins.com/spreadsheets/index-sheet/

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-26
      • 2013-04-16
      相关资源
      最近更新 更多