【问题标题】:Changing A Cell Value in a Range Only When It Meets A Condition(Google Sheets App Scripts)仅在满足条件时更改范围内的单元格值(Google 表格应用程序脚本)
【发布时间】:2017-09-17 03:54:07
【问题描述】:

我正在为 Google Sheets 脚本编写一个函数,该函数将检查单元格中的某个值是否等于“Choice Cube”,如果返回 true,则覆盖该单元格。当前功能如下:

function removeCubeRewards(){
  var ss2=SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Rewards")
  var range = ss2.getRange("F2:F20")
  var data = range.getValues()

  var conditional = 0
  for(var i=0;i<data.length; i++){
      if(data[i][0] == "Choice Cube"){
        data[i][0] = "Reward Claimed"
        conditional++
      }
    if(conditional == 6){
      break;
    }
  }
  range.setValues(data)
}

目前的设置方式是 range 将使用 data 中的值覆盖指定范围内的所有单元格。我的问题是,我的 Google 电子表格设置范围内的某些单元格具有这样的 if 条件:

=IF(E11="X","Choice Cube", "LOCKED")

这意味着当我执行 range.setValues(data) 时,这些 IF 条件将被当前显示的任何值覆盖。

我想知道我能做些什么,以便只有在

中匹配的单元格
if(data[i][0] == "Choice Cube")

被覆盖。

【问题讨论】:

  • 也许你应该使用ss2.getRange(i+1,1).setValue('Reward Claimed');,然后根本不要使用 setValues()。

标签: google-apps-script google-sheets


【解决方案1】:

我了解您希望您的脚本不影响具有 =IF 公式(或者可能是任何类型的公式)的单元格。为此,请使用 getFormulasgetValues

  var data = range.getValues();
  var formulas = range.getFormulas(); 
  // ...
      if (data[i][0] == "Choice Cube" && !formulas[i][0]){
        // do something
      }

以上版本不考虑任何带有公式的单元格。

如果您只想排除 =if,请使用例如正则表达式(用于不区分大小写的子字符串匹配)

      if (data[i][0] == "Choice Cube" && !/^=if\(/i.test(formulas[i][0])){

【讨论】:

  • 谢谢!我不知道你可以抓住公式。我修改了我的代码以将当前数据值设置为等于当前公式,它就像一个魅力!
猜你喜欢
  • 2022-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多