Получение текста из документов Google

#javascript #google-apps-script

#javascript #google-приложения-скрипт

Вопрос:

Я совершенно новичок в использовании скрипта Google Apps, но не для JavaScript. Мне было интересно, есть ли способ, которым я мог бы получить некоторый текст из документов Google и отправить его по электронной почте, что-то вроде этого. Это неправильный синтаксис, но потерпите меня.

 function createAndSendDocument() {
    var email = "email";
    var subject = "Subject";
    var body = 
        GmailApp.sendEmail(email, subject, body);
}
 

Есть ли способ, которым я мог бы сделать что-то подобное,

 var randnum = random(1,4)
getText(documentname, text from document)
 

Текст в документе будет выглядеть примерно так.

  1. Здравствуйте
  2. Тест
  3. Как ты поживаешь?
  4. Арбуз! Где получение текста из документа основано на randnum, пример: randnum = 1, поэтому тело письма будет «Привет»

Извините за все прыжки в вопросе, но надеюсь, вы сможете ответить на это. Прокомментируйте, если вам нужны какие-либо разъяснения.

Комментарии:

1. P.S. Я делаю это с помощью script.google.com

2. К сожалению, я не могу понять var randnum = random(1,4) getText(documentname, text from document) . Я прошу прощения за это. Могу я спросить вас о деталях вашей текущей проблемы и вашей цели?

Ответ №1:

Я полагаю, что понимаю, что вы ищете.

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

Теперь, чтобы на самом деле захватить текст, это то, что я придумал (пожалуйста, обратите внимание, что это написано на новом движке V8, поэтому вы не сможете использовать это в устаревшем редакторе сценариев):

 const getTextFromDocument = (documentID, randomNumber) => {
  const doc = DocumentApp.openById(documentID);
  const body = doc.getBody();

  // get text from non-list elements
  const find = body.findText('^'   randomNumber);

  if (find) {
    return find.getElement().asText().getText();
  }

  // get text from list elements
  const listItems = body.getListItems();
  for (let lix = 0; lix < listItems.length; lix  ) {
    const listItem = listItems[lix];
    if (lix   1 === randomNumber) {
      return listItem.getText();
    }
  }
}
 

Если скрипт находит информацию в жестко закодированном списке, выполняется первый фрагмент, в противном случае он переходит к следующему фрагменту.

В зависимости от того, как отформатирован текст, возвращаемый текст немного отличается. Если текст отформатирован как фактический список, текст выглядит следующим образом:

 Watermelon!
 

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

 4. Watermelon!
 

(С предыдущим номером.)

При этом отправка электронного письма будет выглядеть примерно так:

 const sendEmail = () => {
  const documentID = '1DljXJtDdZLKr_TcZKuFESo4VrgPEpwXLI3bM3RA0Kjk';
  const randomNumber = Math.floor(Math.random() * 4)   1;
  const text = getTextFromDocument(documentID, randomNumber);

  console.log(randomNumber);
  console.log(text);

  // MailApp.sendEmail({
  //   to: 'someone@gmail.com',
  //   subject: 'Subject Line',
  //   body: text
  // });
}
 

Я выбрал MailApp, а не GmailApp, поскольку MailApp предназначен исключительно для отправки электронных писем, тогда как GmailApp также предлагает методы управления Gmail. Вы можете проверить это здесь, если хотите. Если вы хотите воспользоваться преимуществами более удобного оформления электронной почты, я рекомендую ознакомиться с приведенными здесь руководствами. И если вы хотите узнать больше о DocumentApp, вы можете ознакомиться с этим здесь.