首页 > 解决方案 > 将 google sheet 复制到 google drive 文件夹中

问题描述

我有两个电子表格。第一个电子表格包含我的原始数据,表明员工编号和员工姓名。第二个电子表格是我要复制到谷歌驱动器文件夹中的电子表格。我想根据第一个电子表格中的员工编号和员工姓名更新第二个电子表格上的特定字段。每次更新第二个电子表格中的单元格时,它都会将第二个电子表格的副本创建到谷歌驱动器文件夹中。

但是,它继续在复制的电子表格中只设置一个值。它不会循环第一个电子表格中的员工姓名和员工编号。

我的代码已经在复制第二个电子表格。只是价值观没有更新。

 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 文件夹中的一个值。

标签: javascriptfor-loopgoogle-apps-scriptgoogle-sheets

解决方案


您的代码应该按预期工作,除非一个庞大的文件使代码重叠。

如果是这样,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();  
  }

应该解决问题。


推荐阅读