[英]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.