Сделайте копию листа Google в папку на диске Google. - PullRequest
1 голос
/ 15 октября 2019

У меня есть две таблицы. Первая электронная таблица содержит мои необработанные данные, которые указывают № сотрудника и имя сотрудника. Вторая электронная таблица - это электронная таблица, которую я хочу скопировать в папку на диске Google. Я хочу обновить определенные поля во 2-й таблице на основе номера сотрудника и имени сотрудника из 1-й таблицы. Каждый раз, когда он обновляет ячейки во второй электронной таблице, он создает копию второй электронной таблицы в папке на диске Google.

Однако он продолжает устанавливать только одно значение внутри реплицированных электронных таблиц. Он не зацикливает имена и номера сотрудников из 1-й таблицы.

Мой код уже копирует 2-ю таблицу. Просто значения не обновляются.

 function replicateCards() {
  var ss = SpreadsheetApp.openById('xxxxxxxx');
  var copyCard = SpreadsheetApp.openById('zzzzzzzzz');
  var getID = DriveApp.getFileById(copyCard.getId())
  var card = copyCard.getSheetByName("Card");
  var mastersheet = ss.getSheetByName("Mastersheet");
  var getLastRow = mastersheet.getLastRow();
  var destinationFolder = DriveApp.getFolderById('yyyyyyyyyy');
  ;
  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 employeeNumber = mastersheet.getRange(i + 1, 1).getValue();
    var employeeName = mastersheet.getRange(i + 1, 2).getValue();
    card.getRange("C3").setValue(employeeName);
    card.getRange("H3").setValue(employeeNumber);
    card.setActiveRangeList(changeColorToGrayList).setBackground("gray");
    card.setActiveRangeList(setValueToZero).setValue(0);
    //    var getID = DriveApp.getFileById(card).getId(); 
    getID.makeCopy(employeeNumber + " High Flyer Card", destinationFolder);
  }
}

Я ожидаю, что вывод getID.makeCopy(employeeNumber + " High Flyer Card", destinationFolder); будет содержать разные имена сотрудников и # сотрудников, а не только одно значение в папке Google.

1 Ответ

1 голос
/ 15 октября 2019

Ваш код должен работать должным образом, если только громоздкий файл не перекрывает код.

Если это так, реализация flush () заставит ваш код работать последовательно, см. здесь для подробного объяснения.

В вашем случае изменение цикла for на

  for (i = 1; i < getLastRow; i++) {
    var employeeNumber = mastersheet.getRange(i + 1, 1).getValue();
    var employeeName = mastersheet.getRange(i + 1, 2).getValue();
    card.getRange("C3").setValue(employeeName);
    card.getRange("H3").setValue(employeeNumber);
    card.setActiveRangeList(changeColorToGrayList).setBackground("gray");
    card.setActiveRangeList(setValueToZero).setValue(0);
    getID.makeCopy(employeeNumber + " High Flyer Card", destinationFolder);
    SpreadsheetApp.flush();  
  }

должно решить проблему.

...