我为Google电子表格编写了以下脚本:
function onEdit(e)
{
var doc = SpreadsheetApp.getActiveSpreadsheet();
var sheet = doc.getActiveSheet();
var cell = sheet.getActiveCell();
var column = sheet.getActiveCell().getColumn();
var row = sheet.getActiveCell().getRow();
var dat = sheet.getActiveCell().getValue()+"";
var curDate = Utilities.formatDate(new Date(), "GMT+5:30", "dd/MM/yyyy")
var editor = doc.getViewers();
var temp = e.oldValue;
if(dat=="")
{
dat = "0.0"
}
if((column == 4 || column == 5) && temp != null)
{
cell.setComment("Value changed from ₹"+ (temp) + " to ₹" + dat + " on " + curDate);
}
}
我在D或E列中更改值时使用此代码插入注释。我使用此脚本一个月,代码工作正常。但我最近注意到它有一个问题。
感谢您阅读代码。
答案 0 :(得分:2)
关于第一个问题,我能够使用以下脚本重现问题:
function onEdit(e){
var destination = e.range.offset(0,1);
if(e.value){ // Do this when editing a range having only one cell
destination.setValue(e.value);
} else { // Do this when editing a range having multiple cells
destination.setValues(e.range.getValues());
}
}
应使用Issue Tracker向Google报告。
关于第二个问题,getActiveCell仅返回活动单元格,并且它看起来需要整个范围。值得注意的是,当正在编辑具有多个单元格的范围时,e.oldValue将返回null。
以下是您的脚本的替代版本,可同时将单个单元格编辑用作多个单元格编辑:
function onEdit(e){
var column = e.range.getColumn();
if(column == 4 || column == 5){
if(e.range.getNumRows() == 1 && e.oldValue != undefined){
e.range.setNote("Old value: " + ((e.oldValue)?e.oldValue:"0.0") + "| New value: " + ((e.value)?e.value:"0.0"));
}
if(e.range.getNumRows() > 1){
var values = e.range.getValues();
for(var i = 1;i<=e.range.getNumRows();i++){
e.range.getCell(i,1).setNote("Old value: Not available | New value: " + ((values[i-1][0])?(values[i-1][0]):"0.0"));
}
}
}
}
注意:电子表格服务的官方Google Apps脚本参考中不包含setComment。
相关问题
答案 1 :(得分:0)
我从GAS指南中了解到触发器可能对您有所帮助
使用以下方式为已编辑的范围添加注释:
function onEdit(e){
// Set a comment on the edited cell to indicate when it was changed.
var range = e.range;
range.setNote('Last modified: ' + new Date());
}