簡體   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