Как получить данные из приглашения или диалогового окна и поместить их в Документ Google с помощью скрипта Google Web App - PullRequest
0 голосов
/ 19 февраля 2019

Я хочу создать Google Doc с помощью Google Script и назвать новый документ из пользовательского ввода.

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

Ближайший код, который я смог найти: записать данные в листе Google с помощью приложения для веб-скриптов

Но это для Google Sheets, а не для Документов.

Мой код, который до сих пор работает для создания документа:

Code.gs

function createNewLandscapeSong() {
  var doc = DocumentApp.create('Rename with song title');
  var title = "replace with song title"
  var url = doc.getUrl();
  var body = doc.getBody();
  var paragraph = body.insertParagraph(0, "");
  var text1 = paragraph.appendText("© replace with writer(s)");
  text1.setFontSize(8);
  var rowsData = [['PUT FIRST VERSE/CHORUS HERE.', 'PUT SECOND VERSE/NEXT CHORUS/BRIDGE/ETC HERE.']];
  var style = {};
  body.insertParagraph(0, title)
  .setHeading(DocumentApp.ParagraphHeading.HEADING3);
  table = body.appendTable(rowsData);
  style[DocumentApp.Attribute.BORDER_WIDTH] = 0;
  table.setAttributes(style);

  return {
   url: url,
   title: title
  };
}

Index.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    <input type="button" value="Create New Song Doc"
      onclick="google.script.run
          .withSuccessHandler(openNewDoc)
          .createNewLandscapeSong()" />
    <script>
       function openNewDoc(results){
           window.open(results.url, '_blank').focus();
       }
    </script>
  </body>
</html>
  </body>
</html>

Итак, я знаю, что где-то в этом коде мне нужно добавитькод, который предлагает пользователю ввести название песни, а затем мне нужно установить его в качестве переменной и вставить его в качестве имени документа и названия песни (мои «var doc» и «var title»).Я просто не знаю, как это сделать.

Пересмотренный код, основанный на вводе Сэнди:

Code.gs

function doGet() {
  return HtmlService
      .createTemplateFromFile('Index')
      .evaluate();
}

function createNewLandscapeSong(objArgs) {
  var docName = objArgs.docName;
  var songTitle = objArgs.songTitle;
  var songWriters = objArgs.songWriters;

  Logger.log('title: ' + title)

  var doc = DocumentApp.create(docName);

  var url = doc.getUrl();
  var body = doc.getBody();
  var paragraph = body.insertParagraph(0, "");
  var text = paragraph.appendText(songWriters);
  text.setFontSize(8);
  var rowsData = [['PUT FIRST VERSE/CHORUS HERE.', 'PUT SECOND     VERSE/NEXT CHORUS/BRIDGE/ETC HERE.']];
  var style = {};
  body.insertParagraph(0, songTitle)
  .setHeading(DocumentApp.ParagraphHeading.HEADING3);
  table = body.appendTable(rowsData);
  style[DocumentApp.Attribute.BORDER_WIDTH] = 0;
  table.setAttributes(style);

  return {
   url: url,
   title: title
  };
}

    Index.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    Fill in fields below to name Google Lyric Document and add the song title and writers.<br><br>
    <input id="idNewDocName" type="text" placeholder="Google Doc Name"><br><br>
    <input id="idNewSongTitle" type="text" placeholder="Song Title"><br><br>
    <input id="idNewSongWriters" type="text" placeholder="Song Writers"><br><br>

    <button onclick="saveUserInput()">Create New Lyric Doc</button>

    <script>
      window.saveUserInput = function() {
      var docName = document.getElementById('idNewDocName').value;
      var songTitle = document.getElementById('idNewSongTitle').value;
      var songWriters = document.getElementById('idNewSongWriters').value;

    console.log('songTitle: ' + songTitle)

    google.script.run
      .withSuccessHandler(openNewDoc)
      .createNewLandscapeSong({docName:docName,songTitle:songTitle, songWriters: songWriters})

      }

       function openNewDoc(results){
           window.open(results.url, '_blank').focus();
       }
    </script>
  </body>
</html>

1 Ответ

0 голосов
/ 19 февраля 2019

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

Для отладки кода вБраузер Chrome, нажмите клавишу F12, чтобы открыть инструменты разработчика.После нажатия кнопки вы должны увидеть значение названия песни в журнале консоли.Передайте данные в код сервера как объект.После запуска кода в редакторе кода откройте меню «Вид» и выберите «Журналы», чтобы просмотреть распечатанный журнал.

Здесь показан один из способов получения пользовательского ввода из веб-приложения и его передачи на серверный код вСценарий приложения.

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>

    <input id="idNewDocName" type="text" placeholder="New Doc Name">
    <input id="idNewSongTitle" type="text" placeholder="New Song Title">

    <button onclick="saveUserInput()">Create New Song Doc</button>

    <script>
      window.saveUserInput = function() {
        var docName = document.getElementById('idNewDocName').value;
        var songTitle = document.getElementById('idNewSongTitle').value;

        console.log('songTitle: ' + songTitle)

        google.script.run
          .withSuccessHandler(openNewDoc)
          .createNewLandscapeSong({docName:docName,songTitle:songTitle})

      }

       function openNewDoc(results){
           window.open(results.url, '_blank').focus();
       }
    </script>
  </body>
</html>

Code.gs

function createNewLandscapeSong(objArgs) {
  var docName = objArgs.docName;
  var title = objArgs.songTitle;

  Logger.log('title: ' + title)

  var doc = DocumentApp.create(docName);

  var url = doc.getUrl();
  var body = doc.getBody();
  var paragraph = body.insertParagraph(0, "");
  var text1 = paragraph.appendText("© replace with writer(s)");
  text1.setFontSize(8);
  var rowsData = [['PUT FIRST VERSE/CHORUS HERE.', 'PUT SECOND VERSE/NEXT CHORUS/BRIDGE/ETC HERE.']];
  var style = {};
  body.insertParagraph(0, title)
  .setHeading(DocumentApp.ParagraphHeading.HEADING3);
  table = body.appendTable(rowsData);
  style[DocumentApp.Attribute.BORDER_WIDTH] = 0;
  table.setAttributes(style);

  return {
   url: url,
   title: title
  };
}
...