在此设置中有什么方法可以减少 Spreadsheet.makeCopy() 的计算时间吗?

Is there any way to reduce computation time of Spreadsheet.makeCopy() in this setting?

我有一个工作脚本,其中包含自定义方法中的以下代码 class:

destination = this
  ._source
  .makeCopy(
    this._name,
    this._folder
  )
  .setStarred(true);

此脚本大约需要 15 秒才能完成。 this._source 是用户正在使用的模板文件的 DriveApp.File (DriveApp.getFileById('xxxxxxxxxxxx')) 的实例。 this._name 只是一个通过将年份添加到标题上而创建的字符串。 'this._folder' 是 DriveApp.Folder (DriveApp.getFolderById('xxxxxxxxxxxx')) 的实例。当 class 在我的 On Open 触发器中实例化时,除 destination 之外的所有这些都在用户开始制作副本之前很久就实例化了,而 destination 是在该方法的开头实例化的(尽管我测得实例化速度非常快)。

这条语句前后我测量了15380毫秒。我隔离了 DriveApp.File.setStarred() 并测量了 100 毫秒,所以问题归结为 DriveApp.File.makeCopy()。有什么我可以做的来获得更快的结果吗? .makeCopy的各个版本我都试过了,好像都需要一段时间。我认为问题在于我的实际文件的大小(178 KB,我认为这对于表格文件来说已经相当大了)。它有 13 张表,一张是全年的收入数字,还有 12 个月的现金抽屉、保险箱和银行的每日对账deposits/withdrawals,所以里面有无数的公式。

建议:

你可以试试Drive API V2 Files:copy方法。最初使用 API Explorer 在 280kb 的工作表文件上进行了测试,计算时间为 11000 毫秒。

不确定它是否一直都更快,但对我来说似乎更快

function makeCopy() {
  var folderid = "dfolderid";
  var fileid = "fileid";
  var folder = Drive.Files.get(folderid, { "supportsAllDrives": true });
  var newFile = { "fileId": fileid, "parents": [folder] };
  var args = { "resource": { "parents": [folder], "title": "new Title" }, "supportsAllDrives": true };
  Drive.Files.copy(newFile, fileid, args);
}