Google App Script更新另一个工作表中的单元格值

时间:2018-05-01 18:10:58

标签: google-apps-script

我有点卡在这个上面。我正在尝试查找相应的行,并在更新另一个电子表格的第一列后更新另一个Google电子表格中的最后一列。

当用户在电子表格X的ColA中选择“Restocked”时,我需要在另一张表(Y)上查找ColB中的ID值。然后我需要访问电子表格Y,找到包含相同ID的行。访问最后一列或列AZ(52)并将单元格值更改为“Restocked”。

这是我到目前为止所拥有的......

.nbsp-break + br + span {
    font-size: 0;
}

1 个答案:

答案 0 :(得分:1)

你很接近,除了一个错误。现在,要测试工作表名称,您必须实际获取工作表。我会采取以下措施来解决当前的问题:

var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getActiveSheet()  // call this for the active sheet

...

您的循环设置值时也出现错误:

for(var i = 0; i<data.length;i++){
  if(data[i][1] == buybackId){ //[1] because column B

    // Get the range of the cell, not the index.
    sheet.getRange((i+1), 1).setValue('Restocked');
  }
}
...

将辅助工作表从ss重命名为其他工作表以避免冲突。

除了此修复程序之外,我还建议您进行一些更改,以使脚本对用户更有效。您可以将onEdit简单触发器与e事件对象一起使用,而不是查找活动单元格。这将允许您的脚本修改单元格,无论活动单元格在何处。

function onEdit(e){

  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var s = ss.getActiveSheet();
  if( s.getName() == "Restock Queue"){

      if ( (e.range.getColumn() == 1.0) && (e.range.getValue() == "Restocked") ){

        var nextCell = e.range.offset(0, 1);
        var buybackId = nextCell.getValue();

        var ss2 = SpreadsheetApp.openById('xxx');

        var sheet = ss2.getSheetByName('NameOfSheetHere'); // Name of sheet

        var data = sheet.getDataRange().getValues();
        for(var i = 0; i<data.length;i++){
          if(data[i][1] == buybackId){ //[1] because column B

            // Get the range of the cell, not the index.
            sheet.getRange((i+1), 52).setValue('Restocked');
          }
        }
      }
  }
}