簡體   English   中英

Google Apps腳本可遍歷電子表格ID列表,並將范圍復制到主文件

[英]Google Apps Script to Iterate through a list of Spreadsheet ID's and copy range to a master file

我的驅動器中有一個文件夾,在其中為每個新客戶端創建一個文件夾(基於模板結構)。 我需要從一個文件中提取信息,尤其是從每個文件夾中提取信息。 我在列表中有電子表格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();
        }
      }
    } 
  }
}

這是一個循環遍歷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);
  }
}

如果將id存儲在表“ Ids”的B列中,則函數的開頭將不同:

  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;
  });

然后繼續進行上述for循環。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM