我正在处理一个脚本,该脚本遍历电子表格并根据所选范围内的值创建文件夹(在父文件夹中)。然后该脚本应该将文件从单独的文件夹复制到每个新创建的文件夹中。
除了将文件复制到源文件夹而不是新创建的文件夹之外,一切都运行良好。我无法理解为什么会这样。任何帮助将不胜感激。谢谢。
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());
}
}
答案 0 :(得分:1)
以下修改如何?
getValues()
检索的数据是二维数组。
ss.getRange(2, 1, 50, 1)
似乎values
为[[value1], [value2],,, ]
。makeCopy()
提供文件名,可以使用makeCopy(name, destination)
。
destination
为Folder
。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
}
}
如果我误解了你的问题,请告诉我。我想修改。