我有一个日常工作日志,供我修理的电器的各个客户使用 . 此工作日志采用具有多个工作表的Google电子表格的形式,其中每个工作表都分配给特定的常规客户 . 我通过基于Google Apps脚本的手机,通过基本网络应用程序记录当前日期,工作设备和工作完成情况 .
在我的开发环境中,我使用模态对话框“测试”弹出框,它完美地工作 . 我从下拉列表中选择客户,在文本字段中输入信息并单击“保存”,相关客户的工作表将填充数据 . 但是,当我发布或部署应用程序时,尽管从列表中选择了任何客户,但只会填充最左侧的工作表(sheet1) . 不知何故,通过URL访问“服务器”电子表格会使“google.script.run”调用失效 . 有没有人有任何想法如何解决这个问题 . 在此提前感谢您提供任何帮助 .
**Index.html**
<!DOCTYPE html>
<html lang='en'>
<head>
<base target="_top">
<meta charset="utf-8">
<title></title>
<meta name="viewport" content="width=device-width, initial-scale=1.0,
maximum-scale=1.0">
</head>
<body>
<form>
<h1>Daily Work Record</h1>
<p><label class="question" for="customer">Customer: </label>
<select name="customer" id="customer" onchange
="customerSelect(this)"/>
<option></option>
<option value="1">Customer A</option>
<option value="2">Customer B</option>
<option value="3">Customer C</option>
</select></p>
<p><label class="question" for="equipment">Equipment: </label>
<select name="equipment" id="equipment">
<option>Toaster</option>
<option>Mixer</option>
<option>Blender</option>
<option>Slicer</option>
<option>Other</option>
</select></p>
<p><label class="question" for="work">Work Done: </label>
<input type="text" name="work" id="work" placeholder="enter work carried
out" size="25" /></p>
<input type="button" id="button" value="Save"
onclick="google.script.run
.withSuccessHandler(DataSaved)
.itemAdd(this.parentNode)"/>
</form>
<script>
function customerSelect(menu){
if(menu.value=='1'){
google.script.run.sheetOne();
} else if(menu.value=='2'){
google.script.run.sheetTwo();
} else if(menu.value=='3'){
google.script.run.sheetThree();
} else return false;
}
</script>
<div id="Message"></div>
<script>
function DataSaved(){
document.getElementById('Message').innerHTML="<span class='save'>Data
Saved</span>";
return;
}
</script>
</body>
**Code.gs**
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('Test').addItem('PopUp', 'show').addToUi();
}
function show() {
var html = HtmlService.createHtmlOutputFromFile('Index')
.setSandboxMode(HtmlService.SandboxMode.IFRAME)
.setHeight(800)
.setWidth(800)
SpreadsheetApp.getUi().showModalDialog(html, 'Enter Job Details');
}
function doGet() {
var html = HtmlService.createHtmlOutputFromFile('Index')
.setSandboxMode(HtmlService.SandboxMode.IFRAME);
return html;
}
function sheetOne() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Customer A");
sheet.getRange("A1").activate();//used instead of setActiveSheet
return true;
}
function sheetTwo() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Customer B");
sheet.getRange("A1").activate();
return true;
}
function sheetThree() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Customer C");
sheet.getRange("A1").activate();
return true;
}
function itemAdd(form) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet();
sheet.appendRow([Utilities.formatDate(new Date(), "GMT", "yyyy-MM-dd"),
form.equipment, form.work]);
return true;
}
1 回答
我会使用不同的策略 . 我不会在SELECT标签中需要
customerSelect()
函数 .您也不需要任何功能:
sheetOne
sheetTwo
sheetThree
更改
itemAdd()
函数以按名称获取工作表选项卡