Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.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 apps script 如何使用公式在Google工作表中插入指向单元格的超链接?_Google Apps Script_Google Sheets_Hyperlink_Google Sheets Formula_Array Formulas - Fatal编程技术网

Google apps script 如何使用公式在Google工作表中插入指向单元格的超链接?

Google apps script 如何使用公式在Google工作表中插入指向单元格的超链接?,google-apps-script,google-sheets,hyperlink,google-sheets-formula,array-formulas,Google Apps Script,Google Sheets,Hyperlink,Google Sheets Formula,Array Formulas,我正在尝试以一种可以使用“=MATCH()”函数复制的方式插入一个指向单元格的超链接。但是,如果不使用GID,我似乎无法找到在Google工作表中链接单元格的方法 当我右键单击并“获取指向此单元格的链接”时,我会得到一个最后带有“#gid=1933185132”的URL。但是,这没有结构,我无法将其与匹配公式一起使用,也无法像在Excel中通常做的那样自动填充 但是,如果这是一个单元格引用,那么 我可以很容易地为匹配函数重新创建它 问题:有没有其他方法可以像我上面所展示的那样链接单元格? 如

我正在尝试以一种可以使用“=MATCH()”函数复制的方式插入一个指向单元格的超链接。但是,如果不使用GID,我似乎无法找到在Google工作表中链接单元格的方法

当我右键单击并“获取指向此单元格的链接”时,我会得到一个最后带有“#gid=1933185132”的URL。但是,这没有结构,我无法将其与匹配公式一起使用,也无法像在Excel中通常做的那样自动填充

但是,如果这是一个单元格引用,那么

我可以很容易地为匹配函数重新创建它

问题:有没有其他方法可以像我上面所展示的那样链接单元格? 如果不是 我可以使用公式提取“Sheet1!C12“

我已经尽我最大的努力搜索了google论坛和stack overflow,我看到的唯一解决方案似乎是使用带有“var sheet”的脚本,这是我无法理解的编码知识

这应该是一件非常直截了当的事情,但我找不到出路。我们非常感谢您对这个问题的任何见解。非常感谢。

Range 您可以创建如下链接:

function SHEETLIST() {
try {
  var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets()
  var out = new Array( sheets.length+1 ) ;
  out[0] = [ "NAME" , "#GID" ];
  for (var i = 1 ; i < sheets.length+1 ; i++ ) out[i] = 
  [sheets[i-1].getName() , sheets[i-1].getSheetId() ];
  return out
}
catch( err ) {
  return "#ERROR!" 
}
}
=hyperlink(#gid=1166414895range=A1,“链接到A1”)

每个选项卡都有一个唯一的键,称为gid,您可以在以下链接中找到它:

  • #gid
    将永远不会更改。选项卡名称可能会更改,公式将中断,使用
    gid
    更安全
  • A1
    是您需要使用
    match
    address
    函数来获取动态链接的一部分
我找不到有关此主题的文档,也找不到使用选项卡名称的方法

命名范围
  • 在文档中定义命名范围
  • 在单元格中选择“插入链接”
  • 在“链接”对话框中,选择“此电子表格中的命名范围”
  • 选择在步骤1中创建的范围的名称
  • 单击“应用”按钮
  • 将鼠标指针移到新链接上。将出现一个弹出窗口,其中包含类似“#rangeid=nnnnnn”的链接
  • 右键单击弹出窗口中的链接以打开浏览器的上下文菜单
  • 选择“复制链接地址”或仅选择“复制”功能
  • 根据浏览器的不同,剪贴板现在将包含完整URL:

    https://docs.google.com/spreadsheets/d/xxxxxxxxxx/edit#rangeid=nnnnnnnnnn

    或者剪贴板将只包含范围ID片段:

    #rangeid=nnnnnnnnnn

    如果只有片段,则需要将其附加到文档的URL,以创建该范围的完整URL

    可能还有其他更简单的方法来获取范围ID,但我还没有注意到。请参阅

    PS:复制指定区域的URL后,您可以删除按照上述步骤创建的链接

    自定义函数 在公式中使用

    简单范围:

    =超链接(getLinkByRange(“Sheet1”、“A1”),“链接到A1”)

    命名范围:

    =超链接(getLinkByNamedRange(“NamedRange”),“链接到命名范围”)

    将代码插入脚本编辑器(工具>脚本编辑器):


    由于到下面部分的URL将是一个常量,因此可以首先在单元格中定义它

    https://docs.google.com/spreadsheets/d/sheetkey/edit#
    
    我相信你已经在一列(比如a列)中定义了
    gid=1933185132
    部分。因此,要获得工作表的实际URL,你只需将这两个链接起来。因此,在B列中,你必须编写以下公式

    =HYPERLINK(CONCAT(A1,A2),A2)
    

    GID不要求是以https开头的有效URL

    您所需要的只是像这样的超链接:

    =HYPERLINK("#gid=1933185132&range=C12", "sheet name")
    

    如果您想超链接所有工作表,可以这样做:

    function SHEETLIST() {
    try {
      var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets()
      var out = new Array( sheets.length+1 ) ;
      out[0] = [ "NAME" , "#GID" ];
      for (var i = 1 ; i < sheets.length+1 ; i++ ) out[i] = 
      [sheets[i-1].getName() , sheets[i-1].getSheetId() ];
      return out
    }
    catch( err ) {
      return "#ERROR!" 
    }
    }
    

    我在“帮助”中找到的最接近的主题:
    =ARRAYFORMULA(HYPERLINK("#gid="&
     QUERY(INDEX(SHEETLIST();;2); "offset 1"); 
     QUERY(INDEX(SHEETLIST();;1); "offset 1")))