繁体   English   中英

如何将Google Apps脚本应用于整个Google表格电子表格?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM