ScriptDB を利用して情報を保存し、onLoad()
それを読み返すことができますonEdit()
。編集があるたびに、再度呼び出しonLoad()
てセル値のデータベースを再度更新するか、データベース内の関連情報を単に置き換えることができます。
notonEdit()
Resources>All Your Triggers メニューの FromSpreadsheet>onEdit() イベントにトリガーを追加します。
コードは次のとおりです。
function onLoad() {
var db = ScriptDb.getMyDb()
//get array of the sheet range that has something in it
var sheet = SpreadsheetApp.getActiveSheet()
var lastrow = sheet.getLastRow()
var lastcolumn = sheet.getLastColumn()
var subsheet = sheet.getRange(1, 1, lastrow, lastcolumn)
var values = subsheet.getValues()
//write that array into the ScriptDB of the project
for (i=1; i<=lastrow; i++){
for (j=1; j<=lastcolumn; j++){
var object = {type: "onEditfudge", row: i, column:j, value:values[i-1][j-1]}
db.save(object)
Logger.log(object) //log it to check its correct..
}
}
}
function BeforeonEdit(){
db = ScriptDb.getMyDb()
var newrange = SpreadsheetApp.getActiveRange()
//get 'old value'
var dbentry = db.query({type: "onEditfudge", row:newrange.getRow(),column:newrange.getColumn()}).next()
var oldvalue = dbentry.value
//overwrite the 'old value' with the 'new value' for the next onEdit() event
dbentry.value = newrange.getValue()
db.save(dbentry)
//return the old value to do something with in the calling function
return oldvalue
}
function notonEdit(){
//show new and old value
Browser.msgBox("Old value is: " + BeforeonEdit() + ". New Value is: " + SpreadsheetApp.getActiveRange().getValue())
}