You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Sheets脚本优化:两列ID匹配排序问题求助

重复执行的ID匹配与整理任务

任务需求

每周需重复执行以下操作:对比同一工作表中Column A与Column E的ID集合(双向匹配)。若某列中的ID在另一列存在匹配项,需将该ID移至匹配项所在行;无匹配项的位置留空。最终需将所有匹配项集中在下方,无匹配项移至上方以便核查。

示例数据(「sample」工作表)

Column AColumn B
399381935375634552
407932943399381935
409046041407932943
448734453409046041
452821913431446526
459673358448734453
463178020448879624
485888087452821913
498826033458359366
498826520459673358
503189964463178020
509536058485888087
509542349497540933
510595029498826033
510595505498826520
510601532502416642
511701201502433066
512763252503189964
515003633506534952
515008102509536058
520097636509542349
510307762
510312887
510320772
510595029
510601532
511701201
512763252
515003633

期望运行结果

Column AColumn B
375634552
431446526
448879624
458359366
497540933
502416642
502433066
506534952
510307762
510312887
510320772
510595505
515008102
520097636
399381935399381935
407932943407932943
409046041409046041
448734453448734453
452821913452821913
459673358459673358
463178020463178020
485888087485888087
498826033498826033
498826520498826520
503189964503189964
509536058509536058
509542349509542349
510595029510595029
510601532510601532
511701201511701201
512763252512763252
515003633515003633

当前问题

使用@Cooper提供的脚本在小数据量下运行正常,但处理大数据量时无法100%完成匹配。按照@TheMaster的建议修改vs部分后,结果仍存在问题:红色标记为未匹配项,橙色和蓝色标记为匹配项却被移至上方,导致重复值。

当前使用的脚本

function sortof() {
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getSheetByName("sample");
  const vs = sh.getRange(2, 1, sh.getLastRow() - 1, sh.getLastColumn()).getValues();
  vs.sort((a, b) => {
    if (a[0] > b[0]) return 1;
    if (b[0] > a[0]) return -1;
    if (a[0] == b[0]) return 0;
  })
  sh.getRange(2, 1, vs.length, vs[0].length).setValues(vs)
  let ob = vs.reduce((a, r, i, A) => {
    let idx = a["col1"].indexOf(r[4]);
    if (~idx) {
      let t = A[idx][4]
      a["col5"][idx] = [r[4]];
      a["col5"][i] = [t];
    } else {
      if (!a["col5"][i]) {
        a["col5"][i] = [r[4]];
      }
    }
    return a;
  }, { col1: vs.map(r => r[0]), col5: [] })
  sh.getRange(2, 5, ob["col5"].length).setValues(ob["col5"]);
  Logger.log(JSON.stringify(ob));
}

内容的提问来源于stack exchange,提问作者KamenRider1989

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 16:34:59