google-apps-script - 关于如何继续使用 Google 表单/表格的指南
问题描述
我正在从 VBA 过渡到 Google Scripting - 有点挣扎。我想要一些指导 - 我希望这个问题不是虚无缥缈。
我有一个表格,用于从一个艺术团体的 140 名成员那里收集数据。表单会更新电子表格,我使用 onFormSubmit(在电子表格中)向用户发送一封回复电子邮件,显示他们已提交的内容。我没有使用内置的电子邮件收集/回复工具——我是手动操作的。尚未部署,但在测试中运行良好。
有时,用户会犯错误,数据需要修复。
鉴于许多用户没有 Google 帐户,因此处理此问题的最佳方法是什么 - 所以没有登录。
非常感谢,罗伊
解决方案
我有一个谷歌表格,我有一个提交到我的电子表格的自定义 HTML 表单。您也许可以使用它并根据需要对其进行返工。
谷歌脚本
function openDialog() {
var html = HtmlService.createHtmlOutputFromFile('form4.html');
SpreadsheetApp.getUi() // Or DocumentApp or SlidesApp or FormApp.
.showModalDialog(html, 'Pop up Form');
}
function doGet(e){
return HtmlService.createHtmlOutputFromFile('index').setTitle('Adding Rows');
}
function doPost(e) {
Logger.log(e);
}
function sendText(data){
var sheet = SpreadsheetApp.getActiveSheet();
sheet.appendRow([data.item_number, data.shop_number, data.escalation, data.Hide1, data.notes, data.problem, data.added_by, data.incoive_date, data.location_order, data.user_working, data.CS_rep, data.shipping, data.department]);
return 'success!';
}
HTML
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<style>
input[type=text], select {
width: 100%;
padding: 12px 20px;
margin: 8px 0;
display: inline-block;
border: 1px solid #ccc;
border-radius: 4px;
box-sizing: border-box;
}
input[type=submit] {
width: 100%;
background-color: #4CAF50;
color: white;
padding: 14px 20px;
margin: 8px 0;
border: none;
border-radius: 4px;
cursor: pointer;
}
input[type=submit]:hover {
background-color: #45a049;
}
div {
border-radius: 5px;
background-color: #f2f2f2;
padding: 20px;
}
#hide {
display: none;
}
</style>
<body>
<form onsubmit="sendText(event)" id="form1" >
<div>
<label>Item Number</label>
<input type="text" name="item_number" placeholder="What is the item Number ie. FBY12345"/>
<label>Shop Number</label>
<input type="text" name="shop_number" placeholder="Shop Order Number"/>
<label>Escalation</label>
<select name="escalation" >
<option value="No Escalation ">No Escalation </option>
<option value="72 Hour Escalation ">72 Hour Escalation </option>
<option value="48 Hour Escalation">48 Hour Escalation</option>
<option value="24 Hour Escalation ">24 Hour Escalation </option>
</select>
<label id="hide">Hide1</label>
<input type="text" name="Hide1" id="hide" />
<label>Notes</label>
<input type="text" name="notes" placeholder="Notes"/>
<label>What is the Problem - Select the best option</label>
<select name="problem">
<option value="issue 1">issue 1</option>
<option value="issue 2">issue</option>
<option value="issue 3">issue</option>
<option value="issue 4">issue</option>
<option value="issue 5">issue</option>
<option value="issue 6">issue</option>
<option value="issue 7">issue</option>
<option value="issue 8">issue</option>
<option value="issue 9">issue</option>
<option value="issue 10">issue</option>
</select>
<label>Your Name</label>
<select name="added_by">
<option value="your name">Find Your Name</option>
<option value="name1">name1</option>
<option value="name2">name2</option>
<option value="name3">name3</option>
<option value="name4">name4</option>
<option value="name5">name5</option>
<option value="name6">name6</option>
<option value="name7">name7</option>
<option value="name8">name8</option>
<option value="name9">name9</option>
<option value="name10">name10</option>
</select>
<label>Date on Invoice</label> <br />
<input type="date" name="incoive_date" placeholder="dd/mm/yyyy"/>
<br /> <br />
<label>Location of order </label>
<input type="text" name="location_order" placeholder="FBY Bin 20"/>
<label>Assign to</label>
<select name="user_working">
<option value="name1">name1</option>
<option value="name2">name2</option>
<option value="name3">name3</option>
<option value="name4">name4</option>
<option value="name5">name5</option>
<option value="name6">name6</option>
<option value="name7">name7</option>
<option value="name8">name8</option>
<option value="name9">name9</option>
<option value="name10">name10</option>
</select>
<label >Customer Service Rep on account</label>
<select name="CS_rep">
<option value="name1">name1</option>
<option value="name2">name2</option>
<option value="name3">name3</option>
<option value="name4">name4</option>
<option value="name5">name5</option>
<option value="name6">name6</option>
<option value="name7">name7</option>
<option value="name8">name8</option>
<option value="name9">name9</option>
<option value="name10">name10</option>
</select>
<label>Shipping Request</label>
<select name="shipping">
<option value="None">None</option>
<option value="UPS">UPS</option>
<option value="USPS">USPS</option>
<option value="Asendia">Asendia</option>
</select>
<label>Department</label>
<select name="department">
<option value="Your Sheet 1">Your Sheet 1</option>
<option value="Your Sheet 2">Your Sheet 2</option>
<option value="Your Sheet 3">Your Sheet 3</option>
<option value="Your Sheet 4">Your Sheet 4</option>
<option value="Your Sheet 5">Your Sheet 5</option>
<option value="Your Sheet 6">Your Sheet 6</option>
<option value="Your Sheet 7">Your Sheet 7</option>
</select>
</div>
<div>
<input type="submit" id="submit-form" value="Submit">
</div>
</form>
<script>
function sendText(e) {
e.preventDefault();
var data = {
item_number: e.target['item_number'].value,
shop_number: e.target['shop_number'].value,
escalation: e.target['escalation'].value,
Hide1: e.target['Hide1'].value,
notes: e.target['notes'].value,
problem: e.target['problem'].value,
added_by: e.target['added_by'].value,
incoive_date: e.target['incoive_date'].value,
location_order: e.target['location_order'].value,
user_working: e.target['user_working'].value,
CS_rep: e.target['CS_rep'].value,
shipping: e.target['shipping'].value,
department: e.target['department'].value
}
google.script.run.withSuccessHandler(function(response) {
console.log(response);
google.script.host.close()
})
.sendText(data);
}
</script>
</body>
</html>
您需要确保工作表上的第一行与 HTML 和 Javascript 中的名称标签(name="department")匹配。
这是我的测试表格,因此您可以了解它是如何工作的 https://docs.google.com/spreadsheets/d/1iWQ40boplJcJmdFg9HNIyOAOrHOjlCRu362LWRdV5y0/edit?usp=sharing
希望这可以帮助
推荐阅读
- ios - Swift:移动后恢复 UIView 中心
- javascript - 如何让服务器模拟用户连接到网站并在 js 中执行一些操作?
- python - 从各个方向随机生成玩家周围的敌人
- java - 使用 SnakeYAML 将包含一些代码的文本转储到 yaml 文档
- uwp - Windows 10 - PlayReady - DRM - ProtectionManager 未在 UWP 应用程序中触发
- r - 合并不同长度(间隙)的时间序列数据
- excel - 根据第一列中的信息复制行
- c++ - 犰狳函数的不同最小二乘误差
- python - 如何计算按两列分组的数据框中的百分比
- asp.net - ASP.NET 在哪里存储除 web.config 之外的程序集引用?