多维表格删除重复项,这3种方法够用了

Lv.4 核心创作者
#靠谱AI办公WPS #AI办公夏日分享
多维表格删除重复项,这3种方法够用了
在日常的数据分析场景中,删除重复项是一个非常高频的工作应用场景。如果在传统表格,只需要操作鼠标点表格上方的工具栏中的数据选项→找到重复项→选择删除重复项,即可完成。也可以用动态数组公式 UNIQUE 对有数据重复项的区域,如 C2:C1000,进行快速删除重复项。但是到了多维表格中,删除重复项的操作就没有办法复刻表格中方便快捷的删除重复项功能了。
如何在多维表格应用中对数据去除重复项,并保留唯一值?今天古老师分享三种方法删除重复项。
一、方法一:生成统计表法
这个方法是最为方便的方法,利用 WPS 多维表格自身的统计表来实现,操作步骤如下:
对数据表右键 → 生成统计表
配置这里分类选择 → 工艺名称
统计这里默认即可
后续可以隐藏这个字段
这样就得到分类的唯一值,相当于删除了重复项。
优点:以下数据,基于「重复数据」统计生成,并保持自动更新
缺点:统计表支持的字段只有:公式、单向关联、查找引用、统计四个字段,未来功能扩展不灵活
二、方法二:公式函数方法
公式法还是用到函数 UNIQUE,只是这个函数不能直接用,如果直接用的话,只会显示第 1 条记录,因为在多维表格中是不支持动态数组函数自动溢出的。所以需要换一下方法。
操作步骤:
新建一列字段,命名为编号,字段属性为编号,这个是系统自动编号的一个功能,当增加行的时候,自动按升序编号,如 1、2、3……
提前插入 1000 行,此时编号就自动生成了 1 到 1000 的数字
新建第 2 个公式字段,并录入函数:
公式:UNIQUE 去重公式
IFERROR(INDEX(UNIQUE(重复数据![工艺名称]),[@编号]),"")函数解释:
INDEX(UNIQUE(...), [@编号]):用 INDEX 函数对 UNIQUE 去重结果数组按编号逐行拆分
IFERROR(..., ""):用 IFERROR 屏蔽超出范围的错误值,返回空
三、方法三:WPS 灵犀Claw 法
用公式法的门槛有点高,需要复杂的函数嵌套,此时我们尝试一下用 WPS 灵犀Claw。这里可以用 API 法和脚本法,其中 API 法非常简单,直接说清楚需求即可,缺点是每一次删除都需要耗用算力。
API 操作步骤
打开 WPS 灵犀Claw,录入提示词:
脚本操作步骤
录入提示词:
📌【金山文档 | WPS云文档】 多维表格 - 去重https://www.kdocs.cn/l/cgjgVQ******
删除数据表:工艺路线中工艺名称字段
得到一段 JS 代码,复制这一行代码。新建一个按钮字段,配置为点击按钮 → 执行 AirScript 脚本代码,当用户点击按钮的时候就执行了删除重复项这个动作。
缺点:还需要用户手动配置一下按钮(复制代码 → 按钮 → 执行代码)
优点:本地运行,不耗用算力
完整代码如下:
/**
* 工艺名称去重脚本
*
* 从「工艺路线」表读取工艺名称,去重后写入新建的「工艺名称」数据表
*/
function main() {
var sheets = Application.Sheet.GetSheets();
var sourceSheetId = null;
var targetSheet = null;
var FIELD_NAME = "工艺名称";
var TARGET_SHEET_NAME = "工艺名称";
for (var i = 0; i < sheets.length; i++) {
var s = sheets[i];
if (s.name === "工艺路线") sourceSheetId = s.id;
if (s.name === TARGET_SHEET_NAME) targetSheet = s;
}
if (!sourceSheetId) {
console.log("错误:未找到「工艺路线」数据表");
return;
}
// 读取所有工艺名称
var allValues = [];
var offset = null;
while (true) {
var params = { SheetId: sourceSheetId, Fields: [FIELD_NAME] };
if (offset) params.Offset = offset;
var result = Application.Record.GetRecords(params);
if (!result || !result.records || result.records.length === 0) break;
for (var j = 0; j < result.records.length; j++) {
var val = result.records[j].fields[FIELD_NAME];
if (val !== undefined && val !== null && val !== "") {
allValues.push(val);
}
}
if (result.offset) { offset = result.offset; } else { break; }
}
console.log("原始记录数: " + allValues.length);
// 去重
var uniqueMap = {};
for (var k = 0; k < allValues.length; k++) uniqueMap[allValues[k]] = true;
var uniqueValues = Object.keys(uniqueMap).sort();
console.log("去重后唯一值: " + uniqueValues.length);
// 准备目标表
var targetSheetId = null;
if (targetSheet) {
targetSheetId = targetSheet.id;
console.log("数据表「" + TARGET_SHEET_NAME + "」已存在,复用");
var existing = Application.Record.GetRecords({ SheetId: targetSheetId });
if (existing && existing.records && existing.records.length > 0) {
var ids = existing.records.map(function(item) { return String(item.id); });
Application.Record.DeleteRecords({ SheetId: targetSheetId, RecordIds: ids });
console.log("已清空 " + ids.length + " 条旧记录");
}
} else {
var newSheet = Application.Sheet.CreateSheet({
Name: TARGET_SHEET_NAME,
Views: [{ name: "表格视图", type: "Grid" }],
Fields: [{ name: FIELD_NAME, type: "MultiLineText" }]
});
targetSheetId = newSheet.id;
console.log("已创建数据表「" + TARGET_SHEET_NAME + "」");
}
// 写入
var recordsToCreate = uniqueValues.map(function(v) { return { fields: {} }; });
for (var m = 0; m < uniqueValues.length; m++) {
recordsToCreate[m].fields[FIELD_NAME] = uniqueValues[m];
}
Application.Record.CreateRecords({ SheetId: targetSheetId, Records: recordsToCreate });
console.log("已写入 " + uniqueValues.length + " 条,任务结束");
}
main();四、今日知识点总结
AI 时代的删除重复项:
对于不想折腾的用户可以直接用 API 法,用自然语言说"删除 X 数据表 Y 字段"这样就可以快速的删除重复项
不会写代码也没关系,可以叫 WPS 灵犀Claw 帮你写代码,只需要把代码复制到本地化运行即可