如何搜索特定单元格值的列并将目标行移动到顶部?
How to search columns for a specific cell value and move the target row to the top?
使用 google 工作表 appscript,我试图在 E 列中搜索以“XYZ”开头的单元格,然后我想将整行移动到顶部。
这是我目前创建的:
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var Today = spreadsheet.getSheetByName("Today");
var TodayList = Today.getRange('E:E').getValues();
TodayList.forEach(([e], i) => {
if (/^X|^XYZ/.test(e[0])) {
var row = i + 1;
Today.moveRows(Today.getRange(`${row}:${row}`), 6);
}
});
但是,这也会将所有以“X”开头的条目移到顶部。我只想移动以“XYZ”开头的条目。
感谢用户@Tanaike 帮助我走到这一步。
移至顶部
function myfunk() {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName("Sheet0");
const vs = sh.getRange(1, 1, sh.getLastRow(), sh.getLastColumn()).getValues();
let a = [];
let d = 0;
vs.forEach((r, i) => {
if (~r[4].toString().indexOf("xyz") || ~r[4].toString().indexOf("xy")) {
a.push(r);
sh.deleteRow(i + 1 - d++);
}
});
if(a) {
sh.insertRowsBefore(1, a.length);
sh.getRange(1, 1, a.length, a[0].length).setValues(a);
}
}
你也可以这样做
function myfunk() {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName("Sheet0");
const vs = sh.getRange(1, 1, sh.getLastRow(), sh.getLastColumn()).getValues();
let a = [];
let d = 0;
vs.forEach((r, i) => {
if (r[4].toString().match(/xyz|xy/g)) {
a.push(r);
sh.deleteRow(i + 1 - d++);
}
});
if (a) {
sh.insertRowsBefore(1, a.length);
sh.getRange(1, 1, a.length, a[0].length).setValues(a)
}
}
你的情况,下面的修改怎么样?
发件人:
if (/^X|^XYZ/.test(e[0])) {
收件人:
if (/^XYZ/.test(e)) {
或
if (e.slice(0, 3) == "XYZ") {
注:
在您的脚本中,TodayList.forEach(([e], i) => {
的 e
是单元格值。并且,e[0]
是单元格值的顶部字符。这样,/^X|^XYZ/.test(e[0])
总是 false
。这就是你的问题的原因。而且,这是我的错误复制。因此,为了检查单元格值,我将 e[0]
修改为 e
.
例如,如果要检查XYZ
和X
两个首字母的行,可以使用if (/^X|^XYZ/.test(e)) {
参考:
使用 google 工作表 appscript,我试图在 E 列中搜索以“XYZ”开头的单元格,然后我想将整行移动到顶部。
这是我目前创建的:
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var Today = spreadsheet.getSheetByName("Today");
var TodayList = Today.getRange('E:E').getValues();
TodayList.forEach(([e], i) => {
if (/^X|^XYZ/.test(e[0])) {
var row = i + 1;
Today.moveRows(Today.getRange(`${row}:${row}`), 6);
}
});
但是,这也会将所有以“X”开头的条目移到顶部。我只想移动以“XYZ”开头的条目。
感谢用户@Tanaike 帮助我走到这一步。
移至顶部
function myfunk() {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName("Sheet0");
const vs = sh.getRange(1, 1, sh.getLastRow(), sh.getLastColumn()).getValues();
let a = [];
let d = 0;
vs.forEach((r, i) => {
if (~r[4].toString().indexOf("xyz") || ~r[4].toString().indexOf("xy")) {
a.push(r);
sh.deleteRow(i + 1 - d++);
}
});
if(a) {
sh.insertRowsBefore(1, a.length);
sh.getRange(1, 1, a.length, a[0].length).setValues(a);
}
}
你也可以这样做
function myfunk() {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName("Sheet0");
const vs = sh.getRange(1, 1, sh.getLastRow(), sh.getLastColumn()).getValues();
let a = [];
let d = 0;
vs.forEach((r, i) => {
if (r[4].toString().match(/xyz|xy/g)) {
a.push(r);
sh.deleteRow(i + 1 - d++);
}
});
if (a) {
sh.insertRowsBefore(1, a.length);
sh.getRange(1, 1, a.length, a[0].length).setValues(a)
}
}
你的情况,下面的修改怎么样?
发件人:
if (/^X|^XYZ/.test(e[0])) {
收件人:
if (/^XYZ/.test(e)) {
或
if (e.slice(0, 3) == "XYZ") {
注:
在您的脚本中,
TodayList.forEach(([e], i) => {
的e
是单元格值。并且,e[0]
是单元格值的顶部字符。这样,/^X|^XYZ/.test(e[0])
总是false
。这就是你的问题的原因。而且,这是我的错误复制。因此,为了检查单元格值,我将e[0]
修改为e
.例如,如果要检查
XYZ
和X
两个首字母的行,可以使用if (/^X|^XYZ/.test(e)) {