Google apps script 如何使用google脚本将电子表格复制到google drive中的特定文件夹中

Google apps script 如何使用google脚本将电子表格复制到google drive中的特定文件夹中,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我有以下脚本,当运行结束时,我想将该电子表格复制到一个名为+日期的特定文件夹中,例如: 我有一个名为“审计”的电子表格,当一些特定的脚本在最后运行时,我想将电子表格复制到root/Audit/Historic文件夹中,然后复制到googledriver或googledocs中 注意:root是google驱动程序或google文档的顶级文件夹 脚本: function ShellCopyValues(){ var sheets = ['sheet1','sheet2','sh

我有以下脚本,当运行结束时,我想将该电子表格复制到一个名为+日期的特定文件夹中,例如:

我有一个名为“审计”的电子表格,当一些特定的脚本在最后运行时,我想将电子表格复制到root/Audit/Historic文件夹中,然后复制到googledriver或googledocs中

注意:root是google驱动程序或google文档的顶级文件夹

脚本:

  function ShellCopyValues(){
        var sheets = ['sheet1','sheet2','sheet3','sheet4','sheet4'];
        for (var s in sheets){
        CopyRows(sheets[s]);
      }
  }

  function CopyRows(uname) {
   var source = SpreadsheetApp.openById('XXXXXX');
   var sourcesheet = source.getSheetByName(uname);

   var target = SpreadsheetApp.openById('YYYYYY');
   var targetsheet = target.getSheetByName(uname);
   var targetrange = targetsheet.getRange(2, 1, sourcesheet.getLastRow(), sourcesheet.getLastColumn());
   var rangeValues = sourcesheet.getRange(2, 1, sourcesheet.getLastRow(), sourcesheet.getLastColumn()).getValues();
   targetrange.setValues(rangeValues);

   }
在这个脚本的末尾,我想复制一份

如果有人知道我该怎么做,我将不胜感激

编辑:08/07/2013(固定)
  • 脚本将使用此格式(文件名+日期)制作副本
  • 脚本将把文件保存到一个文件夹中。(不会出现在根目录“我的驱动程序”中)


使用
DriveApp
。。。使用
getFileById(id)
获取文件,然后使用
makeCopy(name)

然后

使用
DocsList
。。。使用
getFileById(id)
获取文件,然后使用
addToFolder(文件夹)


我认为在
DriveApp
中没有
addtofolder
,而
DocsList
DriveApp
中的文件对象也不相同。。。使用
getFileById(id)
获取文件,然后使用
makeCopy(name)

然后

使用
DocsList
。。。使用
getFileById(id)
获取文件,然后使用
addToFolder(文件夹)

我认为在
DriveApp
中没有
addtofolder
,而
DocsList
DriveApp
中的文件对象也不相同,尤其是

尝试:

特别使用,以及

尝试:



您好,您有任何示例脚本来执行此操作吗?William the ShellCopyValues​​()+CopyRows打开工作表一次,但脚本CopyRows会为每个工作表运行,这样脚本会创建同一工作表的4个副本。。1表格1更新后,其他表格2更新后,其他表格3和表格4I了解该程序应打开两个电子表格,迭代表格以复制和创建备份。在每次迭代的代码中,要复制工作表、打开两个电子表格并生成备份,您可能需要对该部分进行一点更改。我已修复该问题,请再次查看编辑。我将代码移到脚本SheelCopyValue()的末尾。-William,我发现一个问题,脚本未将电子表格移动到文件夹Historical,正在从根目录名为“我的驱动程序”共享到Historical。您好,您有任何示例脚本来执行此操作吗?William the ShellCopyValue​​()+CopyRows打开工作表一次,但脚本CopyRows会为每个工作表运行,这样脚本会创建同一工作表的4个副本。。1表格1更新后,其他表格2更新后,其他表格3和表格4I了解该程序应打开两个电子表格,迭代表格以复制和创建备份。在每次迭代的代码中,要复制工作表、打开两个电子表格并生成备份,您可能需要对该部分进行一点更改。我已修复该问题,请再次查看编辑。我移动了脚本SheelCopyValue()末尾的代码。-William,我发现一个问题,脚本未移动到电子表格文件夹Historical,正在从根目录名为“我的驱动程序”共享到Historical。请查看我的编辑?谢谢此外,我不知道如何告诉脚本我要将该副本保存在哪里(文件夹)。脚本正在根目录中创建副本,但我现在只想保存一个问题。。。当脚本运行create 4 copy时,我只想在所有工作表更新后创建副本。我修复了该问题,请再次查看编辑。我移动了脚本SheelCopyValue()结尾的代码。如果,我发现一个问题,脚本没有将电子表格移动到文件夹Historic,而是从根目录名为“我的驱动程序”共享到Historic<这意味着所有副本都在根目录“我的驱动程序”中,并在历史文件夹中共享。请查看我的编辑?谢谢此外,我不知道如何告诉脚本我要将该副本保存在哪里(文件夹)。脚本正在根目录中创建副本,但我现在只想保存一个问题。。。当脚本运行create 4 copy时,我只想在所有工作表更新后创建副本。我修复了该问题,请再次查看编辑。我移动了脚本SheelCopyValue()结尾的代码。如果,我发现一个问题,脚本没有将电子表格移动到文件夹Historic,而是从根目录名为“我的驱动程序”共享到Historic
这意味着所有副本都在根“My Driver”中,并表示在历史文件夹中共享。在方法ShellCopyValues中,打开电子表格只应发生一次​​()并将所选表格('sheet1'、'sheet2'、'Sheet3'…)作为参数传递给方法CopyRows(sourcesheet、targetsheet)。实际上,在方法ShellCopyValues中打开电子表格只应发生一次​​()并将所选图纸('sheet1'、'sheet2'、'Sheet3'…)作为参数传递给方法CopyRows(sourcesheet、targetsheet)。
//This part make a copy of the spreadsheet
var SSID = 'XXXXXX'
var CopyDate = Utilities.formatDate(new Date(), "GMT-3", "ddMMyyyyHHmm"); // Function Date + Format
var folder = DocsList.getFolder('Historic'); //Use this line if you want to get the folder by name
//--> var folder = DocsList.getFileById('YYYYY'); //Use this line if you want to get the folder by ID
var backup = DocsList.getFileById(SSID).makeCopy(SpreadsheetApp.openById(SSID).getName() + "_" + CopyDate);
backup.addToFolder(folder); //This line will be move the folder
backup.removeFromFolder(DocsList.getRootFolder()); //This line is needed to remove the Filde from the Root
   ...
   var folder = DocsList.getFolder('Historic');
   var backup = DocsList.getFileById(SSID).makeCopy(SpreadsheetApp.openById(SSID).getName() + "_" + CopyDate);
   var deleteFromFolder = backup.getParents()[0];
   backup.addToFolder(folder);
   backup.removeFromFolder(deleteFromFolder);
   ...