如何搜索特定单元格值的列并将目标行移动到顶部?

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.

  • 例如,如果要检查XYZX两个首字母的行,可以使用if (/^X|^XYZ/.test(e)) {

参考: