有一个错误,我不知道哪里出了问题。我最近开始从YouTube编写代码。因此,我想对应该在哪里进行修复并使代码正常工作提出一些建议。
**code**
function doGet() {
return HtmlService.createHtmlOutputFromFile("inded");
}
function userClicked(data){
var url ="myurl";
var ss = SpreadsheetApp.openByUrl(url);
var ws = ss.getSheetByName([data.shet]);
ws.appendRow([data.nb,data.kun,data.bath,data.tod,data.bon,data.lan,data.sam,data.ha]);
}
我将输入的唯一信息(nb,kun,浴,tod,bon,lan,sam,ha)是数字。 “ shet”是工作表的编号。
**html**
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<h1>กรอกเลข</h1>
<div>
<label>ใบที่</label><input type="text" id="shet">
</div>
<div>
<label>ตัวเลข</label><input type="text" id="nb">
</div>
<div>
<label>คูณ กลับ</label><input type="text" id="kun">
</div>
<div>
<label>เต็ง บาท </label><input type="text" id="bath">
</div>
<div>
<label>โต๊ด</label><input type="text" id="tod">
</div>
<div>
<label>วิ่งบน</label><input type="text" id="bon">
</div>
<div>
<label>วิ่งล่าง</label><input type="text" id="lan">
</div>
<div>
<label>2ใน3</label><input type="text" id="sam">
</div>
<div>
<label>2ใน5</label><input type="text" id="ha">
</div>
<div>
<button id="btn"> บันทึกข้อมูล </button>
</div>
<script>
document.getElementById("btn").addEventListener("click", saveData);
function saveData() {
var data = {}
data.shet = document.getElementById("shet").value;
data.nb = document.getElementById("nb").value;
data.kun = document.getElementById("kun").value;
data.bath = document.getElementById("bath").value;
data.tod = document.getElementById("tod").value;
data.bon = document.getElementById("bon").value;
data.lan = document.getElementById("lan").value;
data.sam = document.getElementById("sam").value;
data.ha = document.getElementById("ha").value;
google.script.run.userClicked(data);
document.getElementById("shet").value="";
document.getElementById("nb").value="";
document.getElementById("kun").value="";
document.getElementById("bath").value="";
document.getElementById("tod").value="";
document.getElementById("bon").value="";
document.getElementById("lan").value="";
document.getElementById("sam").value="";
document.getElementById("ha").value="";
}
</script>
</body>
</html>
答案 0 :(得分:1)
userClicked
应该在单击HTML中的“提交”按钮时运行。在这种情况下,您在HTML data
元素中输入的<input>
将作为参数传递。相反,您尝试直接从脚本编辑器执行userClicked
,因此不会将data
作为参数传递:data
是undefined
,因此错误是重新获得。
如果要从脚本编辑器进行测试,请添加一些默认数据,以防没有传递data
作为参数。像这样:
function userClicked(data) {
if (!data) {
var data = {};
data.shet = 1;
data.nb = "Whatever";
// Rest of `data` properties
}
// Rest of your function
}
但是请记住,应该从您的HTML中调用它。
如果提交的shet
值是您要获取的工作表的名称,则应从[]
中删除var ws = ss.getSheetByName([data.shet]);
(getSheetByName(name)应该会收到String
),即使您不进行任何更改也可能会将数据附加到工作表中。
如果提交的shet
值是与所需工作表的index
相对应的数字,则应将其更改为var ws = ss.getSheets()[data.shet];
(请参见getSheets()),但请考虑到index
是基于0的。
答案 1 :(得分:0)
您当前的解决方案不在寻找工作表编号。
正如您在 .gs 文件中看到的那样,您要输入的名称 工作表:
var ws = ss.getSheetByName([data.shet]);
要指定,请使用getSheets()代替工作表编号:
var ws = ss.getSheets()[data.shet];
重要的是要提到
ss.getSheets()
是所有数组 电子表格文件中的图纸对象。指定第一张纸 (从左到右)编号从0开始,因此ss.getSheets()[0]
。因此,在 您的网络应用程序,如果要与第一工作表进行交互, 需要在第一个字段中通过 0 。如果您想要第二表 然后 1 等。
仅修改 .gs 代码,如下所示:
function doGet() {
return HtmlService.createHtmlOutputFromFile("inded");
}
function userClicked(data){
var url ="myurl";
var ss = SpreadsheetApp.openByUrl(url);
var ws = ss.getSheets()[data.shet];
ws.appendRow([data.nb,data.kun,data.bath,data.tod,data.bon,data.lan,data.sam,data.ha]);
}
保持 inded.html 文件不变。
如果尚未完成此操作,则需要作为网络应用程序部署。
请按照以下步骤操作:
注意,如果您已经部署了Web应用程序,则在进行更改后,您需要执行步骤1,然后更新当前项目。