Чтение ячейки в функции сценария Google и использование ее в функции #inception - PullRequest
0 голосов
/ 04 мая 2018

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

Детали сообщения:

Невозможно преобразовать function getData() { Sheet = SS.getSheetByName("Technic"); Range = Sheet.getRange(4, 2); Data = Range.getValue(); } в (class).

Что не так?

function hideMyColumns()
{
  var ss = SpreadsheetApp.getActive();
  var sh = ss.getActiveSheet();
  var vl = sh.getRange('A30').getValue();
  var cols1 = [ function getData() {
          Sheet = SS.getSheetByName('Technic');
          Range = Sheet.getRange(4, 2); 
          Data = Range.getValue() }];
  var cols2 = [4, 5, 7, 8, 10, 11,]
  switch (vl)
  {
    case 1:
      for (var i = 0; i < cols1.length; i++)
      {
        sh.hideColumns(cols1[i]);
      }
      break;
    case 2:
      for (var i = 0; i < cols2.length; i++)
      {
        sh.hideColumns(cols2[i]);
      }
  }
}

эволюция ситуации:

Хорошо, теперь функция выглядит следующим образом:

function hideMyColumns()
{
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet();
var vl=sh.getRange('A30').getValue();
var cols1=[ function() { 
Sheet = ss.getSheetByName('Technic');
Range = Sheet.getRange(2,4);
Data = Range.getValue();
return Data;
}()]; 
var cols2=[4,5,7,8,10,11,12,]
switch(vl)
{
case 1:
  for(var i=0;i<cols1.length;i++)
  {
    sh.hideColumns(cols1[i]);
  }
  break;
  case 2:
  for(var i=0;i<cols2.length;i++)
  {
    sh.hideColumns(cols2[i]);
  }
}

}

контекст:

В таблице есть 2 листа: «Основной» и «Техника»

"Main" может скрывать некоторые столбцы с помощью этой функции. На листе «Техника» вы найдете ячейку, которая содержит формулу, которая возвращает: «2,3,4 ...» я пытаюсь использовать эту формулу как переменную в функции "hideMyColumns".

Под этим у меня есть еще одна более простая функция: конечно, unhideCols (). (хорошо работает!)

1 Ответ

0 голосов
/ 05 мая 2018

Вы хотите присвоить значение cols1, используя выражения функций. Если мое понимание верно, как насчет этой модификации?

Очки модификации:

  • В вашей ситуации, когда в качестве функциональных выражений используется var cols1 = [function getData(){...}], измените его на var cols1 = [function getData(){...}()] или var cols1 = [function(){...}()].
  • SS из SS.getSheetByName('Technic') не объявлено.
    • При запуске getData() здесь возникает ошибка.
    • В измененном сценарии SS был изменен на ss.
  • В getData() нет возвращаемых значений.
    • При этом cols1 всегда становится [].

Модифицированный скрипт:

var cols1 = [ function() { // Modified
  Sheet = ss.getSheetByName('Technic'); // Modified
  Range = Sheet.getRange(4, 2);
  Data = Range.getValue();
  return Data; // Added
}()]; // Modified

Примечание:

  • В этом измененном сценарии был изменен только var cols1.
  • Если вы хотите использовать SS, укажите это.
  • Если вы хотите вернуть другие значения, измените их.
  • Из вашего скрипта кажется, что cols1 имеет только один элемент. Таким образом, вы можете изменить значение от sh.hideColumns(cols1[i]); до sh.hideColumns(cols1[0]); без цикла for. Или, когда он объявлен как var cols1 = function(){...}(), вы можете изменить его на sh.hideColumns(cols1); без цикла for.

Ссылки:

Если я неправильно понимаю ваш вопрос, извините.

Редактировать:

Если вы хотите использовать значения столбца D в качестве диапазонов, попробуйте этот модифицированный скрипт.

function hideMyColumns()
{
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet();
var vl=sh.getRange('A30').getValue();
var cols1=function() { // Modified
Sheet = ss.getSheetByName('Technic');
Range = Sheet.getRange(3,4); // getRange(3,4) is D3, Modified
Data = Range.getValue();
return Data.split(","); // Modified
}();
var cols2=[4,5,7,8,10,11,12,]
switch(vl)
{
case 1:
  for(var i=0;i<cols1.length;i++)
  {
    sh.hideColumns(cols1[i]);
  }
  break;
  case 2:
  for(var i=0;i<cols2.length;i++)
  {
    sh.hideColumns(cols2[i]);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...