求适用于Power Automate的Excel Office Script:合并相同ID行
合并相同ID行的Power Automate专用Office Script
以下是可直接在Power Automate中调用的Office Script,用于合并Excel中ID相同的行,将分散在多行的非空值整合到同一行:
function main(workbook: ExcelScript.Workbook) { // 获取当前活动工作表(需指定固定表可改为workbook.getWorksheet("Sheet1")) const sheet = workbook.getActiveWorksheet(); const range = sheet.getUsedRange(); if (!range) { console.log("工作表无数据"); return; } const values = range.getValues(); if (values.length <= 1) { console.log("数据行数不足,无需处理"); return; } // 存储每个ID对应的合并后数据 const mergedData: {[key: string]: (string|number|boolean|undefined)[]} = {}; // 遍历数据行(跳过表头) for (let i = 1; i < values.length; i++) { const row = values[i]; const id = row[0].toString(); if (!mergedData[id]) { mergedData[id] = new Array(values[0].length).fill(undefined); mergedData[id][0] = row[0]; } // 填充非空值到合并数据 for (let j = 1; j < row.length; j++) { if (row[j] !== "" && row[j] !== undefined) { mergedData[id][j] = row[j]; } } } // 清空原数据行(保留表头) sheet.getRange(2, 1, values.length - 1, values[0].length).clear(ExcelScript.ClearApplyTo.contents); // 写入合并后的数据 const mergedRows = Object.values(mergedData); if (mergedRows.length > 0) { sheet.getRange(2, 1, mergedRows.length, mergedRows[0].length).setValues(mergedRows); } }
关键说明:
- 若需指定固定工作表,将
const sheet = workbook.getActiveWorksheet();替换为const sheet = workbook.getWorksheet("你的工作表名称"); - 同一ID下的列会保留所有非空值,若同一ID同一列存在多个非空值,脚本会保留最后出现的那个值
- 执行时自动清空原数据行(表头保留),无需手动删除重复行
内容的提问来源于stack exchange,提问作者SDES
相关产品推荐
相关产品推荐

