我正在尝试使用 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".
选择复选框位于一个连续范围内的单元格范围,然后运行此函数。
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();
}
})
});
}