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

How to search columns for a specific value and move the target row to the top?

我正在尝试在 E 列中搜索以“X”开头的单元格。然后我想将整行移到顶部。

这是我到目前为止使用 IndexOf 创建的内容:

  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var Today = spreadsheet.getSheetByName("Today");

  var TodayList = Today.getRange('E:E').getValues();

  var i = TodayList.indexOf("X", 0);  
  Today.moveRows(Today.getRow(i), 1);

你的情况,下面的修改怎么样?

在Array.prototype.indexOf()的情况下,无法直接从二维数组中检查值。但是,在您的情况下,我认为可以使用索引直接检查第一个字符,如下所示。

修改后的脚本:

function myFunction() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var Today = spreadsheet.getSheetByName("Today");
  var TodayList = Today.getRange('E1:E' + Today.getLastRow()).getValues();
  TodayList.forEach(([e], i) => {
    if (e[0] == "X") {
      var row = i + 1;
      Today.moveRows(Today.getRange(`${row}:${row}`), 1);
    }
  });
}
  • 当此脚本为 运行 时,将从“E”列中检索值。并且,从检索到的值中检查每个单元格值。当单元格值的第一个字符为“X”时,该行移至第1行。

  • 在这个修改中,下面的行被移动到上面的行。如果你想反过来做,请修改如下。

    • 来自

        TodayList.forEach(([e], i) => {
          if (e[0] == "X") {
            var row = i + 1;
            Today.moveRows(Today.getRange(`${row}:${row}`), 1);
          }
        });
      
    •   var len = TodayList.length;
        var offset = 0;
        TodayList.reverse().forEach(([e], i) => {
          if (e[0] == "X") {
            var row = len - i + offset;
            Today.moveRows(Today.getRange(`${row}:${row}`), 1);
            offset++;
          }
        });
      

参考文献:

找到 X 行并移动到顶部

function funko() {
  const ss = SpreadsheetApp.getActive();
  const tsh = ss.getSheetByName("Today");
  const tvs = tsh.getRange(1, 1, tsh.getLastRow(), tsh.getLastColumn()).getValues();
  let a = [];
  let d = 0;
  tvs.forEach((r, i) => {
    if (r[4] == "X") {
      a.push(r)
      tsh.deleteRow(i + 1 - d++);
    }
  });
  tsh.insertRowsBefore(1,a.length)
  a.reverse();
  tsh.getRange(1,1,a.length,a[0].length).setValues(a);
}