簡體   English   中英

Google Apps 腳本 - 在動態更改的標簽編號上運行相同的代碼

[英]Google Apps Script - Run Same Code on Dynamically Changing Tab Numbers

我希望下面的代碼在創建多少選項卡時運行 - 在第 7 頁之后(前 7 個選項卡始終保持不變)。 目前我使用一個數組,並且必須對它們進行編號,如果您確切知道創建了多少個選項卡 - 我並不總是知道這些。 所以我目前為 [7] 然后 [8] 等創建腳本。當我說有 [20] 但標簽 20 不存在時,這確實返回錯誤。

 function Company_ONE() {
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheets()[7]; //SHEET 8
 var ss = SpreadsheetApp.getActive();   
 var sheet = ss.getSheets()[7];  
 var lr = sheet.getLastRow();
 var cell = SpreadsheetApp.getActive().getRange('AK3');
 var criteria = SpreadsheetApp.DataValidationCriteria.CHECKBOX;
 var rule = SpreadsheetApp.newDataValidation()
 .requireCheckbox()
 .build();
 cell.setDataValidation(rule);
 sheet.getRange('AK3').activate();
 var destinationRange = sheet.getActiveRange().offset(0, 0, lr-3);
 sheet.getRange('AK3').copyTo(destinationRange);
 }

解釋:

  • 使用getSheet().slice(7)從第 8 頁開始獲取。 在這里查看切片是如何工作的。

  • 然后您可以使用forEach()遍歷每個工作表(在工作表 7 之后)。

  • 我還刪除了一些不必要的代碼行。 例如,您在工作表中多次使用SpreadsheetApp.getActive()或者您定義了兩次相同的變量,如sssheet

  • 由於您正在迭代地與工作表交互,因此您可能需要使用SpreadsheetApp.flush()來確保所有待處理的更改都已完成。

解決方案:

function Company_ONE() {
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheets = ss.getSheets().slice(7); // get 8th sheet onwards
 
 sheets.forEach(sheet=>{
   var lr = sheet.getLastRow();
   var cell = ss.getRange('AK3');
   var criteria = SpreadsheetApp.DataValidationCriteria.CHECKBOX;
   var rule = SpreadsheetApp.newDataValidation()
             .requireCheckbox()
             .build();
   cell.setDataValidation(rule);
   sheet.getRange('AK3').activate();
   var destinationRange = sheet.getActiveRange().offset(0, 0, lr-3);
   sheet.getRange('AK3').copyTo(destinationRange);
   SpreadsheetApp.flush();
 });

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM