将复选框保存到工作表的更快方法



我有一张表,我想在其中对几个范围应用复选框。我做了一个rangeList,然后使用以下代码:

//apply checkboxes to entire boolean rangeList
var activeRanges = compSheet.getRangeList(rangeListArr).activate();
activeRanges.insertCheckboxes();

但这是令人难以置信的缓慢。即使在该范围内有一行,也需要大约一秒钟的时间将复选框应用于每列。我使用rangeList是因为我认为它可能比将复选框应用于单个范围更快,但速度似乎没有差异。

在没有activate()的情况下,您将把时间除以约2

const compSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet5')
var activeRanges = compSheet.getRangeList(rangeListArr).insertCheckboxes();

经过几次测试后,它似乎比batchupdate运行得更快。

编辑

以下是3项测试及其在毫秒中的性能

function test1(){
// 703 MILLISECONDS
var d = new Date()
var rangeListArr = ['C1:C100', 'J1:J100', 'Z1:Z100']; 
const compSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet5')
var activeRanges = compSheet.getRangeList(rangeListArr).activate();
activeRanges.insertCheckboxes();
Logger.log(new Date() - d)
}
function test2(){
// 348 MILLISECONDS
var d = new Date()
var rangeListArr = ['C1:C100', 'J1:J100', 'Z1:Z100']; 
const compSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet5')
var activeRanges = compSheet.getRangeList(rangeListArr).insertCheckboxes();
Logger.log(new Date() - d)
}
function test3() {
// 469 MILLISECONDS
var d = new Date()
const rangeListArr = ['C1:C100', 'J1:J100', 'Z1:Z100']; 
const sheetName = "Sheet5"; // Please set your sheet name.
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName(sheetName);
const sheetId = sheet.getSheetId();
const requests = sheet.getRangeList(rangeListArr).getRanges().map(r => {
const startRowIndex = r.getRow() - 1;
const startColumnIndex = r.getColumn() - 1;
const endRowIndex = startRowIndex + r.getNumRows();
const endColumnIndex = startColumnIndex + r.getNumColumns();
return { repeatCell: { range: { sheetId, startRowIndex, endRowIndex, startColumnIndex, endColumnIndex }, cell: { dataValidation: { condition: { type: "BOOLEAN" } } }, fields: "dataValidation" } };
});
if (requests.length > 0) {
Sheets.Spreadsheets.batchUpdate({ requests }, ss.getId());
}
Logger.log(new Date() - d)
}

最新更新