我写了一个脚本(在这里的好心人的大力协助下),使用Google Sheets Scripts复制Google Drive上的文件夹(和内容)。
它工作了很长一段时间,但后来我启用了V8引擎(现在禁用)。问题是,它仍然为我工作(也许还有其他两个用户),但不为其他人工作。我不是一个程序员,但我学到了足够的知识来帮助我在Excel表上自动完成一些任务。
到目前为止,我已经尝试过重新检查所有的权限,创建一个全新的工作表,分配新的所有者,删除触发器,学习更多关于V8的知识。但这并没有真正发挥作用,因为我甚至无法找出问题所在。
我将感激任何线索。 TIA
PS:我们使用的是共享驱动器,SourceTarget文件夹所有用户都可以访问。
下面是脚本。
function onClick() {
ss.getRange("B2:B8").clearContent();
}
function start() {
var sourceFolder = ss.getRange("B19").getValue() ; // Change every month
var targetFolder = ss.getRange("B22").getValue();
var source = DriveApp.getFoldersByName(sourceFolder); // Grab the folder we're going to copy
var parentFolder=DriveApp.getFolderById(ss.getRange("B11").getValue()); // Destination for the new folder.
var target = parentFolder.createFolder(targetFolder);
if (source.hasNext()) {
copyFolder(source.next(), target);
}
}
function copyFolder(source, target) {
var folders = source.getFolders();
var files = source.getFiles();
var prefix = ss.getRange("B23").getValue();
while(files.hasNext()) {
var file = files.next();
file.makeCopy(file.getName(), target).setName(prefix + file.getName());
}
while(folders.hasNext()) {
var subFolder = folders.next();
var folderName = subFolder.getName();
var targetFolder = target.createFolder(folderName);
copyFolder(subFolder, targetFolder);
var NewFolderUrl = target.getUrl()
SpreadsheetApp.getActiveSheet().getRange('B8').setValue(NewFolderUrl);
}
//file.setName(prefix + file.getName());
}
由于你是 杳无音信 对于那些脚本不工作的用户,问题很可能与你的函数没有正确执行或根本没有执行有关。
这个问题是脚本没有被附加到电子表格上。您可以尝试在电子表格中声明 ss
变量为 start
函数。上述行为的另一个问题可能是由于传递错误的变量到函数中造成的。你可以通过使用 console.log()
并检查变量是否为预期的变量。
此外,由于您与多个用户共享这个脚本,您可能需要了解一下关于 涡旋器附加组件. 这可以使分享变得更容易,因为用户只需要安装附加组件。
通过一些试验和错误--我发现有人要成功运行这个脚本,只需要打开 SourceFolder
一次。可能是因为它根据文件名进行搜索。