如何检查数值是否在 Google 表格中的单元格范围内?

问题描述 投票:0回答:3

我想使用谷歌表格的应用程序脚本查找某个值是否在某个范围内。

var sheet = SpreadsheetApp.getActiveSheet();
var rangeBikeNumbers = sheet.getDataRange("A5:A5000");
var values = rangeBikeNumbers.getValues();

如果我有范围

rangeBikeNumbers
,我如何检查数字“42”是否在该范围内。我已经搜索了几个小时了,但 beeb 找不到任何答案。 indexOf 似乎只返回 -1,无论该值是否在范围内。

例如

var indexDataNumber = values.indexOf(42);
最终总是 -1

google-apps-script google-sheets
3个回答
6
投票

我相信你的目标如下。

  • 您想检查
    42
    的值是否存在于
    A5:A5000
    的范围内。

在这种情况下,我想建议使用TextFinder。因为使用TexiFinder时,流程成本较低。 Ref 顺便说一下,

getDataRange
没有参数。从你的剧本来看,我认为你可能想要
var rangeBikeNumbers = sheet.getRange("A5:A5000");

当这反映到您的脚本中时,它会变成如下所示。

修改后的脚本:

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var rangeBikeNumbers = sheet.getRange("A5:A5000");
  var find = rangeBikeNumbers.createTextFinder("42").matchEntireCell(true).findNext();
  if (find) {

    // In this case, the value of 42 is existing in the range.

  } else {

    // In this case, the value of 42 is NOT existing in the range.

  }
}

注:

  • 关于

    var indexDataNumber = values.indexOf(42); for example always ends up being -1
    ,我认为这个问题的原因是因为
    values
    是二维数组。如果你想使用这个,你也可以使用下面的脚本。

      function myFunction() {
        var sheet = SpreadsheetApp.getActiveSheet();
        var rangeBikeNumbers = sheet.getRange("A5:A5000");
        var values = rangeBikeNumbers.getValues();
    
        var find = values.map(([e]) => e).indexOf(42); // of values.flat().indexOf(42);
        if (find > -1) {
          // In this case, the value of 42 is existing in the range.
        } else {
          // In this case, the value of 42 is NOT existing in the range.
        }
      }
    

参考资料:


1
投票

选择您想要搜索的任何活动范围,它将在该范围内搜索种子。 种子当前默认为 42,但您可以更改它。

function findSeedInRange(seed = 42) {
  const ui = SpreadsheetApp.getUi();
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getActiveSheet();
  const rg = sh.getActiveRange();
  const row = rg.getRow();
  const col = rg.getColumn();
  var found = false;
  rg.getValues().forEach((r, i) => {
    r.forEach((c, j) => {
      if (c == seed) {
        let r = sh.getRange(i + row, j + col).getA1Notation();
        ui.alert(`Found ${seed} in ${r}`);
        found = true;
      }
    })
  })
  if(!found) {
    ui.alert(`Did not find ${seed}`);
  } else {
    ui.alert('That is all.')
  }
}

这是另一种方法:

function findSeedInRange() {
  const ui = SpreadsheetApp.getUi();
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getActiveSheet();
  const rg = sh.getActiveRange();
  const resp = ui.prompt('Enter Seed', 'Enter Seed', ui.ButtonSet.OK_CANCEL)
  if (resp.getSelectedButton() == ui.Button.OK) {
    var seed = parseInt(resp.getResponseText());
    const row = rg.getRow();
    const col = rg.getColumn();
    var found = false;
    rg.getValues().forEach((r, i) => {
      r.forEach((c, j) => {
        if (c == seed) {
          let r = sh.getRange(i + row, j + col).getA1Notation();
          ui.alert(`Found ${seed} in ${r}`);
          found = true;
        }
      });
    });
    if (!found) {
      ui.alert(`Did not find ${seed}`);
    } else {
      ui.alert('That is all.')
    }
  } else {
    ui.alert('Operation cancelled.')
  }
}

0
投票

我需要帮助

var ranking= ranking.getRange("A5:A200"); var find = ranked.createTextFinder(runToRow[0][0].valueOf()).matchEntireCell(true).findNext(); showMessageBox(runToRow[0][0].valueOf()); showMessageBox(find?"find":"not find");
runToRow[0][0] 包含我需要检查的昵称是否已出现在排名中,但它总是显示为不存在。

© www.soinside.com 2019 - 2024. All rights reserved.