创建一个带有两个文本框的 HTML UI 表单。在 Google 个电子表格中使用回复
Create a HTML UI form with two textboxes. Use responses in Google Spreadsheets
需要的东西可能很简单,但我不知道该怎么做。
我需要一个带有 google 脚本的电子表格,该脚本提示用户在 html 表单中输入三个值。 (名字,姓氏,汽车)
这些值需要在脚本的其余部分可以访问。
UI 服务已弃用,所以我想了解如何使用 HTML 服务
这是我目前所掌握的。
我创建了一个简单的 Google 脚本:
function openForm() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('HTML');
var firstNameRange = sheet.getRange('A1');
var lastNameRange = sheet.getRange('A2');
var carRange = sheet.getRange('A3');
var html = HtmlService.createHtmlOutputFromFile('index')
.setSandboxMode(HtmlService.SandboxMode.IFRAME);
SpreadsheetApp.getUi() // Or DocumentApp or FormApp.
.showModalDialog(html, 'Fill in this form');
//----I want the responses of the form in 'index.html' to be used here.
//The openById thing is what is not working...
var firstname = html.openById('firstname');
var lastname = html.openById('lastname');
var car = html.openById('car');
firstNameRange.setValue(firstname);
lastNameRange.setValue(lastname);
carRange.setValue(car);
}
我还创建了一个名为 'index.html' 的 HTML 文件:
<div>
<form> First name:<br>
<input type="text" id="firstname" name="firstname">
<br> Last name:<br>
<input type="text" id="lastname" name="lastname">
<br> Car:<br>
<select id="car" name="Car">
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="fiat">Fiat</option>
<option value="audi">Audi</option>
</select>
<br><input type="submit" value="Submit" id="submitbotton" onclick="google.script.host.close()"> </form>
</div>
Here is an example of the script in a spreadsheet so far.
我现在一直在使用多个提示,但使用 HTML 形式的答案将对下一个 google 脚本项目有很大帮助。
如有任何帮助,我们将不胜感激!
建议:
创建新的 google 表单而不是在 index.html 中创建表单,再次将 google 电子表格中的回复收集到 HTML 中。
帮助可以是 https://developers.google.com/apps-script/guides/html/templates:
function getData() {
// var s = SpreadsheetApp.getActive().getId();
return SpreadsheetApp
.openById(id)
.getActiveSheet()
.getDataRange()
.getValues();
};
index.html
<? var data = getData(); ?>
<table>
<? for (var i = 0; i < data.length; i++) { ?>
<tr>
<? for (var j = 0; j < data[i].length; j++) { ?>
<td><?= data[i][j] ?></td>
<? } ?>
</tr>
<? } ?>
</table>
这一行:
var sheet = ss.getSheetByName('HTML');
不工作。
应该是:
var sheet = ss.getSheetByName('HTML-responses');
您缺少打开对话框所需的 return
语句:
SpreadsheetApp.getUi() // Or DocumentApp or FormApp.
.showModalDialog(html, 'Fill in this form');
return;
您的 onclick
活动有误,目前是:
<input type="submit" value="Submit" id="submitbutton" onclick="google.script.host.close()">
需要 google.script.run
API 调用:
你的 HTML 应该是这样的:
<div>
<form> First name:<br>
<input type="text" id="firstname" name="firstname">
<br> Last name:<br>
<input type="text" id="lastname" name="lastname">
<br> Car:<br>
<select id="car" name="Car">
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="fiat">Fiat</option>
<option value="audi">Audi</option>
</select>
<br><input type="submit" value="Submit" id="submitbutton" onmouseup="writeFormData()">
</form>
</div>
<script>
window.writeFormData = function() {
console.log('writeFormData ran!');
var firstNameIs = document.getElementById("firstname").value;
var lastNameIs = document.getElementById("lastname").value;
var carIs = document.getElementById("car").value;
google.script.run
.withSuccessHandler(dataWasWritten)
.processForm(firstNameIs, lastNameIs, carIs);
};
window.dataWasWritten = function() {
console.log('dataWasWritten ran');
};
</script>
.gs
代码应该是这样的:
function onOpen() {
//Runs when spreadsheet opens
openForm();
};
function openForm() {
Logger.log('openForm ran!');
var html = HtmlService.createHtmlOutputFromFile('index')
.setSandboxMode(HtmlService.SandboxMode.IFRAME);
SpreadsheetApp.getUi() // Or DocumentApp or FormApp.
.showModalDialog(html, 'Fill in this form');
return;
};
function processForm(argFirstName, argLastName, argCar) {
Logger.log('argFirstName: ' + argFirstName);
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('HTML-responses');
var firstNameRange = sheet.getRange('A1');
var lastNameRange = sheet.getRange('A2');
var carRange = sheet.getRange('A3');
firstNameRange.setValue(argFirstName);
lastNameRange.setValue(argLastName);
carRange.setValue(argCar);
};
需要的东西可能很简单,但我不知道该怎么做。
我需要一个带有 google 脚本的电子表格,该脚本提示用户在 html 表单中输入三个值。 (名字,姓氏,汽车) 这些值需要在脚本的其余部分可以访问。
UI 服务已弃用,所以我想了解如何使用 HTML 服务
这是我目前所掌握的。 我创建了一个简单的 Google 脚本:
function openForm() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('HTML');
var firstNameRange = sheet.getRange('A1');
var lastNameRange = sheet.getRange('A2');
var carRange = sheet.getRange('A3');
var html = HtmlService.createHtmlOutputFromFile('index')
.setSandboxMode(HtmlService.SandboxMode.IFRAME);
SpreadsheetApp.getUi() // Or DocumentApp or FormApp.
.showModalDialog(html, 'Fill in this form');
//----I want the responses of the form in 'index.html' to be used here.
//The openById thing is what is not working...
var firstname = html.openById('firstname');
var lastname = html.openById('lastname');
var car = html.openById('car');
firstNameRange.setValue(firstname);
lastNameRange.setValue(lastname);
carRange.setValue(car);
}
我还创建了一个名为 'index.html' 的 HTML 文件:
<div>
<form> First name:<br>
<input type="text" id="firstname" name="firstname">
<br> Last name:<br>
<input type="text" id="lastname" name="lastname">
<br> Car:<br>
<select id="car" name="Car">
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="fiat">Fiat</option>
<option value="audi">Audi</option>
</select>
<br><input type="submit" value="Submit" id="submitbotton" onclick="google.script.host.close()"> </form>
</div>
Here is an example of the script in a spreadsheet so far. 我现在一直在使用多个提示,但使用 HTML 形式的答案将对下一个 google 脚本项目有很大帮助。
如有任何帮助,我们将不胜感激!
建议: 创建新的 google 表单而不是在 index.html 中创建表单,再次将 google 电子表格中的回复收集到 HTML 中。 帮助可以是 https://developers.google.com/apps-script/guides/html/templates:
function getData() {
// var s = SpreadsheetApp.getActive().getId();
return SpreadsheetApp
.openById(id)
.getActiveSheet()
.getDataRange()
.getValues();
};
index.html
<? var data = getData(); ?>
<table>
<? for (var i = 0; i < data.length; i++) { ?>
<tr>
<? for (var j = 0; j < data[i].length; j++) { ?>
<td><?= data[i][j] ?></td>
<? } ?>
</tr>
<? } ?>
</table>
这一行:
var sheet = ss.getSheetByName('HTML');
不工作。
应该是:
var sheet = ss.getSheetByName('HTML-responses');
您缺少打开对话框所需的 return
语句:
SpreadsheetApp.getUi() // Or DocumentApp or FormApp.
.showModalDialog(html, 'Fill in this form');
return;
您的 onclick
活动有误,目前是:
<input type="submit" value="Submit" id="submitbutton" onclick="google.script.host.close()">
需要 google.script.run
API 调用:
你的 HTML 应该是这样的:
<div>
<form> First name:<br>
<input type="text" id="firstname" name="firstname">
<br> Last name:<br>
<input type="text" id="lastname" name="lastname">
<br> Car:<br>
<select id="car" name="Car">
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="fiat">Fiat</option>
<option value="audi">Audi</option>
</select>
<br><input type="submit" value="Submit" id="submitbutton" onmouseup="writeFormData()">
</form>
</div>
<script>
window.writeFormData = function() {
console.log('writeFormData ran!');
var firstNameIs = document.getElementById("firstname").value;
var lastNameIs = document.getElementById("lastname").value;
var carIs = document.getElementById("car").value;
google.script.run
.withSuccessHandler(dataWasWritten)
.processForm(firstNameIs, lastNameIs, carIs);
};
window.dataWasWritten = function() {
console.log('dataWasWritten ran');
};
</script>
.gs
代码应该是这样的:
function onOpen() {
//Runs when spreadsheet opens
openForm();
};
function openForm() {
Logger.log('openForm ran!');
var html = HtmlService.createHtmlOutputFromFile('index')
.setSandboxMode(HtmlService.SandboxMode.IFRAME);
SpreadsheetApp.getUi() // Or DocumentApp or FormApp.
.showModalDialog(html, 'Fill in this form');
return;
};
function processForm(argFirstName, argLastName, argCar) {
Logger.log('argFirstName: ' + argFirstName);
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('HTML-responses');
var firstNameRange = sheet.getRange('A1');
var lastNameRange = sheet.getRange('A2');
var carRange = sheet.getRange('A3');
firstNameRange.setValue(argFirstName);
lastNameRange.setValue(argLastName);
carRange.setValue(argCar);
};