首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Google脚本-在动态更改Tab号时运行相同的代码

Google脚本-在动态更改Tab号时运行相同的代码
EN

Stack Overflow用户
提问于 2020-11-17 17:44:00
回答 1查看 39关注 0票数 0

我希望下面的代码运行在创建许多选项卡的过程中--在第7页之后(前7个选项卡始终保持不变)。目前,我使用数组,必须对它们进行编号,如果您确切知道创建了多少选项卡,则必须对它们进行编号--我并不总是知道。所以我现在为7,然后8等等创建脚本,当我说有20,但Tab 20不存在时,这确实会返回一个错误。

代码语言:javascript
复制
 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);
 }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-17 17:52:27

解释:

  • 使用getSheet().slice(7)从第8页开始。参见这里切片是如何工作的。
  • 然后,您可以使用forEach()迭代每个工作表(在第7页之后)。
  • 我还删除了一些不必要的代码行。例如,在工作表中多次使用SpreadsheetApp.getActive(),或者定义相同的变量两次,如sssheet
  • 由于您是以迭代方式与工作表交互,您可能需要使用SpreadsheetApp.flush()来确保所有挂起的更改都已完成。

解决方案:

代码语言:javascript
复制
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();
 });

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64880515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档