![](/img/trans.png)
[英]How to open an unconverted google spreadsheet with google apps script (google sheets)
[英]How to apply a Google Apps Script to an entire Google Sheets spreadsheet?
我正在尝试应用一种脚本,该脚本将在整个Google表格电子表格中运行,而不仅仅是一个标签。 我有多个标签都使用相同的格式; 我希望脚本查看每个选项卡的F列中的数据验证,如果为任何行选择了“不适用”,请将整行的内容移至名为“不适用项”的选项卡
我没有编写脚本的经验,因此我从一个论坛主题中复制了当前正在使用的脚本。 它成功地将行移动到正确的选项卡,但仅适用于指定的活动工作表。 我希望脚本查看整个电子表格,并移动任何标记为“不适用”的行。
我怎样才能做到这一点? 这是我的代码:
function onEdit() {
var sheetNameToWatch = "Floorplan + Calendars";
var columnNumberToWatch = 5; // column A = 1, B = 2, etc.
var valueToWatch = "Not Applicable";
var sheetNameToMoveTheRowTo = "Not Applicable Items";
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getActiveCell();
if (
sheet.getName() == sheetNameToWatch &&
range.getColumn() == columnNumberToWatch &&
range.getValue() == valueToWatch
) {
var targetSheet = ss.getSheetByName(sheetNameToMoveTheRowTo);
var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
sheet
.getRange(range.getRow(), 1, 1, sheet.getLastColumn())
.moveTo(targetRange);
sheet.deleteRow(range.getRow());
}
给定项目中的所有脚本都可以访问电子表格中的所有工作表。 这就是为什么我们建议您这样编写onEdit(e)脚本的原因:
function onEdit(e) {
var sh=e.range.getSheet();
if(sh.getName()!="Sheet Name") return;
这限制了脚本对不需要的图纸执行操作。
但是,在您的情况下,您希望所有表都包含在onEdit(e)函数中,因此这不是必需的。
就个人而言,我不会在onEdit()函数中运行此函数,因为它可能需要30秒以上的时间。 但是您要求的功能是通过以下脚本完成的。 exclA是您不希望在“不适用”搜索中包含的工作表名称的数组,例如名为“不适用项目”的工作表。
function notApplicable() {
var ss=SpreadsheetApp.getActive();
var dsh=ss.getSheetByName('Not Applicable Items')
var exclA=["Not Applicable Items"];
var shts=ss.getSheets();
for(var i=0;i<shts.length;i++) {
var name=shts[i].getName();
if (exclA.indexOf(shts[i].getName())==-1) {
var sh=shts[i];
var rg=sh.getDataRange();
var vA=rg.getValues();
var d=0;
for(var j=0;j<vA.length;j++) {
if(vA[j][5]=="Not Applicable") {
dsh.appendRow(vA[j]);
sh.deleteRow(j+1-d++)
}
}
}
}
}
我认为很多用户都在使用onEdit()功能。
您可以通过以下方式在for循环中获取每个电子表格
for(var i = 0; i < [number of sheets]; i++){
sheet = ss.getSheets()[i];
. . . [rest of the code]
}
并在每个循环中将要尝试的内容包括在for循环中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.