2016-03-08 5 views
0

Я пытаюсь создать Google Doc на основе данных формы. Я сделал это с другими формами, которые берут Doc и сохраняют их как PDF-файлы. С помощью этого сценария я смог создать новые документы и переименовать файл, но мне нужно переместить их в другую папку. Код, который я использовал для этого с помощью PDF-файлов, работает (в самом низу) без проблем, но я не могу понять, что я делаю неправильно. У меня не было никакой удачи в поиске рабочих решений в Интернете.Скопировать, переименовать и переместить документ

var TEMPLATE_ID = 'template id number'; 
var folder = DriveApp.getFolderById('folder ID number'); 

// When Form Gets submitted 
function onFormSubmit(e) { 
var ss = SpreadsheetApp.getActiveSpreadsheet(); 
sheet = ss.getSheetByName("Goal Tracking"), 
activeSheet = SpreadsheetApp.getActiveSheet(), 
copyFile = DriveApp.getFileById(TEMPLATE_ID).makeCopy(), 
copyId = copyFile.getId(), 
copyDoc = DocumentApp.openById(copyId), 
copyBody = copyDoc.getActiveSection(), 
numberOfColumns = sheet.getLastColumn(), 
activeRowIndex = sheet.getActiveRange().getRowIndex(), 
activeRow = activeSheet.getRange(activeRowIndex, 1, 1, numberOfColumns).getValues(), 
headerRow = activeSheet.getRange(1, 1, 1, numberOfColumns).getValues(), 
columnIndex = 0, 

fileName = "Goals " + activeRow[0][2] + ' ' + activeRow[0][3]+'_'+activeRow[0][5]; 

//Get information from form and set as variables. 

var lastName = e.values[2]; 
var firstName = e.values[3]; 
var programCode = e.values[4]; 
var goal1 = e.values[6]; 
var goal2 = e.values[7]; 
var goal3 = e.values[8]; 

// Replace place holder keys,in our google doc template 

copyBody.replaceText('%First Name%', firstName); 
copyBody.replaceText('%Last Name%', lastName); 
copyBody.replaceText('%Program Code%', programCode); 
copyBody.replaceText('%Goal Statement 1%', goal1); 
copyBody.replaceText('%Goal Statement 2%', goal2); 
copyBody.replaceText('%Goal Statement 3%', goal3); 

// Save and close the temporary document 

copyDoc.saveAndClose(); 
copyDoc.setName(fileName); 

(продолжая)
Вот где проблема

folder.addFile(newFile); 
    } 

Я получаю ошибку в исполнении транскрипта, но я не понимаю, почему я получаю это: «Не удается найти . метод AddFile (Документ)»Я также попытался использовать:

copyDoc.makeCopy(fileName, folder).getId; 

задать имя файла и папку, но это также не

.

Для чего стоит, вот что я использовал для создания PDF-файла, который работает в этом скрипте.

copyDoc.saveAndClose(); 

var pdfFile = DriveApp.createFile(copyFile.getAs("application/pdf")); 
var pdfFile2 = pdfFile.setName(fileName); 

folder.addFile(pdfFile2); 
    copyFile.setTrashed(true); 

Спасибо :)

+0

Используйте 'Logger.log ('folder:' + folder);' statement непосредственно перед оператором 'folder.addFile (newFile);'. В журналах должно отображаться ** папка: папка ** Если папка имеет значение null или undefined, это приведет к ошибке. Единственная другая возможность заключается в том, что что-то не так с параметром 'newFile'. Я не вижу, где устанавливается 'newFile'. –

+0

Logger.log не помогает, за исключением того, что он отображает правильную папку в журнале/расшифровке, поэтому я предполагаю, что это должен быть параметр newFile, о котором вы упомянули. Я попытался установить параметр newFile, создав: var newFile = copyDoc.setName (имя_файла); 'Он устанавливает имя, но не перемещает файл в другую папку. Транскрипт exeution по-прежнему говорит 'Не удается найти метод addFile (document)' – TimW

+0

Я понял это. Пришлось изменить 'copyDoc.setName (имя_файла)' на 'copyFile.setName (имя_файла)'. Я не могу сказать, что я полностью понимаю, почему это так, за исключением того, что я новичок. Спасибо за помощь. – TimW

ответ

0

Этот код перемещает папку и переименовать файл.

function myFunction() { 
    var dstFolderId = "0B1ECfqTCcLE8c09YZUtqTkVwU3c"; 

    var targetFileId = "0B1ECfqTCcLE8SS1PRnJ1cVgxVlk"; 
    var targetFile = DriveApp.getFileById(targetFileId); 

    var newFileName = "HelloWorld.pdf"; 

    // Remove current parent folders 
    var parentFolders = targetFile.getParents(); 
    while(parentFolders.hasNext()) { 
    var parent = parentFolders.next(); 
    parent.removeFile(targetFile); 
    } 

    // Add the target file into the new folder 
    var dstFolder = DriveApp.getFolderById(dstFolderId); 
    dstFolder.addFile(targetFile); 

    // Rename if you want. 
    targetFile.setName(newFileName); 
} 
Смежные вопросы