Сценарий приложения Google о том, как создать PDF-файл из данных, полученных из формы html его электронной таблицы, и отправить файл PDF по электронной почте. - PullRequest
0 голосов
/ 06 января 2020

Сценарий приложения Google о том, как создать PDF из данных, полученных из формы html вашей электронной таблицы, и отправить файл PDF по электронной почте - я хотел бы создать файл PDF из данных, записанных на рабочем листе, через пользовательская форма html

У меня есть простая форма html с отправкой электронной почты

это индекс html Файл FORM:

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <script>
      function submitForm(form) {
        google.script.run
        .withSuccessHandler(function(value){
          document.getElementById('message').innerHTML = value;
          document.getElementById('name').value = '';
          document.getElementById('email').value = '';
          document.getElementById('comment').value = '';
        }) 
        .submitData(form);
      }
    </script>
    <?!= include("css");?>
  </head>
  <body>
    <h2>Feedback Form</h2>
    <div id="message"></div>

    <br /><input id="button-responder" style="display:none;" type ="button" onclick="submitResponder();" value = "Nuova iscrizione">

    <form id="my-form">
    <br /><input id="name" type="text" name="name" placeholder="Your Name">
    <br /><input id="email" type="email" name="email" placeholder="Your Email">
    <br /><textarea id="comment" rows="10" cols="40" name="comment"></textarea>
    <br /><input id="btn" type="button" value="Submit" onclick="submitForm(this.parentNode),document.getElementById('my-form').style.display='none',submitResponder('button-responder');" />
  </form>
  <?!= include("test-js");?>  
  </body>
</html>

этот скрипт Google с псевдонимом электронной почты:

function doGet(request) {
  return HtmlService.createTemplateFromFile('index')
      .evaluate();//not all caps but it has to match the name of the file and it doesn't - Change to PAGE
}

function include(filename) {
  return HtmlService.createHtmlOutputFromFile(filename)
      .getContent();
}


function submitData(form) {
  
  var subject='New Feedback';
  var body=Utilities.formatString('name: %s <br />Email: %s<br />Comment: %s', form.name,form.email,form.comment);

  var aliases = GmailApp.getAliases()
   Logger.log(aliases); //returns the list of aliases you own
   Logger.log(aliases[0]); //returns the alias located at position 0 of the aliases array

  GmailApp.sendEmail('my-email@my-email.com','From an alias', 'A message from an alias!', {'from': aliases[0],subject: subject,htmlBody: body});

  return Utilities.formatString('name: %s <br />Email: %s<br />Comment: %s', form.name,form.email,form.comment);

  
}


function userClicked(userInfo){
    var url = "https://docs.google.com/spreadsheets/x/xx-xx-xxx_-xxxxxxxxxx-xxxx/edit#gid=x";
    var ss = SpreadsheetApp.openByUrl(url);
    var ws = ss.getSheetByName("Data");
    ws.appendRow([userInfo.name, userInfo.email, userInfo.comment]);
}

Это пользовательский javascript файл ("test- js"):

<script>

function submitResponder() {
  var x = document.getElementById("button-responder");
  var xx = document.getElementById("my-form");
  var xxx = document.getElementById("message");
  if (x.style.display === "none") {
    x.style.display = "block";
    xx.style.display = "none";
    xxx.style.display = "block";
  } else {
    x.style.display = "none";
    xx.style.display = "block";
    xxx.style.display = "none";
  }
}


document.getElementById("btn").addEventListener("click",doStuff);
  
  function doStuff(){
   var userInfo = {}
   userInfo.name = document.getElementById("name").value;
   userInfo.email = document.getElementById("email").value;
   userInfo.comment = document.getElementById("comment").value;
   
   google.script.run.userClicked(userInfo);
   document.getElementById("name").value= "";
   document.getElementById("email").value= "";
   document.getElementById("comment").value= "";   
  
}
</script>

Это просто файл в стиле css ("css"):

<style>

#message {
 color: red;
}

</style>

Я ищу формулу для создания PDF-файла, взяв данные, введенные в формы, и отправив их по электронной почте. Файл должен быть создан в определенной папке / подпапке c на диске. Имя файла должно воспроизводить поле «имя», отредактированное в форме.

Теперь самая важная часть. Я хотел бы, чтобы ссылка на файл PDF отображалась только на странице html, а не в сообщении электронной почты, как показано в примере ниже:

