![](/img/trans.png)
[英]Insert timestamp when value copy/paste or inserts/edits whole row in Column C in google sheets, only insert to blank cell
[英]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.