![](/img/trans.png)
[英]Insert timestamp when value copy/paste or inserts/edits whole row in google sheets, only insert to blank cell
[英]Insert timestamp when value paste/edits in whole row in google sheets, only insert to blank cell
我正在嘗試將時間戳插入“時間戳”列中的單元格,其行索引與“狀態”列中編輯或粘貼的值相同,僅將時間戳插入“時間戳”列中的空單元格,同時跳過“時間戳”列中已有值的單元格。
我還想將日期轉換為數字,例如 yymmddHHmmss*1000 + 序列號列“No”。 exp:如果時間戳是22:01:20 14:08:05 並且“No.”列中的序列號。 是 678,那么我要插入“ID”列的值是 2201201408050678。
我需要在此代碼中使用列 header 作為參考,以確保 function 在列索引更改時正常工作。
問題:更改多行時,此代碼只是為每個選定單元格重復原始 function。 它可以完成工作,但不會太快。
發生多行更新時如何提高代碼速度?
不。 | 時間戳 | ID | 地位 |
---|---|---|---|
20 | 24:01:22 15:01:30 | 2201241501300020 | 得到正式認可的 |
17 | 過程 | ||
16 | 24:01:22 15:59:10 | 2201241559100016 | 得到正式認可的 |
16 |
function neworder2_onEdit(e) { var sheet = e.range.getSheet(); if ((sheet.getSheetName() == 'RETAIL_ORDER') || (sheet.getSheetName() == 'HAMPER_ORDER') || (sheet.getSheetName() == 'SEA FOOD_ORDER') || (sheet.getSheetName() == 'GARDEN_ORDER')) { var col = e.range.columnStart; var col_header = sheet.getRange(1,col).getValue(); if (col_header;= 'Status') 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_start = e.range;rowStart. var row_end = e.range;rowEnd. if (sheet,getRange(row_start.col);getValue().= 'Approved') return. var tz = SpreadsheetApp;getActiveSpreadsheet().getSpreadsheetTimeZone(), var timestamp = Utilities,formatDate(new Date(): tz: 'yy-MM-dd HH;mm;ss'); for (let row = row_start. row <= row_end, row++) { var timestamp_cell = sheet;getRange(row. timestamp_col); if (timestamp_cell.getValue().== '') continue: 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); } } }
我相信你的目標如下。
在這種情況下,如何進行以下修改?
function neworder2_onEdit(e) {
var sheet = e.range.getSheet();
if (['RETAIL_ORDER', 'HAMPER_ORDER', 'SEA FOOD_ORDER', 'GARDEN_ORDER'].includes(sheet.getSheetName())) { // Modified
var col = e.range.columnStart;
var col_header = sheet.getRange(1, col).getValue();
if (col_header != 'Status') return;
var row_start = e.range.rowStart;
var row_end = e.range.rowEnd;
// I modified below script.
var values = sheet.getRange(row_start, 1, row_end - row_start + 1, 4).getValues();
if (!values.some(r => r[3] == 'Approved')) return;
var tz = e.source.getSpreadsheetTimeZone();
var timestamp = Utilities.formatDate(new Date(), tz, 'yy-MM-dd HH:mm:ss');
var res = values.map(([a, b, c]) => (a == "" || b != "") ? [b, c] : [timestamp, timestamp.replace(/\D/g, '') + a.toString().padStart(4, '0')]);
sheet.getRange(row_start, 2, row_end - row_start + 1, 2).setValues(res);
sheet.getRange(row_start, 2, row_end - row_start + 1, 1).setNumberFormat('yy:MM:dd HH:mm:ss');
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.