Как насчет этой модификации?
Выпуск вашего скрипта:
doSomething()
из google.script.run.doSomething()
должен быть скриптом Google Apps.
- В вашем скрипте
doSomething()
вставлено в HTML (index.html
), и включен метод использования Google Apps Script. Когда выполняется google.script.run.doSomething()
, doSomething()
не может быть найдено в скрипте Служб Google (code.gs
). При этом возникает такая ошибка. И если doSomething()
выполняется на стороне HTML, также возникает ошибка на Sheets.Spreadsheets.Values.get()
, потому что Sheets.Spreadsheets.Values.get()
- это метод расширенных служб Google с помощью скрипта Google Apps.
- Если вы включите его в скрипт Google Apps (
code.gs
), Javascript, который используется в сценарии doSomething()
, необходимо изменить.
Модифицированный скрипт:
В этой модификации ваш скрипт был разделен на Google Apps Script (code.gs
) и HTML (index.html
). var nameGiven = document.getElementById("meetingTitle").value;
и checkNameCS(name);
используются в index.html
.
Кстати, прежде чем запускать этот скрипт, пожалуйста, включите Sheets API в Advanced Google Services.
Сценарий Google Apps:
code.gs
function strip(str) {
return str.replace(/^\s+|\s+$/g, '');
}
function doSomething (nameGiven) {
var nameExists = false;
var nameVerified = false;
var name = nameGiven.toLowerCase();
name = strip(name);
var spreadsheetId = '###'; //Sheet id entered
var rangeName = 'Sheet1';
var values = Sheets.Spreadsheets.Values.get(spreadsheetId, rangeName).values;
if (values) {
for (var row = 0; row < values.length; row++) {
if (name == values[row][0]) {
nameExists = true;
}
}
}
if (nameExists) {
return "";
}
nameVerified = true;
return name;
}
HTML:
index.html
<!DOCTYPE html>
<html>
<head>
<base target="_top">
<meta charset="UTF-8">
</head>
<body>
<input type="text" id="meetingTitle" value="">
<button onclick="checkName()">Check if available</button>
<p id=nameVerification><i>Click the button above to check availability.</i></p>
<script>
function checkName() {
var toPass = document.getElementById("meetingTitle").value;
prompt("toPass " + toPass);
var nameGiven = document.getElementById("meetingTitle").value; // Added
google.script.run.withSuccessHandler(checkNameCS).doSomething(nameGiven); // Modified
}
function checkNameCS(checkNameSSReturn) {
console.log(checkNameSSReturn)
if (checkNameSSReturn == "") {
document.getElementById('nameVerification').innerHTML = "Already in Use: Please try with another name."
document.getElementById("meetingTitle").value = "";
} else {
document.getElementById("meetingTitle").value = checkNameSSReturn;
document.getElementById('nameVerification').innerHTML = "Meeting name available. Procced."
}
}
</script>
</body>
</html>
Справка: