Не удается передать данные HTML в Code.gs функция

#google-apps-script #google-sheets

Вопрос:

Когда я нажимаю на кнопку выполнить (см. Мой HTML-код), я не могу вставить данные в лист.

Когда я запускаю функцию makeRequest из редактора, я получаю ошибку типа Error: Не удается прочитать свойство «Дата начала» неопределенного.

HTML

 <div class="block form-group">

        <label for="select">Date Range</label>
        <select id="select">
            <option selected id="default" value="default">None</option>
            <option selected id="today" value="today">Today</option>
            <option selected id="yesterday" value="yesterday">Yesterday</option>
            
        </select>

 <div class="form-group">
 <button id="btn">Run it</button>  
 </div>       
</div>
 

Язык JavaScript. HTML

 <script>

  document.getElementById('btn').addEventListener("click",retrieveFacebookData);
  

  function retrieveFacebookData () {

    var facebookAccountData = {};
    //I will be adding more key value pairs in this object later

    facebookAccountData.startDate = document.getElementById('select').value;
    
    
    google.script.run.makeRequest(facebookAccountData);
    

  }

    
</script>

 

Code.gs

 function makeRequest(facebookAccountData) {
 
  console.log(facebookAccountData.startDate);

  const row = [facebookAccountData.startDate,newDate()];
  SpreadsheetApp.getActiveSheet().appendRow(row);

  }
 

Ответ №1:

Точки изменения:

  • From When I run the makeRequest function from the editor, I get an error - TypeError: Cannot read property 'startDate' of undefined. , в этом случае, если вы непосредственно запускаетесь makeRequest с помощью редактора сценариев, аргумент of facebookAccountData не объявляется. При этом возникает такая ошибка. В вашем сценарии требуется запустить Javascript на боковой панели, в диалоговом окне и в веб-приложениях.
  • Что касается вашей стороны HTML и Javasript, я думаю, что есть точка изменения. В вашем Javascript document.getElementById('btn').addEventListener("click",retrieveFacebookData); используется. Но <button class="btn">Run it</button> у него нет удостоверения личности.

Когда вышеуказанные пункты будут отражены в вашем сценарии, он будет выглядеть следующим образом.

Измененный сценарий 1:

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

 function makeRequest(facebookAccountData) {
  facebookAccountData = {startDate: "sample"};

  console.log(facebookAccountData.startDate);
  const row = [facebookAccountData.startDate, "newDate()"];
  SpreadsheetApp.getActiveSheet().appendRow(row);
}
 

Измененный сценарий 2:

Если вы хотите запустить функцию makeRequest со стороны HTML и Javascript, как насчет следующей модификации?

Сторона сценария Google Apps:

 function openDialog() {
  const html = HtmlService.createHtmlOutputFromFile("index");
  SpreadsheetApp.getUi().showModalDialog(html, "sample");
}

function makeRequest(facebookAccountData) {
  console.log(facebookAccountData.startDate);
  const row = [facebookAccountData.startDate, "newDate()"];
  SpreadsheetApp.getActiveSheet().appendRow(row);
}
 

Сторона HTML и Javascript: index.html

 <div class="block form-group"> <label for="select">Date Range</label> <select id="select">
<option selected id="default" value="default">None</option>
<option selected id="today" value="today">Today</option>
<option selected id="yesterday" value="yesterday">Yesterday</option>
</select>
  <div class="form-group"> <button id="btn">Run it</button> </div>
</div>
</div>
<script>
  document.getElementById('btn').addEventListener("click",retrieveFacebookData);

  function retrieveFacebookData () {
    var facebookAccountData = {};
    //I will be adding more key value pairs in this object later
    facebookAccountData.startDate = document.getElementById('select').value;
    google.script.run.makeRequest(facebookAccountData);
  }
</script>
 
  • В этом случае, пожалуйста, запустите openDialog() с помощью редактора сценариев. При этом открывается диалоговое окно, и можно увидеть HTML. Когда вы выбираете его и нажимаете кнопку, makeRequest запускается с facebookAccountData . Таким образом, значение добавляется в электронную таблицу.

Ссылка:

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

1. Это хорошо работает. Я вижу данные, вставленные в мой лист. Последний вопрос, как я могу отобразить переменную в конечную точку: конечная точка const = ‘XXX/insights?date_preset=facebookAccountData.StartDate ? Что-то вроде этого?