当前位置: 首页 > 知识库问答 >
问题:

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

安建木
2023-03-14

我试图应用一个脚本,将在整个谷歌工作表电子表格上运行,而不仅仅是一个标签。我有多个选项卡都具有相同的格式;我希望脚本查看每个选项卡在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());
  }

共有2个答案

令狐昌胤
2023-03-14

您可以通过以下操作获取for循环中的每个电子表格

for(var i = 0; i < [number of sheets]; i++){
  sheet = ss.getSheets()[i];

  . . . [rest of the code]
}

并在for循环中包含您试图对每张图纸执行的操作。

何安宜
2023-03-14

给定项目中的所有脚本都可以访问电子表格中的所有工作表。这就是为什么我们建议您这样编写OneEdit(e)脚本:

function onEdit(e) {
  var sh=e.range.getSheet();
  if(sh.getName()!="Sheet Name") return;

这限制了脚本对不需要的工作表执行操作。

但是,在您的情况下,您希望所有工作表都参与onEdit(e)函数,因此没有必要这样做。

就我个人而言,我不会在onEdit()函数中运行此函数,因为它可能需要超过30秒的时间。但是您请求的功能是通过以下脚本实现的。感叹号是一个工作表名称数组,您不希望将其包括在“不适用”搜索中,就像名为“不适用项”的工作表一样。

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()功能。

 类似资料:
  • 我有一个谷歌电子表格,有两张叫做罗宾和露西的表格。每次我向列A添加一些数据时,我都制作/找到/破坏了一个脚本来对工作表上的数据进行排序 这个剧本很棒,但我只想把它应用在第一张纸上,罗宾。第二个工作表中的数据,Lucy,是不一样的,所以我将创建另一个脚本为不同的范围,一旦我得到了这个问题的头脑。 我想我需要使用getSheetByName(“罗宾”),但我似乎无法让它工作。提前感谢

  • 我试图使用原子电子为Mac和Windows编写桌面应用程序。 我需要的是: 一个按钮。 当用户单击按钮时,它将运行以下shell(或python脚本): 结果将显示在文本区域中。 我试着使用[shelljs]和[yargs],但它似乎不适用于原子电子。 所有我想要的是使用JAVASCRIPT编写桌面应用程序(当然是GUI),调用一些脚本(shell 如有任何建议,将不胜感激,谢谢:)

  • 我的程序是这样工作的:

  • 我有这张表: 个人财务表 我使用此脚本对A列和B列进行“OneEdit”排序: 现在,我不想对A列进行排序,而是对其进行筛选,以便不显示选中的复选框: 想要过滤视图 似乎与和有关,但我真的搞不清楚。 有人能帮帮我吗? 谢谢

  • 如何使用Google应用程序脚本在Google电子表格中合并多个选项卡?所有选项卡中的数据都在不断变化。 例如,我在谷歌电子表格中有“Sheet1”、“Sheet2”和“Sheet3”。所有这些表中的数据都有3列-名称和电子邮件ID