在Google脚本函数中读取单元格并在函数#inception中使用它

时间:2018-05-04 20:08:25

标签: google-apps-script google-sheets

需要帮助,我尝试在这个功能中读取一个单元格。我尝试了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”可以通过此功能隐藏一些列。 在工作表“Technic”中,您会找到一个包含返回公式的单元格:“2,3,4 ......” 我尝试使用这个formule像一个变量“hideMyColumns”。

在此我还有另一个更简单的功能:unhideCols()当然。 (运作良好!)

1 个答案:

答案 0 :(得分:0)

您想使用函数表达式为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似乎只有一个元素。因此,您可以在不使用for循环的情况下从sh.hideColumns(cols1[i]);修改为sh.hideColumns(cols1[0]);。或者当它被声明为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]);
  }
}