Я сделал selectBox, у которого был диапазон значений из столбца Google Sheet. Я также хочу получить целочисленное входное значение от пользователя, а затем записать это значение в определенную ячейку в соответствии с параметром, взятым из selectBox. Ссылка html не показывает поле целочисленного ответа. Можно ли выполнить вышеуказанный план в цикле while? Буду признателен за любые идеи и исправление кода
function doGet() {
var ap = SpreadsheetApp.openByUrl("Gsheet URL here");
var ui = SpreadsheetApp.getUi();
var user = ui.prompt("Put down a number");
var result = result.getSelectedButton();
var sheet = ap.getSheetByName("lv");
var values = sheet.getRange("A2:A10").getValues();
var options = values.map(function(row)
{
#To show show the selected option??
var item = options.getSelecteditem();
if (item === A3)
{
var cell = SpreadsheetApp.getActiveSheet().getActiveCell();
var a1 = cell.getA3Notation();
var val = cell.getValue();
SpreadsheetApp.getUi().alert("Ur value is "+a1+" value is "+val);
}
{
return '<option value = "' + row[0] + '">' + row[0] + '</option>';
});
var html = '<form onSubmit = "handleSubmit(this)"> Type of Cuisine' + options.join('') + '</select></form>';
return HtmlService.createHtmlOutput(html);
}
Класс Range не имеет метода getA3Notation(). Вы должны по крайней мере сохранить свой сценарий перед публикацией здесь, потому что редактор сценариев запускает проверку синтаксиса при сохранении, чтобы вы могли исправить ошибки, которых у вас, кажется, избыток.
@TheWizEd.. Сделал изменение.TNX. options.getselectedItem - показать выбранный вариант из списка
@Cooper .. Должен ли я разделить функции и вместо этого вызвать их?
Если вы используете веб-приложение, то использование пользовательского интерфейса в дожете, скорее всего, не сработает, потому что веб-приложения обычно не открывают электронные таблицы в режиме пользовательского интерфейса... это могут делать только пользователи. Поэтому я предполагаю, что это вызовет ошибку во время выполнения.
Я думаю, что это нормально, просто исправить их
A3 не определен
Какой-то из ваших скриптов работает? Я в этом сомневаюсь. values — это массив значений либо числа, текста, даты. И это возвращаемое значение карты, которая использовала options.getSelecteditem()
. Где определяется getSelecteditem()
? И как вы можете использовать возвращаемое значение функции обратного вызова в функции?
Добавьте минимальный воспроизводимый пример. Это означает, что помимо добавления кода вы должны включить достаточно подробностей, чтобы другие могли воспроизвести проблему, включая, помимо прочего, шаги, которые вы выполняете для запуска скрипта, как вы выяснили, что «ссылка html не показывает целочисленный ответ». box.», если есть, текстовое сообщение об ошибке.
Не знаю, чего вы хотели, поэтому вот полный пример, который я для вас набросал.
Код.gs:
function processInput(obj) {
Logger.log(JSON.stringify(obj));
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName('Sheet0');
const [min,max,locs] = sh.getRange('B1:B3').getValues().flat();
Logger.log('min: %s max: %s locs: %s',min,max,locs)
const lA = locs.split(',');
if (obj.int > max) {
obj.msg = "Too High Try Again";
return obj;
} else if (obj.int < min) {
obj.msg = "To Low Try Again";
return obj;
} else if (!~lA.indexOf(obj.loc)) {
obj.msg = "Invalid Location";
return obj;
} else {
sh.getRange(obj.loc).setValue(obj.int);
obj.msg = "Complete";
return obj;
}
}
Следующая функция Запускает диалог:
function launchInputDialog() {
SpreadsheetApp.getUi().showModelessDialog(HtmlService.createHtmlOutputFromFile('ah1'),"Enter Input");
}
HTML:
<!DOCTYPE html>
<html>
<head>
</head>
<style>input {margin: 2px 5px 2px 0;}</style>
<body>
<form>
<input type = "text" id = "in1" placeholder = "Enter an integer" />
<br /><input type = "text" id = "in2" placeholder = "Enter a location" />
<br /><input type = "button" value = "Process" onClick = "processinput();" />
</form>
<div id = "msg"></div>
<script>
function processinput() {
document.getElementById("msg").innerHTML = '';
let v1 = parseInt(document.getElementById('in1').value);
let v2 = document.getElementById('in2').value;
let obj = {int:v1,loc:v2,msg:''};
google.script.run
.withSuccessHandler(robj => {
console.info(JSON.stringify(robj))
if (robj.msg == "Complete") {
document.getElementById("msg").innerHTML = `Value: ${robj.int} Location: ${robj.loc} Try Again`;
document.getElementById("in1").value = '';
document.getElementById("in2").value = '';
} else {
document.getElementById("msg").innerHTML = robj.msg;
}
})
.processInput(obj);
}
</script>
</body>
</html>
Короткая демонстрация:
<select>
, позволяющий пользователю определить, куда будут загружены данные.ОС:
function doPost(e) {
Logger.log(e.postData.contents);
Logger.log(e.postData.type);
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName("Sheet1");
let data = JSON.parse(e.postData.contents);
sh.getRange(data.loc).setValue(data.id)
}
function sendData(obj) {
const url = ScriptApp.getService().getUrl();
const params = { "contentType": "application/json", "payload": JSON.stringify(obj), "muteHttpExceptions": true, "method": "post", "headers": { "Authorization": "Bearer " + ScriptApp.getOAuthToken() } };
UrlFetchApp.fetch(url, params);
}
function displayError(msg) {
SpreadsheetApp.getUi().alert(msg);
}
function launchMyDialog() {
SpreadsheetApp.getUi().showModelessDialog(HtmlService.createHtmlOutputFromFile('ah1'), 'My Dialog');
}
function getSelectOptions() {
var ss = SpreadsheetApp.getActive();
var sh = ss.getSheetByName('Options');
var rg = sh.getDataRange();
var vA = rg.getValues();
var options = [];
for (var i = 0; i < vA.length; i++) {
options.push(vA[i][0]);
}
return vA;
}
HTML:
<!DOCTYPE html>
<html>
<head>
<base target = "_top">
</head>
<body>
<form>
<input type = "text" id = "txt1" name = "id" placeholder = "Enter Numbers only"/>
<select id = "sel1" name = "loc"></select>
<input type = "button" value = "submit" onClick = "processForm(this.parentNode);" />
</form>
<script>
function processForm(obj) {
console.info(obj.id.value);
if (obj.id.value.match(/[A-Za-z]/)) {
google.script.run.displayError("Invalid Characters Found in id field");
} else {
google.script.run.sendData(obj);
}
}
window.onload = function() {
google.script.run
.withSuccessHandler(updateSelect)
.getSelectOptions();
}
function updateSelect(vA) {
var select = document.getElementById("sel1");
select.options.length = 0;
for(var i=0;i<vA.length;i++) {
select.options[i] = new Option(vA[i],vA[i]);
}
}
</script>
</body>
</html>
Демо:
Спасибо. Это действительно полезный пример. Действительно ценю это ... Просто нужно обновить ячейку с этим значением int в соответствии с опцией пользователя из selectBox. Спасибо.
Я действительно не знаю, о чем вы говорите, когда говорите Just need to work around updating cell with that int value according to user option from a selectBox
1-Пользователь ответит значением int (в поле ввода - например, предоставленное вами) 2-Пользователь также собирается выбрать параметр из SelectBox (который имеет ряд параметров из столбца G-листа). 3-После того, как я хочу манипулировать ответом пользователя на это входное значение в определенных ячейках. Я выберу ячейки в соответствии с опцией пользователя из этого selectBox, у которого были свои параметры из столбца Google Sheet... У меня есть настройка конкретная организация или система для листа. Надеюсь, это объясняет это
Оказалось, что создать такую систему, в которой пользователь может отвечать из внешнего limk (HTML), сложно... Поэтому я обратился к Python\Tkinter GUI и Pygsheets.. Все еще не могу ответить из внешней ссылки (html), но Python лучше с точки зрения разнообразные функции и знание кода
Итак, вы хотите, чтобы <select>
также определял, в какую ячейку записывается значение?
Я добавил выбор, который загружается из содержимого электронной таблицы
Привет @Cooper Большое спасибо за исправление и новый код. Да, я хочу, чтобы <select> (выбранный вариант из электронной таблицы) определял, в какую ячейку записывается входное значение, а затем я могу выполнять некоторые арифметические операции с ячейкой и другими связанными ячейками (в основном добавляя входное значение к текущему значению соответствующие варианты на основе ячеек)
В вашем скрипте есть синтаксические ошибки. Вам не хватает
{
послеfunction(row)
, и вы используете параметры внутри функции, но это возвращаемый массив карты. Так что я не уверен, что ты делаешь. А ещеoptions.getSelecteditem()
, что это? Также вы можете получить номер с помощьюui.prompt(title,prompt, buttons)