选中切片机中的所有框

问题描述 投票:0回答:1

我正在尝试使用 Apps 脚本以编程方式选中 Google 表格工作表中的所有框。

我认为某个地方有代码,无论是来自源代码还是其他一些代码,可以编辑切片器以显示(例如)4 个复选框中的 1 个,但我无法找到它,或者它可能对我来说不可见。

具体来说,我试图获取切片器并选择所述切片器中的所有复选框,然后迭代到下一个切片器,直到没有更多切片器。

除了广泛查阅 Google 文档和论坛之外,我还没有找到解决方案。

这里只是我尝试过的一些 .gs 代码:

function selectAllSlicers() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

  var slicers = spreadsheet.getSlicers();

  slicers.forEach(function(slicer) {
    var items = slicer.getRange().getValues();
    slicer.setRangeValues(items);
  });
}

//This works in retrieving the names of the Slicers.

// -

function checkAllSlicers() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

  var slicers = spreadsheet.getSlicers();

  slicers.forEach(function(slicer) {
    var range = slicer.getRange();

    var checkboxes = range.getDataValidations();

    checkboxes.forEach(function(row, rowIndex) {
      row.forEach(function(cell, colIndex) {
        if (cell == SpreadsheetApp.DataValidationCriteria.CHECKBOX) {
          range.getCell(rowIndex + 1, colIndex + 1).setValue(true);
        }
      });
    });
  });
}

// No visible change on the sheet.

//--

function checkSlicersOnSheet1() {
  const ss = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/<SPREADSHEET_ID>/edit');

  const sheet = ss.getSheetByName('Sheet 1');
  const slicers = sheet.getSlicers();

  for (const slicer of slicers) {
    const slicerValues = slicer.getRange().getSlicerValues();
    if (slicerValues) {
      for (const value of slicerValues) {
        slicer.setIsItemChecked(value, true);
      }
    }
  }
}

//Changes all cells to "TRUE".
json google-sheets google-apps-script google-cloud-platform
1个回答
0
投票

选择复选框位于一个连续范围内的单元格范围,然后运行此函数。

function myfunk() {
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getActiveSheet();
  const rg = sh.getActiveRange();
  const row = rg.getRow();
  const col = rg.getColumn();
  rg.getValues().forEach((r, i) => {
    r.forEach((c, j) => {
      let r = sh.getRange(row + i, col + j).getDataValidation();
      if (r && r.getCriteriaType() == SpreadsheetApp.DataValidationCriteria.CHECKBOX) {
        Logger.log(sh.getRange(row + i, col + j).getA1Notation())
        sh.getRange(row + i, col + j).check();
      }
    })
  });
}
© www.soinside.com 2019 - 2024. All rights reserved.