繁体   English   中英

即使没有数据,Google Sheets Apps 脚本也会获取整个工作表的范围

[英]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() ) 。 只要我控制一切并遵守某些规则,这就有效。 这仍然存在两个问题:

  1. 一旦我部署了我的脚本并且其他用户开始使用它,有人很容易清除工作表并留下复选框,这将导致我的脚本稍后崩溃,因为.dataRange()实际上是没有范围的。

  2. 如果我在最后一行或最后一列中有没有其他数据的复选框,它们仍然不会被清除,因为它们不会成为.dataRange()的一部分

那么我怎样才能确保我的工作表中的所有复选框都被删除了呢?

1. 删除工作表中的所有复选框。

在您的情况下,为了检索工作表中的所有单元格,使用getMaxRowsgetMaxColumns怎么样? 当这反映在脚本中时,它变成如下。

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()

2. 检查工作表中的复选框。

为了确认是否删除了工作表中的所有复选框,以下示例脚本如何?

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.

}

笔记:

  • 比如我觉得Sheets API也可以用在你的情况下。 但我猜从你的问题来看,使用电子表格服务可能是合适的。 所以,我提出了以上答案。

参考:

出于所有意图和目的,复选框包含数据,无论是否选中。 @Cooper也提到了这一点

一旦我部署了我的脚本并且其他用户开始使用它,有人很容易清除工作表并留下复选框,这将导致我的脚本稍后崩溃,因为 .dataRange() 实际上是没有范围的。

情况并非如此,因为如果找不到数据, .getDataRange()将默认为A1

如果我在最后一行或最后一列中有没有其他数据的复选框,它们仍然不会被清除,因为它们不是 .dataRange() 的一部分

复选框是数据范围的一部分。 当您添加一个复选框时,它默认包含FALSE

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM