Spreadsheet.flush 在我的 Google Apps 脚本上无法正常工作

Spreadsheet.flush is not working properly on my Google Apps Script

这是我的 2 个点差sheet:

Gsheet1:Googlesheet 用于复制(只有员工编号和员工姓名会更改)

Gsheet2:配置 sheet(包含员工编号、员工姓名、复制状态、pubHTML link)将在 G[= 上提供员工编号和员工姓名43=]1

所以我的代码具有以下功能:

  1. 根据 Gsheet2 上的员工数量(我目前有 800 多名员工)复制 Gsheet1,并将其转储到 google 驱动器文件夹。
  2. 复制后,将 "completed" 复制状态设置为 Gsheet2。
  3. 更改复制的修订属性 sheet 并将其发布到 Web。
  4. 获取已发布网站 (pubhtml) 的 link 并将其放在 Gsheet2 pubHTML link 列中。

假设我在 Gsheet2 上有 2 条记录,当我尝试 logger.log 下面这段代码的结果时,它会循环三次,第一条和第三条记录在循环是一样的。

  var TemplatesFromDrive = DriveApp.getFolderById(SpreadsheetApp.getActive().getSheetByName("Master Config").getRange("B2").getValue()).getFiles();
  while (TemplatesFromDrive.hasNext()) {
    var File = TemplatesFromDrive.next();
    Logger.log(File.getName());

我在想是不是因为我缺少 Spreadsheet.flush()。我可以将它放在我的代码中以便我的循环正常工作的最佳位置在哪里?下面是我的完整代码。

function replicateCards() {
    var ss = SpreadsheetApp.openById('Gsheet2-xxxx');
    var copyCard = SpreadsheetApp.openById('Gsheet1-xxxx');
    var getID = DriveApp.getFileById(copyCard.getId())
    var card = copyCard.getSheetByName("Card");
    var mastersheet = ss.getSheetByName("Mastersheet");
    var employeeNumber2 = ss.getRange("A2:A").getValues;
    var getLastRow = mastersheet.getLastRow();
    var destinationFolder = DriveApp.getFolderById('googledrivefolder-xxx');
    var changeColorToGrayList = card.getRangeList(['C7', 'E7', 'G7', 'I7', 'K7', 'M7', 'O7', 'Q7',
        'C9', 'E9', 'G9', 'I9', 'K9', 'M9', 'O9', 'Q9',
        'C11', 'E11', 'G11', 'I11', 'K11', 'M11', 'O11', 'Q11']);
    var setValueToZero = card.getRangeList(['C8', 'E8', 'G8', 'I8', 'K8', 'M8', 'O8', 'Q8',
        'C10', 'E10', 'G10', 'I10', 'K10', 'M10', 'O10', 'Q10',
        'C12', 'E12', 'G12', 'I12', 'K12', 'M12', 'O12', 'Q12']);
    for (i = 1; i < getLastRow; i++) {
        var badgeStatus = mastersheet.getRange(i + 1, 5).getValue();
        if (badgeStatus == "") {
            var employeeNumber = mastersheet.getRange(i + 1, 1).getValue();
            var employeeName = mastersheet.getRange(i + 1, 2).getValue();
            copyCard.getRange("H3").setValue(employeeNumber);
            copyCard.getRange("C3").setValue(employeeName);
          SpreadsheetApp.flush();
            getID.makeCopy(employeeNumber, destinationFolder);
            mastersheet.getRange(1 + i, 5).setValue("completed");
          SpreadsheetApp.flush();
            var files = DriveApp.getFolderById(SpreadsheetApp.openById("Gsheet1-xxxx").getSheetByName("Config Sheet").getRange("B1").getValue()).getFiles();
            while (files.hasNext()) {
                var file = files.next();
              Logger.log(file.getName());
                var Found = false;
                for (var j = 0; j < employeeNumber2.length; i++) {
                    if (employeeNumber2[j][0] == file.getName()) {
                        Found = true;
                    }
                }
                if (Found) {
                    continue;
                }
                try {
                    var fileId = file.getId();
                    var fileName = file.getName();
                    var revisions = Drive.Revisions.list(fileId);
                    var lastRevisionId = revisions.items[revisions.items.length - 1].id;
                    // get the resource and set the publish parameters
                    var resource = Drive.Revisions.get(fileId, lastRevisionId);
                    //       Logger.log(resource);
                    resource.published = true;
                    resource.publishAuto = true;
                    resource.publishedOutsideDomain = true;
                    // publish to the web
                    Drive.Revisions.update(resource, fileId, lastRevisionId);
                  SpreadsheetApp.flush();
                    var openByID = SpreadsheetApp.openById(fileId);
                  SpreadsheetApp.flush();
                    var googleDriveSheet = openByID.getUrl().replace("edit", "pubhtml"); // or replace("edit", "pub");
                  SpreadsheetApp.flush();
                    mastersheet.getRange(1 + j, 9).setValue(googleDriveSheet);
                  SpreadsheetApp.flush();

                } catch (err) {
                    Logger.log(err);
                }
            }
        }
    }
}

将变量 getLastRow = mastersheet.getLastRow(); 更改为 var getLastRow = mastersheet.getLastRow()-1;

The reason why is because you've started to get your data from the second row. If you would start at the third, you should do var getLastRow = mastersheet.getLastRow()-2; ...