如何在getRowGroup

时间:2018-12-06 17:40:46

标签: google-apps-script google-sheets

我正在处理工作表中的分组行。我有几个小组,我想使用Google Apps脚本获取每个小组的主题。

我研究了Class Sheet doc,发现了方法

  

getRowGroup(rowIndex,groupDepth)

但是我仍然不知道如何从工作表接收rowIndex。另外,组的数量可以更改,我不知道如何获得每个组的主题,无论是扩展的还是折叠的。

谢谢。

1 个答案:

答案 0 :(得分:1)

如果我理解您的问题,则希望确定行组中任何给定行的“主题”。我设置了一个这样的示例工作表:

enter image description here

因此,如果您想知道单元格(3,1)“黑皮诺”中某个值的“主题”,则要从第1行返回值“ Reds”。

基本上,rowIndex是工作表中的任何行。但我相信您正在寻找控件所在的行。为了找到该行,我创建了一个函数:

function findGroupRowIndex(sheet, thisRow) {
  //--- if the given row is a part of a Group, then it will return the
  //    rowIndex (the row with the control) of the group, otherwise it
  //    returns 0
  try {
    var rowGroup = sheet.getRowGroup(thisRow, 1);
    var groupDepth = sheet.getRowGroupDepth(thisRow);
    var index = rowGroup.getControlIndex();
    return index;
  } catch (e) {
    //--- this row is not part of a group
    return 0;
  }
}

该函数的重要部分是确保如果给定行不属于rowGroup的一部分,则捕获所有引发的异常。

我带有调用功能的整个代码模块是:

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
  Logger.log(sheet.getName());

  var lookAtRow = 3;
  var topicRow = findGroupRowIndex(sheet,lookAtRow);
  if (topicRow != 0) {
    Logger.log('topic for group on row ' + lookAtRow + ' is ' + 
                sheet.getRange(topicRow,1).getValue());
  } else {
    Logger.log('no topic exists for row ' + lookAtRow);
  }
}

function findGroupRowIndex(sheet, thisRow) {
  //--- if the given row is a part of a Group, then it will return the
  //    rowIndex (the row with the control) of the group, otherwise it
  //    returns 0
  try {
    var rowGroup = sheet.getRowGroup(thisRow, 1);
    var groupDepth = sheet.getRowGroupDepth(thisRow);
    var index = rowGroup.getControlIndex();
    return index;
  } catch (e) {
    //--- this row is not part of a group
    return 0;
  }
}