javascript - Google Apps 脚本 - 在动态更改选项卡编号上运行相同的代码
问题描述
我希望下面的代码在创建多少个选项卡时运行 - 在 Sheet 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 页开始。在这里查看slice 的工作原理。然后您可以使用forEach()遍历每张纸(在第 7 张纸之后)。
我还删除了一些不必要的代码行。例如,您
SpreadsheetApp.getActive()
在工作表中使用了多次,或者您将相同的变量定义了两次,如ss
orsheet
。由于您正在迭代地与工作表交互,您可能需要使用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();
});
}
推荐阅读
- .htaccess - HTACCESS:向 RewriteEngine 添加 FOLDER 异常
- angular - Angular - 错误 TS2339:“对象”类型上不存在属性“结果”
- angular - 在角度中,如何将元素添加到视图和数据库中,然后在不知道id的情况下直接删除它?
- git - 仅按特定文件类型列出未跟踪的文件
- api - 没有坐标的世界天气api历史数据框?
- nginx - Nginx $is_args 和 $args 重写后清除
- java - Java 到 Swift 代码转换致命错误:没有足够的位来表示传递的值
- xml - 使用 xslt 将兄弟节点设置为 xml 中的父节点
- c - 如何使用`setcap`来增加`cargo test`生成的可执行文件的权限?
- hover - 在商店页面停止的简单悬停 CSS(不超越)