首页 > 解决方案 > 我们如何在单个 google drive 应用程序中运行多个功能?

问题描述

我想在一次运行中运行 google drive app 脚本中的两个作业,我们可以这样做吗?抱歉,我是菜鸟,我对 php 或脚本的了解不多。这是示例代码

function copyfile(e) {
  var filenames = DriveApp.getFoldersByName("abc").next().getFilesByName("filename.txt").next().getBlob().getDataAsString().split("\r\n").filter(String);
  var sourceFolderName = "music";
  var destinationFolderId = "folder id 1";
  var source_folder = DriveApp.getFoldersByName(sourceFolderName).next();
  for (var i = 0; i < filenames.length; i++) {
    var filename = filenames[i];
    var file = source_folder.getFilesByName(filename);
    if (file.hasNext()) {
var dest_folder = DriveApp.getFolderById(destinationFolderId);
      var srcFile = file.next();
      var newName = srcFile.getName();
      srcFile.makeCopy(newName, dest_folder);
    }
  }
   copyfile1(e); // Added
}

function copyfile1(e) {
  var filenames = DriveApp.getFoldersByName("abc").next().getFilesByName("filename.txt").next().getBlob().getDataAsString().split("\r\n").filter(String);
  var sourceFolderName = "music";
  var destinationFolderId = "folder id 2";
  var source_folder = DriveApp.getFoldersByName(sourceFolderName).next();
  for (var i = 0; i < filenames.length; i++) {
    var filename = filenames[i];
    var file = source_folder.getFilesByName(filename);
    if (file.hasNext()) {
var dest_folder = DriveApp.getFolderById(destinationFolderId);
      var srcFile = file.next();
      var newName = srcFile.getName();
      srcFile.makeCopy(newName, dest_folder);
    }
  }
}

标签: google-apps-script

解决方案


问题 1 的答案:

当你想在被运行myFunction2myFunction1运行时,下面的修改怎么样?请认为这只是几个答案之一。

模式一:

在这种模式中,通过运行myFunction1myFunction1依次myFunction2运行。

function myFunction1 () {
  code

  myFunction2(); // Added
}


function myFunction2 () {
  code
}

模式二:

在这种模式中,通过运行mainmyFunction1依次myFunction2运行。

function myFunction1 () {
  code
}


function myFunction2 () {
  code
}

// Added
function main() {
  myFunction1();
  myFunction2();
}

如果这不是你想要的方向,我很抱歉。

问题 2 的答案:

  • 您想copyfile通过更改 和 的变量来运行filename的函数。sourceFolderNamedestinationFolderId

我可以这样理解。如果我的理解是正确的,那么下面的修改呢?在此修改中,变量被放入一个数组中,该数组以对象作为每个元素。请认为这只是几个答案之一。

示例脚本:

function copyfile(obj) {
  var source_folder = DriveApp.getFoldersByName(obj.sourceFolderName).next();
  var file = source_folder.getFilesByName(obj.filename);
  if (file.hasNext()) {
    var dest_folder = DriveApp.getFolderById(obj.destinationFolderId);
    var srcFile = file.next();
    var newName = srcFile.getName();
    srcFile.makeCopy(newName, dest_folder);
  }
}

// Please run this function.
function main() {
  // Please set this object.
  var object = [
    {filename: "filenames_value1", sourceFolderName: "sourceFolderName_value1", destinationFolderId: "destinationFolderId _value1"},
    {filename: "filenames_value2", sourceFolderName: "sourceFolderName_value2", destinationFolderId: "destinationFolderId _value2"}
  ];
  for (var i = 0; i < object.length; i++) {
    copyfile(object[i]);
  }
}
  • 在运行脚本之前,请设置 的filenamesourceFolderNamedestinationFolderId的对象的变量object
  • 运行脚本时,请运行main.

推荐阅读