【问题标题】:Set Value Based on Another Cell's Value in the Same Row根据同一行中另一个单元格的值设置值
【发布时间】:2019-04-15 15:14:58
【问题描述】:

刚开始编写 Google 脚本。发现了类似的问题,但没有一个我可以解决的问题。当同一行的“G”列中的单元格被编辑为“y”时,我希望将工作表“main”上给定行的“H”列中的单元格的值设置为“Y”。我不能为此使用公式,因为我需要在“G”中的值被删除后保留“H”中的值。我正在使用的当前代码如下。不返回错误,但也不更改工作表中的任何内容。它没有写成 onEdit,因为我使用单独的 onEdit 函数来调用多个函数(包括正确时的这个)。

function myFunction3() {

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("main");
var range = sheet.getActiveCell();
var columnNumberToWatch = 7; // column A = 1, B = 2, etc.
var valueToWatch = "y";
var right = range.offset(0,1);

if (range.getColumn() == columnNumberToWatch && range.getValue() == 
valueToWatch) { 
sheet.getRange(right).setValue('Y');
}
}

【问题讨论】:

  • 在写入工作表之前在 if 块内执行此 var right = range.offset(0,1);
  • @ra89fi 尝试了一些变化,试图弄清楚如何正确添加它。你能给些建议么?这是我目前拥有的,返回语法错误。 if (range.getColumn() == columnNumberToWatch && range.getValue() == valueToWatch && var right = range.offset(0,1);)
  • 在下面查看我的代码

标签: google-apps-script google-sheets


【解决方案1】:

试试这个 -

function myFunction3() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('main');
  var range = sheet.getActiveCell();
  var columnNumberToWatch = 7; // column A = 1, B = 2, etc.
  var valueToWatch = 'y';

  if (range.getColumn() == columnNumberToWatch && range.getValue() == valueToWatch) {
    range.offset(0, 1).setValue('Y');
  }
}

【讨论】:

【解决方案2】:

在您的描述中,您似乎在说如果 G 列中的值为“y”,那么您希望使“H”列中的值等于“Y”。 range = activeCell(),列号为 7,valueToWatch = "y"。

因此您需要做的是获取范围内的值(例如活动单元格)并将其旁边的单元格中的值更改为“Y”。

因此,您的条件语句需要从您正在测试的内容开始(例如 range.getValue(),如果该值在 columnToWatch 中,则将其旁边的列中的值设置为“Y”。

您需要做的第一件事是获取活动单元格的列号。

尝试 range.getColumn() 并将其分配给一个新变量(即 activeColumnNumber)

然后用 range.getValue() 开始你的 if 语句。

如果 (range.getValue == 'y' && activeColumnNumber == 7) 等等,它应该可以工作。

【讨论】: