当我尝试删除脚本检查的单元格的内容时,脚本将粘贴新的时间戳。我只需要在写入新值时使用脚本,而不必在删除值时使用脚本。
function onEdit() {
var COLUMNTOCHECK = 1;
var DATETIMELOCATION = [0,1];
var SHEETNAME = 'STOCKOUT'
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
if( sheet.getSheetName() == SHEETNAME ) {
var selectedCell = ss.getActiveCell();
if( selectedCell.getColumn() == COLUMNTOCHECK) {
var balance = sheet.getRange("i1").getValue();
var dateTimeCell = selectedCell.offset(DATETIMELOCATION[0],DATETIMELOCATION[1]);
dateTimeCell.setValue([balance]);
}
}
这是一个例子:
当我更新列A和C并尝试删除A,B,C,I时,脚本将运行并将新值粘贴到列B Google Spreadsheet Example
答案 0 :(得分:1)
此修改如何?从单元格中删除值时,e
的事件对象onEdit(e)
具有e.value.oldValue
。使用此脚本,您的脚本可以编写如下。
function onEdit(e) { // Modified
if (!e.value.oldValue) { // Added
var COLUMNTOCHECK = 1;
var DATETIMELOCATION = [0,1];
var SHEETNAME = 'STOCKOUT'
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
if( sheet.getSheetName() == SHEETNAME ) {
var selectedCell = ss.getActiveCell();
if( selectedCell.getColumn() == COLUMNTOCHECK) {
var balance = sheet.getRange("i1").getValue();
var dateTimeCell = selectedCell.offset(DATETIMELOCATION[0],DATETIMELOCATION[1]);
dateTimeCell.setValue([balance]);
}
}
}
}
如果我误解了您的问题,而这不是您想要的结果,我深表歉意。
我认为编辑单元格有3种情况。
将值放入空白单元格。
e.value
包含在事件对象中。
oldValue
未包含在e.value
中。e.oldValue
未包含在事件对象中。单元格的现有值被编辑。
e.value
和e.oldValue
包含在事件对象中。
oldValue
未包含在e.value
中。该值已从单元格中删除。
e.value
和e.oldValue
包含在事件对象中。
oldValue
包含在e.value
中。我认为模式3可以用于OP的情况。
答案 1 :(得分:0)
尝试一下:
function onEdit(e) {
if( e.range.getSheet().getName()=='STOCKOUT' && e.range.columnStart==1) {
e.range.offset(0,1).setValue((e.value)?e.range.getSheet().getRange("I1").getValue():'');
}else{
return;
}
}