【问题标题】:Find row for cell with a value from an array - Google scripts使用数组中的值查找单元格的行 - Google 脚本
【发布时间】:2018-02-28 14:20:31
【问题描述】:

我有一个数据库,我想根据第一列中的值是否属于另一个值数组来查找行索引

假设 A 列和 B 列具有以下值: 答:111、112、113、114、... 乙:112、113

我想在 A 列中找到在 B 列的值数组中具有值的行。

到目前为止,这是我的代码。问题:indexOf 没有检测到值,在 Logger.log 函数中测试时返回 = -1

var ss = SpreadsheetApp.getActiveSpreadsheet(),
  sheet = ss.getActiveSheet(),
  values = sheet.getRange(7,2,5,1).getValues(), //This would be 'Column B'
  rows = sheet.getLastRow();


for (var i = 2; i <= 15; i++){
  Logger.log(values);
  Logger.log(sheet.getRange(7,1).getValue());
  Logger.log(values.indexOf(sheet.getRange(7,1).getValue()));

  if (values.indexOf(sheet.getRange(i,1).getValue()) != -1) { //column 1 because 'Column A'
    Logger.log("Success");

  }
}

使用 Logger.log 函数,我已经能够证明它所提取的值实际上与数组中的某个值匹配......但由于某种原因,它没有检测到它......

出于我的目的,我还尝试了以下方法:

for (var i = 2; i <= rows; i++){
  for (var j = 1; j <= values.length; j++){
    if (values[j] == sheet.getRange(i,1).getValue()){
      Logger.log("values[j] works. Found in cell " + i + ",1 con un valor que busco");
    }
  }
}

但是这里Logger.log函数没有被调用,这意味着if语句没有被满足,代表同样的主要问题。测试单元格中的数组值无法满足数组中的值之一。

提前感谢您的帮助。我真的已经搜索了几个小时,似乎无法找到这个特定问题的答案......

对于它的价值,我尝试这样做的原因是因为我想根据条目数更新数据库(在本例中为 A 列),但只更新某些行(我指出在 B 列)。

【问题讨论】:

  • @I'-'我是正确的...getRange(7,1,5,1) 是从 A7(第 7 行,第 1 列)开始的范围,长 5 行,宽 1 列,即A7:A12 .
  • 我很抱歉造成混乱。该示例经过调整以简化它,但也许我做得不好。最初,“值”来自不同的工作表,所以唯一重要的是它是一个值的来源,应该与我想要找到它的范围不同。很抱歉!
  • 我改变了它以减少混乱......再次抱歉......

标签: arrays google-apps-script


【解决方案1】:

希望我理解正确。如果是这样,只需发表评论,我们就可以编写代码。

您从 indexOf 函数中得到 -1,因为它无法搜索二维数组。 join() 功能可以提供帮助;这会将您的二维数组汇总为一个字符串。您的函数索引可以搜索一维字符串,您的 logger.log 函数应该会为您提供正确的结果。

【讨论】:

  • 哇,非常感谢@JoeL31 这绝对是我所需要的。为了将来的参考和读者,这是解决方案。在代码中,当使用values.indexOf(...) 时,我只是将其切换为values.join().indexOf(...),现在它可以正确检测到单元格!我真的很感谢 JoeL31!
  • 好吧,我现在有一个新问题,@JoeL31 它正在检测字符串的每个部分作为我要查找的内容。假设我正在寻找第 454 号。它会将包含第 4 号、第 45 号和第 54 号的行检测为“正确”,这将违背我相应更新它们的目的。您对如何使其仅在满足整个字符串时才进行检测有任何想法吗?
  • 你能检查一下这个相当肮脏的解决方案是否适合你吗? .join() 在字符串developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 的各个部分之间为您提供逗号,您可以试试indexOf("," + word)。因此,只需在您选择的词前加一个逗号即可。
  • 不得不稍微调整一下,但它有效!问题是,正如您所说,.join() 用逗号分隔各个部分,所以我不得不在.indexOf("," + valuesImLookingFor + ",") 的两侧添加它们......因此,它只有在重新分配值时才有效。由于我的数据的性质,这没有问题,但为了进一步参考,如果有人希望对有时仅可用的值执行此操作,您可以使用简单的ifstatement 检查@987654332 来解决它@ 在运行.indexOf() 之前,当长度仅为1 时,执行一个简单的if (range == values)。谢谢JoeL!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-20
相关资源
最近更新 更多