簡體   English   中英

在值復制/粘貼或插入/編輯谷歌表格中的整行時插入時間戳,僅插入空白單元格

[英]Insert timestamp when value copy/paste or inserts/edits whole row in google sheets, only insert to blank cell

  • 我正在嘗試將時間戳插入“時間戳”列中的單元格,該單元格具有與“狀態”列中編輯或粘貼的值相同的行索引。 另外,我只想在“時間戳”列的空單元格中插入時間戳,而跳過單元格已經有時間戳。

  • 問題:當我添加或刪除列時,“時間戳”和“狀態”列的位置發生變化,導致代碼失敗。 我正在尋找一種解決方案,以在“時間戳”和“狀態”列的索引更改時使此代碼正常工作。 我正在嘗試在代碼中使用列 header 而不是列的索引。

我還想將時間戳轉換為數字,如 yymmddHHmmss*1000 + 序列號列“No”。 Exp:時間戳 22:01:20 14:08:05 和序列號列“No.” 是 678,那么我要插入“id”列的值是 2201201408050678。

function insert_timestamp(e) {
  //get range
  var range = e.range;
  var sheet = range.getSheet();
  // get header
  var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues();
  var editcol = headers[0].indexOf("Status") + 1;
  var timestampcol = headers[0].indexOf("Timestamp") + 1;

  if ((range.columnStart == editcol || range.columnEnd == editcol) && sheet.getSheetName() == 'CONTENT.ORDER') {
    var values = range.offset(0, -1, range.rowEnd - range.rowStart + 1, 2).getDisplayValues();
    var rangeList = values.reduce((ar, [b, c], i) => {
      if (b == "" &&  c =="Approved") ar.push("b" + (i + range.rowStart));
      return ar;
    }, []);
    sheet.getRangeList(rangeList).setValue(new Date()).setNumberFormat("yy:MM:dd HH:mm:ss");
  }
}

這是我的嘗試:

function onEdit(e) {
  var sheet = e.range.getSheet();
  if (sheet.getSheetName() != 'CONTENT.ORDER') return;

  var col = e.range.columnStart;
  var col_header = sheet.getRange(1,col).getValue();
  if (col_header != 'Status') return;
  if (e.value != 'Approved') return;

  var headers = sheet.getRange(1,1,1,sheet.getLastColumn()).getValues()[0];
  var timestamp_col = headers.indexOf('Timestamp') + 1;
  var num_col = headers.indexOf('No.') + 1;
  var id_col = headers.indexOf('ID') + 1;

  var row = e.range.rowStart;
  var timestamp_cell = sheet.getRange(row, timestamp_col);
  if (timestamp_cell.getValue() !== '') return;

  var tz = SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetTimeZone();
  var timestamp = Utilities.formatDate(new Date(), tz, 'yy-MM-dd HH:mm:ss');
  timestamp_cell.setValue(timestamp).setNumberFormat('yy:MM:dd HH:mm:ss');

  var num = sheet.getRange(row,num_col).getValue().toString().padStart(4,'0');
  var id = timestamp.replace(/\D/g,'') + num;
  var id_cell = sheet.getRange(row,id_col);
  id_cell.setValue(id);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM