Замените нулевое значение для одного из вопросов в форме Google с помощью AppsScript

У меня есть требование: мне нужно получить ответ на 2 вопроса в форме Google и отправить подробную информацию по электронной почте.

Вопрос 1 – это обязательное поле и текстовое поле, поэтому проблем нет.

Вопрос 2 — это необязательное поле (не обязательное), в которое можно загружать такие документы, как изображения, PDF, Word Doc или Excel. Текста нет.

Если при ответе на форму я загружаю документ, я получаю электронное письмо с загруженным документом в виде ссылки на диск. Но если я не загружаю какой-либо документ, мой приведенный ниже код не работает с ошибкой ниже: когда ни один документ не загружен, как заменить этот документ каким-либо сообщением типа «документ не загружен»

Ошибка типа: невозможно прочитать свойства неопределенного значения (чтение «длины»)

Кроме того, я хочу знать, если документ не загружен, как я могу заменить ссылку в сообщении электронной почты в формате HTML на что-то вроде «Нет ответа»?

let htmlMsg = thisAnswer + "https://drive.google.com/file/d/" + thisAnswer2

Вот мой текущий код:

function EmailForm() {
 var allQuestions,
 i, 
 itemType, 
 L, 
thisAnswer, 
Question1, 
Question2, 
itemType2, 
thisAnswer2, 
number_of_submissions;
 

number_of_submissions = FormApp.getActiveForm().getResponses().length;

allQuestions = FormApp.getActiveForm().getResponses()[number_of_submissions - 1].getItemResponses();

L = allQuestions.length;
thisSubmissionsAnswers = [];
  
  Question1 = allQuestions[0];
  
  itemType = Question1.getItem().getType();

  if (itemType === FormApp.ItemType.PAGE_BREAK) {

  };

  thisAnswer = Question1.getResponse().toString();//Get the answer
  Logger.log(thisAnswer);


  Question2 = allQuestions[2];//Get this question

  if (Question2 === "") {

    Question2 = "None"
  }
  else {
    itemType2 = Question2.getItem().getType();

    if (itemType2 === FormApp.ItemType.PAGE_BREAK) {

    };

    thisAnswer2 = Question2.getResponse().toString();//Get the answer
    Logger.log(thisAnswer2);

    
    let htmlMsg = thisAnswer + "https://drive.google.com/file/d/" + thisAnswer2

    if (thisAnswer === 'Yes') {
      GmailApp.sendEmail('[email protected]', "Incident Reported", "", { htmlBody: htmlMsg });
    }

  };`

Я новичок в AppScript, поэтому, пожалуйста, помогите.

Отвечает ли это на ваш вопрос? Как заменить пустой/пустой ответ в форме Google из скрипта Apps

Tedinoz 23.02.2024 00:11

Я почти уверен, что StackOverflow не имеет никакого отношения к помощи с домашними заданиями. Но не нужно слишком многого, чтобы проверить, задавал ли кто-нибудь уже (и получил ли на него ответ) тот же вопрос.

Tedinoz 23.02.2024 00:29

@Tedinoz Пост, на который вы ссылаетесь, работает хорошо, если значение представляет собой просто строку, но для меня пользователи загружают файл для ответа на вопрос 2, поэтому он не может распознать ноль, когда пользователи не загружают какой-либо документ. на данный момент происходит сбой, когда пользователи не загружают какой-либо документ. Есть ли способ это исправить. itemType2 = Вопрос2.getItem().getType();

Shrisiva 29.02.2024 18:57

Необходимо ли привязывать сценарий приложения к форме?

Tedinoz 01.03.2024 00:34

я написал сценарий, привязанный к форме, потому что всякий раз, когда появляется новое электронное письмо, необходимо отправлять

Shrisiva 01.03.2024 01:08
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
92
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У вас есть форма Google, и вы хотите отправить электронное письмо при отправке формы.

  • Форма включает необязательный вопрос «Загрузка файла».
  • Если на вопрос «Загрузка файла» НЕТ ответа, вы хотите «отметить» это в своем электронном письме.

Существует два типа триггера onFormSubmit.

  • скрипт, привязанный к форме Google
  • скрипт, привязанный к связанному Google Sheet
  • каждый триггер имеет разные Объекты событий.

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

  • значения возвращаются для ВСЕХ вопросов, включая те, на которые нет ответа.
  • каждое значение возвращается в виде строки независимо от типа вопроса.
  • значением вопроса без ответа будет пустая строка.

Сценарий ОП был написан как сценарий, «привязанный к форме».

Следующий ответ написан в виде сценария, привязанного к связанному Google Sheet и запускаемого onFormSubmit.


function  sendEmail(e) {

  Logger.log(JSON.stringify(e))

  var values = e.values
  Logger.log(values)
  Logger.log("number of questions = "+values.length)
  var timeStamp = values[0]
  var q1 = values[1]
  var q2 = values[2]
  Logger.log("timestamp = "+timeStamp+", question#1 = "+q1+", question#2 = "+q2)

  if (q2 === ""){
    // the question wasn't answered, so set q2 = "Not Answered"
    q2 = "Not Answered"
    Logger.log("q2 wasn't answered. Value = "+q2)
  }
  else{
    // q2 was answered
    Logger.log("q2 was answered; the value = "+q2)
  }

}

ПРИМЕР – ответы формы


ПРИМЕР — Журнал казней

Другие вопросы по теме