【问题标题】:Google sheets - Script to use columns headings?谷歌表格 - 使用列标题的脚本?
【发布时间】:2018-12-07 18:14:52
【问题描述】:

这里有两个问题,我有一个相当复杂的电子表格,我需要在其中移动列,并且更新查询需要很长时间,因为这将是一项常规任务。我决定更新查询以使用列标题,这有望使其更加灵活。

我认为我在下面的脚本中走在了正确的轨道上,但它在工作表中没有做任何事情

  function getHeader(sheet, headings) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();

var headings = sheet.getDataRange().offset(0, 0, 1).getValues()[0];


}

这就是我在工作表中调用脚本的方式

=query(A:F,"select "&getHeader("Name")&" where "&getHeader("Role")&" contains 'Cook' ",0)

我已经使用下面的查询使其工作正常,我很想知道什么是更好的脚本或查询?

=query(A:E,"select "&char(64+match("Name",1:1,0))&" where "&char(64+match("Role",1:1,0))&" = 'Cook' ")

【问题讨论】:

    标签: google-apps-script google-sheets google-sheets-query custom-function google-sheets-formula


    【解决方案1】:

    这是一个直接使用列名而不是其索引的示例。

    您需要三列 Side1、Side2 和 Hypotenuse。我将工作表命名为“hypotenuse”。

    您选择边的长度,它会计算该直角三角形的斜边。

    function hypotenuse() {
      var ss=SpreadsheetApp.getActive();
      var sh=ss.getSheetByName('hypotenuse');
      var rg=sh.getDataRange();
      var vA=rg.getValues();
      for(var i=1;i<vA.length;i++) {
        var vObj={};
        for(var n=0;n<vA[i].length;n++){
          vObj[vA[0][n]]=vA[i][n];
          vObj[vA[0][n]+'idx']=vA[0].indexOf(vA[0][n])
        }
        vObj.Hypotenuse=Math.sqrt((vObj.Side1 * vObj.Side1) + (vObj.Side2 * vObj.Side2));
        vA[i][vObj.Hypotenuseidx]=vObj.Hypotenuse.toFixed(2);
      }
      rg.setValues(vA);
    }
    

    【讨论】:

    • 谢谢,@cooper - 我必须知道这个脚本的列名,我不能以某种方式从标题行自动获取它们吗?
    【解决方案2】:

    您的基于内置函数的解决方案将比使用自定义函数的解决方案具有更好的性能。

    无论如何,自定义函数的“主要问题”是它不返回值。请结帐https://developers.google.com/apps-script/guides/sheets/functions

    来自上述链接的示例

    function DOUBLE(input) {
      return input * 2;
    }
    

    【讨论】:

      猜你喜欢
      • 2021-07-07
      • 2021-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多