非常に恥ずかしいことですが、この例のスクリプトを変更して、スプレッドシートからデータベースを作成することをテストしました。
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);
}
}
したがって、Javascritnoobは。data.splice(0, 9)
ではなく使用する必要がありdata = data.splice(0, 9)
ます。配列から最初の9行を削除し、保持したくありませんでした。
とにかく、データベースは修復も消去もできないのは現状のようです。レコードを取得できません。.next()または.hasNext()を呼び出そうとすると、サーバーエラーがスローされます。たとえば、次のスクリプトを使用します。
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行目)
ちなみに、新しいレコードをデータベースに正常に保存し、クエリでそのレコードを取得することはできますが、クエリが欠陥のあるスクリプトで作成されたデータベース内の他の何かを返す場合、それは私が試してみると失敗するときです結果のオブジェクトを操作します。
だから私は自分のエラーを理解し、将来もっと注意を払うことを約束しますが、データベースを「クリーンアップ」して再開する方法を誰かが知っていますか?