[英]Google Sheets Apps Script get range of entire sheet even if it has no data
假设我定义了一个工作表thissheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(name)
其中name
是一个字符串,其中包含我的一张工作表的名称。
我知道如果工作表中有数据,我可以使用thissheet.getDataRange()
到 select 全部。 或者,交替thissheet.getRange(1,1,thissheet.getLastRow(),thissheet.getLastCol())
但是,如果我希望将整个工作表都选为一个范围,而不管它是否有数据怎么办?
或者,在我的特定实例中,我运行了thissheet.clear()
并清除了工作表中的所有数据,但我需要使用thissheet.somerange.removeCheckboxes()
,其中somerange
基本上将整个工作表表示为Range
object 以清除所有留下空复选框,因为clear()
不清除复选框。
好的,首先我需要确保在我的脚本序列中在thissheet.clear()
之前运行thissheet.dataRange().removeCheckboxes()
) 。 只要我控制一切并遵守某些规则,这就有效。 这仍然存在两个问题:
一旦我部署了我的脚本并且其他用户开始使用它,有人很容易清除工作表并留下复选框,这将导致我的脚本稍后崩溃,因为.dataRange()
实际上是没有范围的。
如果我在最后一行或最后一列中有没有其他数据的复选框,它们仍然不会被清除,因为它们不会成为.dataRange()
的一部分
那么我怎样才能确保我的工作表中的所有复选框都被删除了呢?
在您的情况下,为了检索工作表中的所有单元格,使用getMaxRows
和getMaxColumns
怎么样? 当这反映在脚本中时,它变成如下。
const sheetName = "Sheet1"; // Please set the sheet name.
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
const range = sheet.getRange(1, 1, sheet.getMaxRows(), sheet.getMaxColumns());
range.removeCheckboxes().clear(); // Here, the checkboxes and cells are cleared.
range.removeCheckboxes().clear()
修改为range.removeCheckboxes()
。为了确认是否删除了工作表中的所有复选框,以下示例脚本如何?
const sheetName = "Sheet1"; // Please set the sheet name.
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
const range = sheet.getRange(1, 1, sheet.getMaxRows(), sheet.getMaxColumns());
const checkCheckboxes = range.getDataValidations().flatMap((r, i) => r.flatMap((c, j) => c && c.getCriteriaType() == SpreadsheetApp.DataValidationCriteria.CHECKBOX ? {row: i + 1, col: j + 1} : []));
if (checkCheckboxes.length == 0) {
console.log("No checkboxes in this sheet.");
} else {
console.log("Checkboxes are existing in the cells.");
console.log(checkCheckboxes); // Here, you can see the cell coordinates of the checkboxes.
}
出于所有意图和目的,复选框包含数据,无论是否选中。 @Cooper也提到了这一点
一旦我部署了我的脚本并且其他用户开始使用它,有人很容易清除工作表并留下复选框,这将导致我的脚本稍后崩溃,因为 .dataRange() 实际上是没有范围的。
情况并非如此,因为如果找不到数据, .getDataRange()
将默认为A1
。
如果我在最后一行或最后一列中有没有其他数据的复选框,它们仍然不会被清除,因为它们不是 .dataRange() 的一部分
复选框是数据范围的一部分。 当您添加一个复选框时,它默认包含FALSE
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.