如何使用应用程序脚本将值从一个子文件夹中的某些电子表格复制到另一电子表格

时间:2018-08-21 18:07:18

标签: javascript google-apps-script google-sheets

我需要从子文件夹中的几个电子表格中复制值,为此我研究了如何使用以下脚本在文件夹和子文件夹之间搜索文件...

function listFolders(folder) {

folder = folder || DriveApp.getRootFolder();

var name = folder.getName();

var files = folder.getFiles();

while ( files.hasNext() ) {
  Logger.log(name + " :: " + files.next().getName());
}

var subfolders = folder.getFolders();

while (subfolders.hasNext()) {
  listFolders(subfolders.next());
}

直到此处,它都在所有文件夹和子文件夹之间进行搜索 文件,然后我尝试实现一个条件,如果找到文件夹“ measurement”,然后从文件中复制一些数据到另一个电子表格,但是它没有意识到该条件,我也不知道为什么... < / p>

   if( folder == "Measurement"){
   while (files.hasNext()) {
   var file = files.next();
   var bring = SpreadsheetApp.openById(file.getId());

   var srceSheet = bring.getSheets()[0];

    var lastRow = srceSheet.getLastRow();
    var range = srceSheet.getRange("A"+(lastRow)+":D"+(lastRow));
    var values = range.getValues();


    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var SSsheet = ss.getSheetByName("Sheet 1");
    var getRow = SSsheet.getLastRow() + 1;
    var ssRange = SSsheet.getRange(getRow, 2, values.length,
    values[0].length);
    ssRange.setValues(values);


  }
 }
}  

如果条件声明不正确,或者我调查的另一种方法是放置具有此条件'fullText contains "hello world"'或其他'name contains "hello" and name contains "goodbye"'的文件名,我不知道可能会出错包含此变量的变量为var file = DriveApp.getRootFolder().searchFiles('name contains "hello" and name contains "goodbye"')

1 个答案:

答案 0 :(得分:0)

感谢您的帮助,我得以解决自己的问题,进行了进一步的研究,结果发现此页面Developers.Google的方法file.list和我的脚本是这样的……

function SearchFiles() {
var searchFor ='fullText contains "Test"';
var names =[];
var fileIds=[];
var files = DriveApp.searchFiles(searchFor);
while (files.hasNext()) {
  var file = files.next();
  var fileId = file.getId();
  fileIds.push(fileId);
  var name = file.getName();
  names.push(name);

  var bring = SpreadsheetApp.openById(file.getId()); 
  var dePr = bring.getSheetByName("Sheet1 ");
  var veEq = bring.getSheetByName("Sheet2 ");


    var ltRowDe = dePr.getLastRow();
    var rgDe    = dePr.getRange("B"+(ltRowDe)+":E"+(ltRowDe));
    var valDe   = rgDe.getValues();


    var ltRowVe  = veEq.getLastRow();
    var rgVe    = veEq.getRange("O"+(ltRowVe)+":P"+(ltRowVe));
    var valVe    = rgVe.getValues();


    var ss = SpreadsheetApp.getActiveSpreadsheet();

    var ssDe = ss.getSheetByName("Sheet  1");
    var getRowDe = ssDe.getLastRow() + 1;
    var ssRgDe = ssDe.getRange(getRowDe, 5, valDe.length, valDe[0].length).setValues(valDe);  


    var ssVe = ss.getSheetByName("Sheet 2");
    var getRowVe = ssVe.getLastRow() + 1;
    var ssRgVe = ssVe.getRange(getRowVe, 7, valVe.length, valVe[0].length).setValues(valVe); 

}  
}  

我的脚本基本上所做的是,它通过驱动器搜索所有名为Test的文件,并将您为所有这些文件指定的工作表的最后数据带到另一个电子表格中。感谢您的帮助,我希望有一天有人会提供此脚本。 = D