真的很尴尬,但我测试了使用this example修改后的脚本从电子表格创建数据库:
function loadDatabaseFromSheet() {
var sheet = SpreadsheetApp.openById('my_key').getSheetByName('Payroll');
var data = sheet.getDataRange().getValues();
data = data.splice(0, 9); // **this is where I went wrong**
var keys = data[0]; // **this actually corresponds with a blank row**
var db = ScriptDb.getMyDb();
for (var row = 1; row < data.length; row++) {
var rowData = data[row];
var item = {};
for (var column = 0; column < keys.length; column++) {
item[keys[column]] = rowData[column]; // **null values used to name attributes???**
}
db.save(item);
}
}
所以Javascrit noob应该使用data.splice(0, 9)
而不是data = data.splice(0, 9)
。我想从数组中删除前九行,而不是保留它们。
无论如何,似乎数据库不可修复或可擦除。我无法检索任何记录;每当我尝试调用.next()或.hasNext()时,我都会抛出一个服务器错误,例如来自here的这个脚本:
function deleteAll() {
var db = ScriptDb.getMyDb();
while (true) {
var result = db.query({}); // get everything, up to limit
if (result.getSize() == 0) {
break;
}
while (result.hasNext()) {
db.remove(result.next());
}
}
}
.getSize()确实有效,但是当脚本到达带有.hasNext()的行时,脚本会返回服务器错误,大概是因为有错误的对象。我还尝试了批量删除:
function batchRemove() {
var db = ScriptDb.getMyDb();
var result = db.query({});
db.removeBatch(result, false);
}
我得到了:
无法找到方法removeBatch($ Proxy799,boolean)。 (第114行)
顺便说一句,我可以成功地将新记录保存到数据库,并使用查询检索该记录,但是如果查询返回使用有缺陷的脚本创建的数据库中的任何其他内容,那么当我得到失败时当我尝试使用生成的对象时。
所以我理解我的错误并承诺将来会更加小心,但有谁知道如何“清理”我的数据库以重新开始?
答案 0 :(得分:0)
好的误报我想,我再次尝试,我现在可以清除数据库了。
答案 1 :(得分:0)
我认为这不是误报,当在ScriptDb上运行的函数超过执行时间时,我遇到了类似的行为。当您尝试删除或以某种方式与受执行时错误影响的对象进行交互时,ScriptDb将无响应。似乎所有你能做的就是等待,然后一切都恢复正常。 最佳实践是建立策略以防止与ScriptDb交互的函数达到执行时间限制。