将工作表复制到新电子表格,将单元格值添加到新电子表格名称的末尾

时间:2015-03-04 20:19:34

标签: javascript google-apps-script google-sheets

现在创建副本并将文本添加到文件名的末尾。新文件与原始文件位于同一目录中。我似乎无法将新文件移至" Timesheet Archive"夹。好像我应该只能指定新文件的位置?

var range = sheet.getRange(2,7); 
var data = range.getValue();
var SSID = '1S3Vj5lYOchh0OJ5ZCamsoMCKtcTHeFd72nyxPHJYofk'
var CopyDate = Utilities.formatDate(data , "GMT-8", "yy_MM_dd"); 
var folder = DriveApp.getFoldersByName('Timesheet Archive'); 
var id = DriveApp.getFileById(SSID)
id.makeCopy(SpreadsheetApp.openById(SSID).getName() + "_" + CopyDate); 

我正在转向Google的新表格,而且我在使用此功能时出现问题,该功能在移动之前工作正常:

function exportData() {
  var sourceSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Timesheet");
  var sourceData = sourceSheet.getDataRange().getValues();
  sourceData.splice(0,1);  // Remove header

  var targetSS = SpreadsheetApp.openById("1ZKQw9WnAFmJfC6GP_CYmSbQK_820zIR6oQGnLMc1yBM").getSheetByName("Master Time Sheet");
  var targetRangeTop = targetSS.getLastRow(); // Get # rows currently in target
  targetSS.getRange(targetRangeTop+1,1,sourceData.length,sourceData[0].length).setValues(sourceData);

  var sheet = SpreadsheetApp.getActive().getSheetByName('Timesheet');
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var name = ss.getName();  // Not necessary 

  var sheet = ss.getSheetByName('Timesheet'); // or whatever is the name of the sheet 
  var range = sheet.getRange(2,7); 
  var data = range.getValue();

  var SSID = '1S3Vj5lYOchh0OJ5ZCamsoMCKtcTHeFd72nyxPHJYofk'
  var CopyDate = Utilities.formatDate(data , "GMT-8", "yy_MM_dd"); // Function Date + Format

  var folder = DocsList.getFolder('Timesheet Archive'); //Use this line if you want to get the folder by name
  var backup = DocsList.getFileById(SSID).makeCopy(SpreadsheetApp.openById(SSID).getName() + "_" + CopyDate);

  backup.addToFolder(folder); //This line will move the file
  backup.removeFromFolder(DocsList.getRootFolder()); //This line is needed to remove the File from the Root
}

第一部分将工作表的一部分复制到另一个现有的电子表格,这部分功能正常工作。第二部分复制整个工作表,使用此复制的工作表名称和数据创建一个新文件,并使用位于源工作表上的单元格中的文本(日期)追加文件名的末尾。它应首先将其移动到根文件夹,然后再移动到标题为" Timesheet Archive"的另一个文件夹。

我没有收到任何错误,文件没有出现在根文件夹中,也没有出现在" Timesheet Archive"夹。

1 个答案:

答案 0 :(得分:1)

您正在使用:

DriveApp.getFoldersByName('Timesheet Archive');

获得“文件夹迭代器”

您需要使用:

getFolderById(id)

或者遍历文件夹,(即使可能只有一个!)

while (folders.hasNext()) {
  var folder = folders.next();
  if (folder === 'Timesheet Archive') {
    //Make copy here

  };
}

文件类没有addToFolder()方法。 backup是一个文件。 makeCopy()方法有destination选项。您可以创建备份并同时将其放入目标。

https://developers.google.com/apps-script/reference/drive/file#makeCopy(String,Folder)

使用您的folder变量,即文件夹类型作为目标。