我想使用谷歌表格的应用程序脚本查找某个值是否在某个范围内。
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
我相信你的目标如下。
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.
}
}
选择您想要搜索的任何活动范围,它将在该范围内搜索种子。 种子当前默认为 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.')
}
}
我需要帮助
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] 包含我需要检查的昵称是否已出现在排名中,但它总是显示为不存在。