如何用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])); }
使用说明:
- 打开你的Google表格,点击「扩展程序」→「Apps脚本」
- 粘贴上述代码,根据实际列位置修改
col1Index和col2Index - 点击运行按钮,授权后即可完成同步
二、公式实现方案(适合仅缺失值、无错位数据的场景)
如果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
相关产品推荐
相关产品推荐

