Google表格-使用列标题的脚本吗?

时间:2018-12-07 18:14:53

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

在这里有两个问题,我有一个相当复杂的电子表格,需要在各列之间移动,由于这将是一项常规任务,因此将永远需要更新查询。我决定将查询更新为使用列标题,以期使其更加灵活。

我以为我在下面的脚本上是正确的选择,但是它在工作表中什么都没做

  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' ")

2 个答案:

答案 0 :(得分:0)

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

您将需要三列Side1,Side2和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);
}

答案 1 :(得分:0)

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

无论如何,自定义函数的“主要问题”是它没有返回值。请结帐documentation

上面链接中的示例

.addCallAdapterFactory(RxJava2CallAdapterFactory.create())