在Google表格中冻结日期

时间:2019-01-05 13:46:21

标签: google-apps-script google-sheets timestamp

我对工作表中的脚本编写还很陌生,但我无法使用它。我有两列。在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用作同一正文,但这也会更改我打开工作表时的日期。

2 个答案:

答案 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("")
  }
}