Google apps script Google应用程序脚本,用于迭代电子表格ID列表';并将范围复制到主文件

Google apps script Google应用程序脚本,用于迭代电子表格ID列表';并将范围复制到主文件,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我的驱动器中有一个文件夹,我在其中为每个新客户端创建一个文件夹(基于模板结构)。我需要从一个文件中提取信息,特别是从每个文件夹中提取信息。我在列表中有电子表格ID,我知道图纸名称,但我不知道如何创建循环来遍历每个文件并将其附加到主文件 我最近发现了一个脚本,可以实现这一目的,但它假设所有的电子表格都在一个文件夹中: function getDataToMaster2() { var comp = SpreadsheetApp.getActiveSpreadsheet().getSheet

我的驱动器中有一个文件夹,我在其中为每个新客户端创建一个文件夹(基于模板结构)。我需要从一个文件中提取信息,特别是从每个文件夹中提取信息。我在列表中有电子表格ID,我知道图纸名称,但我不知道如何创建循环来遍历每个文件并将其附加到主文件

我最近发现了一个脚本,可以实现这一目的,但它假设所有的电子表格都在一个文件夹中:

function getDataToMaster2() {
    var comp = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("System_Control").getRange("d7").getValue();
  var folder = DriveApp.getFolderById(comp); //Define id of folder
  var contents = folder.getFiles();
  var file; 
  var data;
  var sheetMaster = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Form_Responses"); //first sheet of the file, change by getSheetByName("NAME") if you want
  while(contents.hasNext()){  
    file = contents.next();
    if (file.getMimeType() == "application/vnd.google-apps.spreadsheet") {
      var sheet = SpreadsheetApp.openById(file.getId()).getSheetByName("Form_Responses");//first sheet of the file, change by getSheetByName("NAME") if you want
      var startRow = 2; 
      var data = sheet.getDataRange().getValues();
      var colToCheck = 14;
      for(var j = 1; j < data.length;j++){
        if(data[j][colToCheck-1] != "copied"){
          sheetMaster.appendRow(data[j]);
          sheet.getRange((j+1), colToCheck).setValue("copied");
          SpreadsheetApp.flush();
        }
      }
    } 
  }
}
函数getDataToMaster2(){ var comp=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“系统_控制”).getRange(“d7”).getValue(); var folder=DriveApp.getFolderById(comp);//定义文件夹的id var contents=folder.getFiles(); var文件; var数据; var sheetMaster=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“Form_Responses”);//如果需要,请按getSheetByName(“NAME”)更改文件的第一页 while(contents.hasNext()){ file=contents.next(); if(file.getMimeType()=“application/vnd.google apps.spreadsheet”){ var sheet=SpreadsheetApp.openById(file.getId()).getSheetByName(“Form_Responses”);//如果需要,请按getSheetByName(“NAME”)更改文件的第一页 var startRow=2; var data=sheet.getDataRange().getValues(); var-colToCheck=14; 对于(var j=1;j这里有一个函数,它在idList上循环,idList是一个数组,保存要复制的每个电子表格的Id。它从每个表中的“Sheet1”中获取所有数据,并复制到活动电子表格中的“Master”表中

数据复制立即发生,不会像示例中那样在行上循环;一次移动较大的块会更有效

function getDataToMaster2() {
  var idList = ['id1', 'id2', 'id3'];
  var sheetMaster = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Master");
  for (var i = 0; i < idList.length; i++) {  
    var sheet = SpreadsheetApp.openById(idList[i]).getSheetByName("Sheet1"); 
    var data = sheet.getDataRange().getValues();
    var lastRow = sheetMaster.getLastRow();
    sheetMaster.insertRowsAfter(lastRow, data.length);
    sheetMaster.getRange(lastRow + 1, 1, data.length, data[0].length).setValues(data);
  }
}

然后继续进行上述for循环。

完美!只有一个小问题-如果ID在一列中,并且不断添加更多的ID,我将如何创建数组?我将此添加到了答案中。
  var sheetIds = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Ids");
  var values = sheetIds.getRange('B:B').getValues();
  var idList = values.map(function (row) {
    return row[0];
  }).filter(function (id) {
    return id;
  });