将文件复制到新创建的文件夹

时间:2018-01-04 11:47:45

标签: google-apps-script google-drive-api

我正在处理一个脚本,该脚本遍历电子表格并根据所选范围内的值创建文件夹(在父文件夹中)。然后该脚本应该将文件从单独的文件夹复制到每个新创建的文件夹中。

除了将文件复制到源文件夹而不是新创建的文件夹之外,一切都运行良好。我无法理解为什么会这样。任何帮助将不胜感激。谢谢。

var ss = SpreadsheetApp.openByUrl('xxxxx').getSheetByName('xxxxx');
var countries = ss.getRange(2, 1, 50, 1);
var values = countries.getValues();

var sourceFiles = DriveApp.getFolderById('xxxxx'); //Folder containing files to be copied
var files = sourceFiles.getFiles();
var targetFolder = DriveApp.getFolderById('xxxxx'); //Parent folder for each new folder

for (i = 0; i < values.length; i++){
    var newFolder = targetFolder.createFolder(values[i]).getId();

    while(files.hasNext()) {
        var file = files.next();
        file.makeCopy(newFolder).setName(file.getName());
    }
}

1 个答案:

答案 0 :(得分:1)

以下修改如何?

修改要点:

  • getValues()检索的数据是二维数组。
    • 在您的情况下,ss.getRange(2, 1, 50, 1)似乎values[[value1], [value2],,, ]
  • 如果要为makeCopy()提供文件名,可以使用makeCopy(name, destination)
    • 在这种情况下,destinationFolder
  • 在您的脚本中,file.makeCopy(newFolder).setName(file.getName())file被复制到file的同一文件夹,因为newFolder是一个字符串。但file的文件名由setName(file.getName())给出。
    • 我认为这是错误的原因。

反映上述观点的修改后的脚本如下:

修改后的脚本:

var ss = SpreadsheetApp.openByUrl('xxxxx').getSheetByName('xxxxx');
var countries = ss.getRange(2, 1, 50, 1);
var values = countries.getValues();

var sourceFiles = DriveApp.getFolderById('xxxxx'); //Folder containing files to be copied
var targetFolder = DriveApp.getFolderById('xxxxx'); //Parent folder for each new folder

for (i = 0; i < values.length; i++){
    var files = sourceFiles.getFiles(); // Modified
    var newFolder = targetFolder.createFolder(values[i][0]); // Modified

    while(files.hasNext()) {
        var file = files.next();
        file.makeCopy(file.getName(), newFolder); // Modified
    }
}

参考文献:

如果我误解了你的问题,请告诉我。我想修改。