javascript - Google Apps 脚本 - 更新时将时间戳添加到多个单元格
问题描述
我正在尝试更新本教程中的代码,以便在更新单元格时添加时间戳。到目前为止,它适用于第一个单元格,但在将值复制到整个范围时并非所有单元格都有效。
有人可以看看并帮助调整它,以便所有单元格都使用时间戳更新,而不仅仅是第一个?
谢谢!
function onEdit(event)
{
var timezone = "GMT+1";
var timestamp_format = "dd/MM/yyyy HH:mm:ss"; // Timestamp Format.
var updateColName = "Message";
var timeStampColName = "Timestamp";
var sheet = event.source.getSheetByName('Sheet1'); //Name of the sheet where you want to run this script.
var actRng = event.source.getActiveRange();
var editColumn = actRng.getColumn();
var index = actRng.getRowIndex();
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues();
var dateCol = headers[0].indexOf(timeStampColName);
var updateCol = headers[0].indexOf(updateColName); updateCol = updateCol+1;
if (dateCol > -1 && index > 1 && editColumn == updateCol) { // only timestamp if 'Last Updated' header exists, but not in the header row itself!
var cell = sheet.getRange(index, dateCol + 1);
var date = Utilities.formatDate(new Date(), timezone, timestamp_format);
cell.setValue(date);
}
}
解决方案
您正在使用getRange(row, column)检索单个单元格。
当您复制粘贴多个值或下拉单元格时,以下行仅设置范围内的第一个单元格的值:
var cell = sheet.getRange(index, dateCol + 1);
cell.setValue(日期);
使用getRange(row, column, numRows)检索具有多行的范围。如果我们改变它:
sheet.getRange(索引,dateCol + 1,numRows)
它将更改此范围内的所有单元格。
请试试这个。
function onEdit(event) {
var timezone = "GMT+1";
var timestamp_format = "dd/MM/yyyy HH:mm:ss"; // Timestamp Format.
var updateColName = "Message";
var timeStampColName = "Timestamp";
var sheet = event.source.getSheetByName('Sheet1'); //Name of the sheet where you want to run this script.
var actRng = event.range;
var editColumn = actRng.getColumn();
var index = actRng.getRowIndex();
var numRows = actRng.getNumRows();
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues();
var dateCol = headers[0].indexOf(timeStampColName);
var updateCol = headers[0].indexOf(updateColName)+1;
if (dateCol > -1 && index > 1 && editColumn == updateCol) {
var range = sheet.getRange(index, dateCol + 1,numRows);
var date = Utilities.formatDate(new Date(), timezone, timestamp_format);
range.setValue(date);
}
}
参考:
推荐阅读
- python - 一行逻辑测试检查一个列表中的所有项目是否存在于另一个列表中
- upload - Apollo-Server-Express 未收到上传对象
- angular - Angular - Amazon S3 - 在下载时从 AWS 签名 URL 更改文件名
- python - 使用 numpy 库定义变量时修复无效语法 - python
- java - 查询可能不存在的行的正确方法 - Java8
- vba - 如何在 MS Access/VBA 中使用带参数的 SQL 作为组合框行源
- python - Python不断将新数据写入并保存到文件中
- java - 更改架构和索引 MSOffice 和 PDF 文件时的 SOLR 8.0 NoClassDefFoundError
- php - 如何在 Wordpress 上自定义标题(运行 Yoast)
- xcode - 反转鼠标缩放方向 Xcode