V8推出后,谷歌应用脚本对其他用户不能完全执行。

问题描述 投票:0回答:1

我写了一个脚本(在这里的好心人的大力协助下),使用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());
}
javascript google-sheets v8 google-apps-script-editor
1个回答
1
投票

由于你是 杳无音信 对于那些脚本不工作的用户,问题很可能与你的函数没有正确执行或根本没有执行有关。

这个问题是脚本没有被附加到电子表格上。您可以尝试在电子表格中声明 ss 变量为 start 函数。上述行为的另一个问题可能是由于传递错误的变量到函数中造成的。你可以通过使用 console.log() 并检查变量是否为预期的变量。

此外,由于您与多个用户共享这个脚本,您可能需要了解一下关于 涡旋器附加组件. 这可以使分享变得更容易,因为用户只需要安装附加组件。

参考资料


0
投票

通过一些试验和错误--我发现有人要成功运行这个脚本,只需要打开 SourceFolder 一次。可能是因为它根据文件名进行搜索。

© www.soinside.com 2019 - 2024. All rights reserved.