我正在使用谷歌表格的产品的简单跟踪工具。顶行的产品组件范围为1到13。当所有组件都被检查到达时,该行会自动将R列中的就绪状态更改为就绪。灰色区域用于确定哪些组件不属于某些产品。
这是文件。 https://docs.google.com/spreadsheets/d/18iX6Yp8SgfPaDRJC8L6f4xU1U9Gw8eiBINNFPT9r0Ow/edit?usp=sharing
这项工作正常,但我希望在就绪状态发生变化时出现时间戳。
我找到了一段代码并对其进行了编辑,以满足我的需求。
function onEdit(event) {
var eventRange = event.range;
if (eventRange.getColumn() == 18) { // 18 == column R
var columnARange = SpreadsheetApp.getActiveSheet().getRange(eventRange.getRow(), 19,eventRange.getNumRows(), 19); // 19 == column S
var values = columnARange.getValues();
for (var i = 0; i < values.length; i++) {
values[i][0] = new Date();
}
columnARange.setValues(values);
}
}
问题是因为它是OnEdit函数我必须手动编辑指定的范围,如果我想要显示时间戳。在上面链接的示例中,R列中的“1”生成时间戳,但是一旦所有空框被划掉,则将单元格更改为“就绪”的公式不会。
是否有任何方法可以编辑该功能以查看工作表,如果在R列中找到“就绪”字样,那么在S列中它旁边会显示一个时间戳?
这个论坛已经帮了很多次了,为此我感谢大家的贡献。
更新
我在这里找到了这段代码https://productforums.google.com/forum/#!topic/docs/3Iz9y9OSLMk
function emailSendingTrigger() {
var sheet = SpreadsheetApp.getActiveSheet();
if (sheet.getName() == "Sheet Name") {
var activeCell = sheet.getRange("F21");
if (activeCell.getValue() <500) {
emailBALANCETE();
}
}
}
是否可以更改以便查看范围中的每个单元格并在单元格值更改为“就绪”时触发时间戳?
像
这样的东西For each cell in range
If value "Ready"
Offset.1 select.cell
set.value New Date()
现在我知道这绝对不正确但可能会对我的目标有所了解。
托蒂
答案 0 :(得分:3)
公式和脚本的结合使用意味着它不是那么简单。如果您使用脚本执行所有更改,则只需在脚本的其余部分运行时添加时间戳。
实际上,一种解决方案是使用一个每隔几分钟运行一次的脚本来检查列'R'是否具有值'Ready'而列'S'是否没有时间戳,如果这是真的=添加当前时间戳。
这样做的一个简单但不优雅的方法是:
function timestamp(){
var sheet = SpreadsheetApp.getActiveSheet();
var lastRow = sheet.getLastRow()
for (var i = 1; i <= lastRow; i++){
var readyRange = sheet.getRange([i], 18);
var readyValues = readyRange.getValues();
var timeRange = sheet.getRange([i], 19);
var timeValues = timeRange.getValues();
if (readyValues == 'Ready' && timeValues == ''){ //
timeRange.setValue(new Date());
}
}
}
这将遍历电子表格中的所有行,并检查它们是否需要时间戳。然后,您可以为此设置time trigger,以便每隔一段时间运行一次。
这适用于小型电子表格,但我会在几分钟内把它作为一个解决方案放在一起,所以如果你想打算用几千行,你就需要提高效率。