Получение групп неизвестных глубин - group.getDepth, group.getRowGroup - PullRequest
0 голосов
/ 28 декабря 2018

Я бы хотел, чтобы код GAS получал глубину группы, которая начинается с заданного номера строки.

Грязный способ сделать это - записать глубину группы в скрытый столбец, когдаЯ создаю группу, но есть ли способ программно определить глубину группы в данном ряду?Демонстрационный код для глубины получения группы в документации таков:

var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
var range = sheet.getRange(2:3);
range.shiftRowGroupDepth(1);
var group = sheet.getRowGroupAt(2, 1);

// Returns 1 if the group is at depth 1.
var depth = group.getDepth();

Но этот код требует глубину в строке 4, чтобы получить группу, для которой запрашивается глубина.Который, кажется, сводит на нет любую полезность функции getDepth.

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

Ответы [ 2 ]

0 голосов
/ 30 июня 2019

Другой способ удаления групп без необходимости включать расширенные листы API:

// row is known, depth is not
function deleteAll(sheet, row) {

  // starting at greatest number of depth levels
  var depth = 8; 

  // loop through all levels until depth is zero
  while ( depth >= 1 ) {

    // handle execption errors thrown when a group doesn't exist
    try {

      var group = sheet.getRowGroup(row, depth);  
      group.remove();

    } catch(error) {}

    // count down to remove groups from right to left
    depth--;
  }

}
0 голосов
/ 29 декабря 2018

Как насчет использования Sheets API в вашей ситуации?Я думаю, что есть несколько решений для вашей ситуации.Поэтому, пожалуйста, подумайте об этом как об одном из них.

Когда вы используете этот скрипт, пожалуйста, включите Sheets API в Advanced Google Services и консоли API.О том, как включить Sheets API, вы можете узнать по здесь .

1.Извлечение информации о глубине групп

Когда извлекается информация о глубине имени листа "Sheet1", скрипт выглядит следующим образом.

var spreadsheetId = "### spreadsheetId ###";
var ranges = ["Sheet1"]; // Put sheet names.
var res = Sheets.Spreadsheets.get(spreadsheetId, {ranges: ranges, fields: "sheets/rowGroups"});
Logger.log(res)
  • Если вы хотите получить значенияиз листов "Лист1" и "Лист2", пожалуйста, укажите var ranges = ["Sheet1", "Sheet2"].
  • Если вы также хотите получить информацию columnGroups, измените fields на sheets(columnGroups,rowGroups).

2.Удаление всех групп

Для одной из ваших целей, когда вы хотите удалить все группы (rowGroups и columnGroups), сценарий выглядит следующим образом.В этом сценарии используются значения, полученные выше сценария.

var spreadsheetId = "### spreadsheetId ###";
var ranges = ["Sheet1"];
var res = Sheets.Spreadsheets.get(spreadsheetId, {ranges: ranges, fields: "sheets(columnGroups,properties/sheetId,rowGroups)"});
var reqs = res.sheets.map(function(e) {
  var rows = e.rowGroups.map(function(f) {
    var obj = {deleteDimensionGroup: {range: f.range}};
    obj.deleteDimensionGroup.range.sheetId = e.properties.sheetId;
    return obj;
  });
  var columns = e.columnGroups.map(function(f) {
    var obj = {deleteDimensionGroup: {range: f.range}};
    obj.deleteDimensionGroup.range.sheetId = e.properties.sheetId;
    return obj;
  });
  return rows.concat(columns);
});
Sheets.Spreadsheets.batchUpdate({requests: reqs}, spreadsheetId);

3.Свертывание всех групп

Для достижения еще одной цели, когда вы хотите свернуть все группы, сценарий выглядит следующим образом.В этом примере сценария сворачиваются все группы строк в «Sheet1».

var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
sheet.collapseAllRowGroups();
// sheet.collapseAllColumnGroups(); // If you want to collapse all column groups, please use this.

Ссылки:

Если это не то, что вы хотите, яизвините.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...