【问题标题】:Google App Script update cell value in another sheetGoogle App Script 更新另一个工作表中的单元格值
【发布时间】:2018-05-01 18:10:58
【问题描述】:

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

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

这是我目前所拥有的......

function restockComplete(){

var s = SpreadsheetApp.getActiveSpreadsheet();
  if( s.getName() == "Restock Queue"){
var r = s.getActiveCell();
  if ( r.getColumn() == 1 && r.getValue() == "Restocked"){
  var nextCell = r.offset(0, 1);
  var buybackId = nextCell.getValue();

  // Opens SS by its ID
  var ss = SpreadsheetApp.openById("xxxxxxxxxxxxxxxSheetIDHerexxxxxxxxxxx"); 

  var sheet = ss.getSheetByName('NameOfSheetHere'); // Name of sheet
  // var range = sheet.getRange(1,1); // Gets Column 1 Cell 1 value
  //var data = range.getValue(); 

 var data = sheet.getDataRange().getValues();
  //var buyback = sheet.getRange(buybackId).getValue();
  for(var i = 0; i<data.length;i++){
    if(data[i][1] == buybackId){ //[1] because column B
      Logger.log((i+1))
      i.offset(0, 52).setValue('Restocked');
      return i+1;
     }
    }   
   }
  }
};

【问题讨论】:

  • 那么,什么不起作用?我没有看到任何明显的错误。
  • 当我设置触发器在编辑时触发 restockComplete() 没有任何反应,我也可以让任何日志记录工作。
  • 检查执行记录(查看菜单)是否有特定错误。
  • [18-05-01 11:44:16:932 PDT] Starting execution [18-05-01 11:44:16:939 PDT] SpreadsheetApp.getActiveSpreadsheet() [0 seconds] [18-05-01 11:44:17:048 PDT] Spreadsheet.getName() [0.108 seconds] [18-05-01 11:44:17:049 PDT] Execution succeeded [0.11 seconds total runtime]
  • 我发现了错误...稍后发布...

标签: google-apps-script


【解决方案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');
          }
        }
      }
  }
}

【讨论】:

  • 非常感谢布赖恩!我的代表还不够高,但你的解决方案成功了。
猜你喜欢
  • 2020-09-20
  • 1970-01-01
  • 1970-01-01
  • 2015-05-03
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 2020-12-10
  • 1970-01-01
相关资源
最近更新 更多