在While循环内嵌套For循环

时间:2019-07-08 17:28:32

标签: javascript google-apps-script google-sheets

我正在创建一个脚本,将多个Google工作表从一个Google驱动器位置复制到另一个位置,然后在这些工作表上循环并应用权限/编辑器。我还必须跟踪先前已复制了源位置中的哪些工作表。

我的问题是while循环内的for循环。由于某些原因,在while循环进行一次迭代之后,运行我的for循环的变量似乎采用了文件名的值。

while (files.hasNext()) {

    var file = files.next();

    for (var k in check){
      Logger.log(check[k]);
      if(check[k] = file.getName()){

        Logger.log("this file has been copied already");
        break;
      }
      else{
        Logger.log("this file was not found on the list, copying");
        file.makeCopy(file.getName(),copyFolder);
        ss = SpreadsheetApp.open(copyFolder.getFilesByName(file.getName()));
        ss.addEditors(admins);
        ss.addEditors(editors);

        var sheets = ss.getSheets();

        for (var y in sheets) {
             Logger.log(sheets[k].getSheetName());
             var protection = sheets[y].protect();
             protection.addEditors(admins);
             protection.removeEditors(editors);
           }


        checkSheet.appendRow(file.getName());
        Logger.log("file copied, file name appended to check list");

      }



    }

  }

这是输出日志。正如您在for循环的第一次迭代中看到的那样,将记录数组中的正确值,即。 “列出的文件”。从第二次迭代开始,check [k]的值将以某种方式分配给文件名,即。 “批量许可”,“ CP-007791”。

[19-07-08 11:06:49:423 MDT] LISTED FILE
[19-07-08 11:06:49:424 MDT] this file has been copied already
[19-07-08 11:06:49:425 MDT] batch permissions
[19-07-08 11:06:49:425 MDT] this file has been copied already
[19-07-08 11:06:49:426 MDT] CP-007791
[19-07-08 11:06:49:427 MDT] this file has been copied already
[19-07-08 11:06:49:428 MDT] batch permissions 2
[19-07-08 11:06:49:429 MDT] this file has been copied already
[19-07-08 11:06:49:430 MDT] CP-008504
[19-07-08 11:06:49:431 MDT] this file has been copied already
[19-07-08 11:06:49:432 MDT] CP-007796
[19-07-08 11:06:49:433 MDT] this file has been copied already
[19-07-08 11:06:49:434 MDT] CP-007802
[19-07-08 11:06:49:435 MDT] this file has been copied already
[19-07-08 11:06:49:436 MDT] CP-003675
[19-07-08 11:06:49:437 MDT] this file has been copied already
[19-07-08 11:06:49:438 MDT] CP-007317
[19-07-08 11:06:49:439 MDT] this file has been copied already
[19-07-08 11:06:49:440 MDT] WO 81382901

我觉得我只是在这里错过了一些真正简单的事情。让我知道您能否提供帮助。谢谢

1 个答案:

答案 0 :(得分:0)

问题和解决方案

您是对的,只是在===语句条件=中使用了赋值if而不是比较运算符check[k] = file.getName()。您可以通过将其更改为check[k]===file.getName()来修改您的问题。

改进点

此外,为了使答案更有意义,您可以通过将if...else写入变量来优化代码以仅在for语句之前和file.getName()循环之外访问文件名一次。 ,例如var name = file.getName()。这将为您节省三个对getName()的呼叫。

有用的链接

  1. 分配运算符reference;
  2. 比较运算符reference;