Гугл листы - скрипт для использования заголовков столбцов? - PullRequest
0 голосов
/ 07 декабря 2018

У меня два вопроса, у меня довольно сложная таблица, в которой мне нужно перемещаться по столбцам, и обновление запросов будет длиться вечно, поскольку это будет обычная задача.Я решил обновить запрос, чтобы использовать заголовок столбца, который, надеюсь, сделает его более гибким.

Мне показалось, что я на правильном пути со сценарием ниже, но он ничего не делает на листе

  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 голосов
/ 08 декабря 2018

Ваше решение, основанное на встроенных функциях, будет иметь лучшую производительность, чем решение, использующее пользовательскую функцию.

В любом случае, "основная проблема" с вашей пользовательской функцией заключается в том, что она не возвращает значение,Пожалуйста, оформите заказ https://developers.google.com/apps-script/guides/sheets/functions.

Пример по вышеуказанной ссылке

function DOUBLE(input) {
  return input * 2;
}
0 голосов
/ 07 декабря 2018

Вот пример использования имен столбцов вместо их индексов напрямую.

Вам понадобятся три столбца 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);
}
...