【发布时间】:2021-05-31 19:37:01
【问题描述】:
我在 google 表格中有一个公式,它在第一次编辑相邻单元格时捕获时间戳。见下面的公式
=if(D1,D1,if(A1<>"",NOW(),""))
直到 4 月 27 日左右,该公式都运行良好。发生的事情是每次重新打开工作表时都会重新计算时间戳。奇怪的是,这种重新计算只影响最近的 5 行左右。 我确实有一个实现相同目的的替代脚本,但我想看看我是否可以在这里发现错误。我不确定这个错误是否与how often formulas are recalculated in sheets 有关系。
将不胜感激,谢谢
[编辑] 在此处添加我的代码替代 - 该函数在编辑触发器上运行
// set the timestamp when a change is done on the status columns
function record_timestamp()
{
// get information
var ss = SpreadsheetApp.getActiveSpreadsheet(); // Sheet name
var sheet = ss.getActiveSheet();
var active = ss.getActiveCell();
var row = active.getRow();
var name = sheet.getSheetName();
var column = active.getColumn();
var val = active.getValue();
//Logger.log(row + ' = ' + column + ' , ' + name);
// if marked done or NA
if (
(EDIT_TABS.indexOf(name) != -1) &&
(row > STARTING_ROW) &&
(columnToLetter(column) == COLUMN) // helper.gs
)
{
// put in current timestamp
var now = new Date();
var edit_range = sheet.getRange(row, column + 1);
//Logger.log('edit = ' + edit_range.getA1Notation());
// put in timestamp if blank
if (edit_range.getValue() == "")
{
//Logger.log('setting value');
edit_range.setValue(now);
}
}
}
[编辑 1] 添加另一个被调用的函数 - 这会将列号转换为字母,例如:0 转换为 A,依此类推。同时添加脚本中使用的其他变量。
// related to on edit timestamp record
var COLUMN = 'U';
var EDIT_TABS = ['Daily', 'Weekly', 'Monthly', 'Quarterly', 'Yearly'];
var STARTING_ROW = 1;
function columnToLetter(column)
{
var temp, letter = '';
while (column > 0)
{
temp = (column - 1) % 26;
letter = String.fromCharCode(temp + 65) + letter;
column = (column - temp - 1) / 26;
}
return letter;
}
【问题讨论】:
-
要获取时间戳,您需要使用脚本 - 这是唯一的方法
-
NOW()将在每次更改工作表时重新计算。如果你想保留那个时间戳,我建议你改用你的脚本。 -
我有一个脚本来执行此操作,带有一个 onedit 触发器 - 唯一的问题是,如果一个值被复制粘贴(Ctrl + V 到单元格上)或者如果值从上面的单元格中向下拖动,在这种情况下,脚本不会被触发。这是脚本的唯一问题,如果解决将解决我的问题
-
the only issue is that if a value is copy pasted (Ctrl + V onto the cell) OR if values are dragged down from the above cells, in that case the script does not get fired你在使用onEdit触发器吗?复制单元格或向下拖动单元格等操作会导致onEdit触发器运行。您能否提供您的代码,以便重现此行为? -
将我的代码添加到问题描述中 - 该函数在编辑触发器上运行 - 但正如我所说,如果有向下拖动或复制粘贴,则该函数不会被触发。我需要在脚本上重新做一些事情吗?
标签: google-sheets google-sheets-formula