return Utilities.formatString ('name:% s <br /> Email:% s <br /> Comment:% s', form.name, form.email, form.comment)
link to PDF file

Заранее спасибо за помощь!

НОВЫЙ ВОПРОС !!

По отношению к функции, описанной ниже:

function submitData(form) {
  var subject='New Feedback';
  var body=Utilities.formatString('name: %s <br />Email: %s<br />Comment: %s', form.name,form.email,form.comment);

  var folderId = "my-folder-ID"; // Please set the folder ID.  // Added
  var blob = Utilities.newBlob(body, MimeType.HTML, form.name).getAs(MimeType.PDF);  // Added
  var file = DriveApp.getFolderById(folderId).createFile(blob);  // Added

  var aliases = GmailApp.getAliases()
   Logger.log(aliases); //returns the list of aliases you own
   Logger.log(aliases[0]); //returns the alias located at position 0 of the aliases array

  GmailApp.sendEmail('my-email@my-email.com','From an alias', 'A message from an alias!', {'from': aliases[0],subject: subject,htmlBody: body, attachments: [blob]});  // Modified

//  return file.getUrl();  // Modified
  return Utilities.formatString('name: %s <br />Email: %s<br />Comment: %s<br />PDF: %s', form.name,form.email,form.comment,file.getUrl());
}

Я ищу, я пытаюсь вернуться в универсальном c тестовом формате типа "смотрите ваш файл PDF", кликабельный, вместо URL-адреса, в функции:

return Utilities.formatString ('name:% s <br /> Email:% s <br /> Comment:% s <br /> PDF:% s', form.name, form.email, form.comment, file. getUrl ());

I wi sh Я мог бы использовать базовый c документ в качестве шаблона для стиля создания файла PDF, подобного следующему: https://jeffreyeverhart.com/2018/09/17/auto-fill-google-doc-from-google-form-submission/ Имейте в виду, что мое приложение представляет собой пользовательскую форму html, как вы можете видеть из приведенного выше места.

Заранее спасибо за помощь!

1 Ответ

2 голосов
/ 07 января 2020
  • Вы хотите преобразовать var body=Utilities.formatString('name: %s <br />Email: %s<br />Comment: %s', form.name,form.email,form.comment); в файл PDF.
  • Вы хотите поместить созданный файл PDF в указанную c папку на Google Диске.
  • Вы Вы хотите отправить созданный PDF-файл в виде файла вложения.
  • Вы хотите получить URL-адрес созданного PDF-файла и вернуть его на сторону HTML.
  • Ваш вопрос не имеет отношения к электронной таблице.

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

Точки модификации:

  • В вашем случае, я думаю, что ваша цель может быть достигнута путем изменения submitData() в Службах Google Сторона сценария.
  • Когда кнопка нажата, создайте данные PDF из var body=Utilities.formatString('name: %s <br />Email: %s<br />Comment: %s', form.name,form.email,form.comment);. И создайте данные PDF в виде файла.

Модифицированный скрипт:

Пожалуйста, измените submitData() следующим образом. Установите идентификатор папки на var folderId = "###".

function submitData(form) {
  var subject='New Feedback';
  var body=Utilities.formatString('name: %s <br />Email: %s<br />Comment: %s', form.name,form.email,form.comment);

  var folderId = "###"; // Please set the folder ID.  // Added
  var blob = Utilities.newBlob(body, MimeType.HTML, form.name).getAs(MimeType.PDF);  // Added
  var file = DriveApp.getFolderById(folderId).createFile(blob);  // Added

  var aliases = GmailApp.getAliases()
   Logger.log(aliases); //returns the list of aliases you own
   Logger.log(aliases[0]); //returns the alias located at position 0 of the aliases array

  GmailApp.sendEmail('my-email@my-email.com','From an alias', 'A message from an alias!', {'from': aliases[0],subject: subject,htmlBody: body, attachments: [blob]});  // Modified

  return file.getUrl();  // Modified
}

Примечание:

  • Если вы хотите изменить стиль файла PDF, измените name: %s <br />Email: %s<br />Comment: %s из var body=Utilities.formatString('name: %s <br />Email: %s<br />Comment: %s', form.name,form.email,form.comment); , В этом случае вы можете использовать HTML.
  • В зависимости от ситуации может потребоваться предоставить общий доступ к созданному файлу PDF.

Ссылки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...