如果列具有特定值,则使用谷歌脚本更改同一行中单元格的值

时间:2014-11-03 14:29:33

标签: google-apps-script google-sheets

我正在使用谷歌表格的产品的简单跟踪工具。顶行的产品组件范围为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()

现在我知道这绝对不正确但可能会对我的目标有所了解。

托蒂

1 个答案:

答案 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,以便每隔一段时间运行一次。

这适用于小型电子表格,但我会在几分钟内把它作为一个解决方案放在一起,所以如果你想打算用几千行,你就需要提高效率。