#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
с помощью редактора сценариев, аргумент offacebookAccountData
не объявляется. При этом возникает такая ошибка. В вашем сценарии требуется запустить 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 ? Что-то вроде этого?