我对工作表中的脚本编写还很陌生,但我无法使用它。我有两列。在A列中,当我填写B列中的日期旁边的单元格时(只有那时),我希望日期显示在该单元格中并“冻结”。
我尝试了几件事,并从这里得到了启发:Freeze a date, once entered?,但我无法使它起作用。我基本上想要:
在A1
中的单元格中:=IF(ISBLANK(B1), "", TODAY())
但是除非我更改B1,否则今天不应该更新。
我尝试过:
function FreezeDate(String) {
if (String == "") {
return ""
} else {
return new Date()
}
}
我还尝试过将OnEdit(String)
与FreezeDate用作同一正文,但这也会更改我打开工作表时的日期。
答案 0 :(得分:0)
这是您要寻找的吗? 仅当同一行的第二列被编辑并且第一列为空白时,才将日期添加到第一列。因此,第二列的任何进一步编辑都不会更改该行中的日期条目。
function insertDateCol1WhenCol2IsEdited(e){//Use with an installable onEdit trigger
var sheetname='Your Sheet Name'
var rg=e.range;
var sh=rg.getSheet();
if(sh.getName()!=sheetname){return;}
if(sh.getName()==sheetname && rg.columnStart==2 && sh.getRange(rg.rowStart,1).isBlank()){
sh.getRange(rg.rowStart,1).setValue(new Date());
}
}
答案 1 :(得分:0)
感谢您的回复。我认为必须给onEdit(e)一个参数,并且在更改此参数时会触发该参数。我知道事实并非如此。我想我已经知道了:
function onEdit(e) {
var ss = SpreadsheetApp.getActive();
var activeRow = ss.getActiveCell().getRow();
var activeCol = ss.getActiveCell().getColumn();
var activeCellValue = ss.getActiveCell().getValue();
// target cell is in same row as active cell and in column 4 (D)
var targetCell = SpreadsheetApp.getActiveSheet().getRange(activeRow, 4)
// only trigger when change is in column A, when a cell is '-' should not
trigger
if (activeCol == 1 && activeCellValue != '-') {
targetCell.setValue(new Date())
} else {
targetCell.setValue("")
}
}