Мне нужно использовать новый объединенный документ для создания PDF, добавить его в определенную папку gdrive, записать URL-адрес PDF на GSheet, а затем удалить объединенный GDoc. - PullRequest
0 голосов
/ 13 июня 2019

Я вижу много других сообщений о "слиянии почты", но ни один из них не проходит через все шаги, которые я пытаюсь достичь ..

  1. Получить все данные строк из Gsheetи объединить его с скопированным Gdoc (из шаблона)
  2. . Использовать недавно слитый Gdoc, чтобы сгенерировать копию в виде PDF
  3. . Возьмите pdf и отправьте его в виде вложения в электронное письмо
  4. Сохранение PDF в Gdrive в определенной папке (имена папок по дате)
  5. Удаление Gdoc, из которого был создан PDF.

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

На данный момент я смог создать объединенный документ и отправить егокак PDF в электронном письме.Я не смог сохранить PDF-копию недавно созданного Gdoc в Gdrive, я только сохраняю версию Gdoc (которую я не хочу, я просто хочу сохранить PDF).

Кроме того, сейчас я сохраняю все в одну папку.В идеале я хотел бы пройтись по родительской папке, посмотреть, существует ли папка (с тем же именем .. которая является датой), а затем создать эту папку, если она не существует.

За последние пару дней я много гуглял и пробовал много вещей, но я не могу по-настоящему хорошо понять эту идею «блоба» с GAS, и я не совсем уверен, если мне НУЖНО использовать некоторыетип аутентификации в скрипте для доступа к сгенерированному PDF-файлу (пока скрипт еще работает).

var rowNum = ss.getDataRange().getLastRow();
var tstamp = sheet.getRange(rowNum, 1, 1, 9).getValue();
var pname = sheet.getRange(rowNum, 2, 1, 9).getValue();
var phone = sheet.getRange(rowNum, 3, 1, 9).getValue();
var email = sheet.getRange(rowNum, 4, 1, 9).getValue();
var address = sheet.getRange(rowNum, 5, 1, 9).getValue();
var city = sheet.getRange(rowNum, 6, 1, 9).getValue();
var state = sheet.getRange(rowNum, 7, 1, 9).getValue();
var zip = sheet.getRange(rowNum, 8, 1, 9).getValue();
var dob = sheet.getRange(rowNum, 9, 9, 9).getValue();
var rdate = sheet.getRange(rowNum, 10, 1, 10).getValue();
var dobf = Utilities.formatDate(dob, "GMT-7", "MM/dd/yyyy");

//Start GOOGLE DOC
var docTemplateId = "1ZtOZ6c****KF86JKHeqpeH****TcLG-3laftW2SEirHA";

//Make A Copy Of The Template To Folder Then Grab ID
var newDoc = DriveApp.getFileById(docTemplateId).makeCopy(pname, destinationFolder);  var documentId = newDoc.getId();

//Rename The Copied Template
var newName = DriveApp.getFileById(documentId).setName("Sales Lead | " + pname);

//Open The Copied Doc
var openNewFile = DocumentApp.openById(documentId);

//Get ID of New Doc
var newId = openNewFile.getId();

//Get ID of New Doc
var body = openNewFile.getBody();

//Get URL of New Doc (used to print out download link on Gsheet upon completion)
var docURL = openNewFile.getUrl();

//Replace the tags on the Gdoc Template
body.replaceText("{{Timestamp}}", tstamp);
body.replaceText("{{Name}}", pname);
body.replaceText("{{Phone Number}}", phone);
body.replaceText("{{Email}}", email);
body.replaceText("{{Street Address}}", address);
body.replaceText("{{City}}", city);
body.replaceText("{{State}}", state);
body.replaceText("{{Zip Code}}", zip);
body.replaceText("{{Date of Birth}}", dobf);
body.replaceText("{{Date Received}}", today);

//Add Users
var addUsers = openNewFile.addEditor('example@gmail.com');
var save = openNewFile.saveAndClose();

//Generate PDF
var pdf = DriveApp.getFileById(newId).getAs('application/pdf').getBytes();
var pdfURL = DriveApp.getFileById(newId).getUrl();

//Create Attachment
var attach = {fileName: 'Sales Lead | ' + pname, content:pdf, mimeType:'application/pdf'};

//Write "Today's" Date
var writeDate = sheet.getRange("J"+rowNum).setValue(today);

//Write Lead "Complete" And Add "Link"
var complete = sheet.getRange("K"+rowNum).setValue("ASBsw Lead Generated");

//Write URL to GSheet
var writeURL = sheet.getRange("L"+rowNum).setValue(pdfURL);

//Send Email
MailApp.sendEmail("company@mycompany.com", "Sales Lead | " + pname + " | " + today, "See Attached PDF", {
  attachments: [attach],
  name: newName
});

Пропущенные шаги

  1. Переберите GDrive Folders (в пределах родительского) и проверьте, существует ли (дочерняя) папка, используя переменную dobf из данных GSheet.Если его не существует, создайте его.Если это так, переместите новый PDF-файл в эту папку.

  2. Этот код в настоящее время сохраняет GDoc в GDrive.Вместо этого я хочу получить PDF-копию GDoc, сохранить ее в указанной папке, а затем удалить GDoc

  3. Распечатать URL-адрес загрузки для вновь созданного PDF-файла в GSheets ... вместопечать URL GDoc (как я сейчас).

PS Я знаю, что в некоторых случаях это не очень "СУХОЙ" код.Так что более опытным программистам не понравится повторение, перечисленное выше.Я начал изучать кодирование около 10 месяцев назад и GAS, около недели назад.Я использовал Дополнение, чтобы достигнуть всего этого прежде, и это внезапно стало ЧЕРНЫМ на прошлой неделе!Это привело к региональному краху автоматизации нашей компании, что ... было не очень хорошо (мягко говоря).Я буквально купил курс Udemy и выучил GAS за пару дней, и пару дней назад мне удалось восстановить и запустить нашу автоматизацию (есть еще 4 аналогичных слияния, которые мы используем).Я извиняюсь перед более опытными программистами, которые могут это читать.

1 Ответ

0 голосов
/ 21 июня 2019

@ Танаике, звучит так, будто ты слишком жесток к себе.Вы определенно привели меня на правильный путь.Это считается приятель.Вот остальные ответы, которые я искал ....

    //Generate PDF from merged GDoc
    var doc = DriveApp.getFileById(newId);
    var pdf = doc.getBlob();
    //Declare the folder to search for within parent
    var folderSearch = parFolder.searchFolders('title contains "'+aDate+'"');
    //If child folder found
    if(folderSearch.hasNext()){
      //Grab that folder
      var folNext = folderSearch.next();
      //Add newly generated pdf
      var addPdf = folNext.createFile(pdf);
    } else {
      //If folder not found, create one
      var createFold = parFolder.createFolder(aDate);
      //Grab the newly created folder
      var folNext = parFolder.getFoldersByName(aDate).next();
      //Add newly generate pdf
      var addPdf = folNext.createFile(pdf);
    }

    //Get url to view pdf
    var pdfURL = "https://drive.google.com/open?&export=download&id=" + addPdf.getId();

    //Trash the merged GDoc
    doc.setTrashed(true);

    //Print the new pdf url to the GSheet
    var writeURL = sheet.getRange("AT"+rowNum).setValue(pdfURL);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...