函数 google script 和 javascript 中未捕获的错误
我有这个 html 应用程序,它会查找某个 ID 号,然后填充用户表单中的字段。单击“更新数据”按钮后,我希望它会更新 Google 表格中的特定行值,但我总是得到
Uncaught at updateProfile (fcn:81)
。 “(fcn:81)”最终为
var newDataRow = ws.getRange(myPnum + 1, 1, 1, ws.getLastColumn())。setValues(...
这是我的 javascript 代码:
document.getElementById("updatebtn").addEventListener("click", updateAppProfile);
//---------------------- UPDATE PROFILE ---------------------------------//
function updateAppProfile(){
var upProfile = document.getElementById("profileNum").value;
if(upProfile.length === 6){
var myNewData = {};
myNewData.profnum = document.getElementById("profileNum").value;
myNewData.firstName = document.getElementById("fname").value;
myNewData.middleName = document.getElementById("mname").value;
myNewData.lastName = document.getElementById("lname").value;
myNewData.appsex = document.getElementById("sex").value;
myNewData.civStat = document.getElementById("cstatus").value;
myNewData.citizen = document.getElementById("citizenship").value;
myNewData.birthdate = document.getElementById("bdate").value;
// console.log(myNewData);
// alert("OK");
google.script.run.updateMyProfile(upProfile,myNewData);
}
else{
alert("invalid Profile Number");
}
}
</script>
这是我的 google app 脚本函数:
function updateMyProfile(upProfile,myNewData){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ws = ss.getSheetByName("Results");
var data = ws.getRange(1, 1, ws.getLastRow(), 1).getValues();
var dJoin = data.join().split(",");
var myPnum = dJoin.indexOf(upProfile);
if (myPnum > -1){
var newDataRow = ws.getRange(myPnum + 1, 1, 1, ws.getLastColumn()).setValues([[myNewData.profnum,
myNewData.firstName,
myNewData.middleName,
myNewData.lastName,
myNewData.appsex,
myNewData.civStat,
myNewData.citizen,
myNewData.birthdate
]]);
} else {
Logger.log("unknown data")
}
}
我不知道该怎么做,因为当我在 google 脚本端测试数据时,只有它有效。但是当我使用整个程序时,它最终会出现该错误。我希望有人能帮忙。提前谢谢您。我将非常感谢您的回答。谢谢。
尝试将您的函数包装在 try catch 块中,以便调试并找到精确的错误。
-
[Try / Catch][1]
除此之外:
var newDataRow = = ws.getRange(myPnum + 1, 1, 1, ws.getLastColumn())
并不像实际使用您放入行中的数组中的值那样灵活。因此,最好使用以下语法:
var outputRowArray = [ myNewData.firstName, myNewData.middleName, "etc…" ]
然后使用其长度来确定范围,如下所示:
var newDataRow = ws.getRange( myPnum + 1, 1, 1, outputRowArray.length )
并且您目前在
setValues()
内部有一个数组,但由于您只添加 1 行,因此应使用 1 个数组,即 1 行 = 1 个数组。