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

如何用Apps Script或公式在Sheets中补全短列并保留行数据

解决方案:同步两列数据(保留已有正确值)

一、Apps Script 实现方案

以下代码会保留col2中已有的非空值,将它们匹配到col1对应值的行,其余缺失行自动填充col1的内容,且仅更新col2列,不会覆盖其他行数据:

function syncColumns() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const data = sheet.getDataRange().getValues();
  
  // 按需修改列索引:0=A列,1=B列,2=C列...
  const col1Index = 1; // 对应示例中的col1
  const col2Index = 2; // 对应示例中的col2
  
  // 收集col2中的非空有效数据
  const existingCol2Values = data
    .map(row => row[col2Index])
    .filter(val => val.toString().trim() !== "");
  
  // 生成更新后的col2数据
  const updatedCol2 = data.map(row => {
    const col1Val = row[col1Index];
    const matchIndex = existingCol2Values.indexOf(col1Val);
    if (matchIndex !== -1) {
      // 找到匹配值,使用后从集合中移除避免重复
      existingCol2Values.splice(matchIndex, 1);
      return col1Val;
    } else {
      // 无匹配值,直接使用col1的内容
      return col1Val;
    }
  });
  
  // 将结果写回col2列(转换为二维数组格式)
  const targetRange = sheet.getRange(1, col2Index + 1, updatedCol2.length, 1);
  targetRange.setValues(updatedCol2.map(val => [val]));
}

使用说明:

  1. 打开你的Google表格,点击「扩展程序」→「Apps脚本」
  2. 粘贴上述代码,根据实际列位置修改col1Index和col2Index
  3. 点击运行按钮,授权后即可完成同步

二、公式实现方案(适合仅缺失值、无错位数据的场景)

如果col2仅存在缺失值,没有内容错位的情况,可以用辅助列生成结果,确认无误后再复制回原列:

假设ID在A列,col1在B列,col2在C列,在D2单元格输入以下公式并下拉:

=IFERROR(XLOOKUP(B2,$B:$B,$C:$C,""),B2)

或兼容旧版的INDEX+MATCH写法:

=IFERROR(INDEX($C:$C,MATCH(B2,$B:$B,0)),B2)

逻辑说明:

优先从col2中查找与当前行col1值匹配的内容,找不到则直接使用col1的值,生成后可复制辅助列的值,粘贴到col2列替换原数据。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 04:50:26