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

如何使用Office Script和Power Automate按客户经理拆分Excel文件

基于Office Script + Power Automate 按客户经理拆分销售Excel方案

整体逻辑:先通过Office Script完成门店与客户经理的匹配、销售数据分组,再用Power Automate循环生成每个客户经理的专属Excel文件,全程不需要本地打开文件,可配置为自动运行。

1. 预部署Office Script

打开任意存储在企业OneDrive/SharePoint的Excel文件,切换到「自动」选项卡,选择「新建脚本」,依次创建以下两个脚本并保存到组织脚本库:

脚本1:数据匹配分组(命名为分组销售数据)

功能:接收两份源数据,自动匹配门店对应的客户经理,输出按客户经理分组的销售数据集,自动保留原表表头。

function main(workbook: ExcelScript.Workbook, salesData: (string | number)[][], managerStoreMap: string[][]) {
    // 构建门店到客户经理的映射字典,自动跳过表头、处理首尾空格
    const storeMatch = new Map<string, string>();
    for (let i = 1; i < managerStoreMap.length; i++) {
        const manager = managerStoreMap[i][0]?.trim();
        const store = managerStoreMap[i][1]?.trim();
        if (manager && store) storeMatch.set(store, manager);
    }

    // 按客户经理分组销售数据
    const tableHeader = salesData[0];
    const groupedData = new Map<string, (string | number)[][]>();
    for (let i = 1; i < salesData.length; i++) {
        const currentStore = salesData[i][0]?.toString().trim();
        const belongManager = storeMatch.get(currentStore);
        if (!belongManager) continue; // 无匹配客户经理的行默认跳过,可按需修改逻辑
        if (!groupedData.has(belongManager)) groupedData.set(belongManager, [tableHeader]);
        groupedData.get(belongManager).push(salesData[i]);
    }

    // 返回Power Automate可直接解析的结构化结果
    return Array.from(groupedData.entries()).map(([managerName, rows]) => ({
        managerName,
        salesRows: rows
    }));
}

脚本2:单文件数据写入(命名为写入专属销售数据)

功能:在空白Excel中写入对应客户经理的销售数据,自动完成基础格式调整。

function main(workbook: ExcelScript.Workbook, managerName: string, salesRows: (string | number)[][]) {
    const sheet = workbook.getActiveWorksheet();
    sheet.setName(`${managerName}销售数据`);
    // 从A1开始写入全量数据
    const dataRange = sheet.getRange("A1").getResizedRange(salesRows.length - 1, salesRows[0].length - 1);
    dataRange.setValues(salesRows);
    // 基础格式:表头加粗、自动适配列宽
    dataRange.getFormat().autofitColumns();
    sheet.getRange("A1:Z1").getFormat().getFont().setBold(true);
}

2. Power Automate流搭建步骤

  • 新建云端流,触发方式按需选择,手动触发、定时触发、新文件上传触发都支持。
  • 添加2个「Excel Online (Business) - 列出表中存在的行」动作,分别定位到两个源文件:
    • 第一个动作选择销售数据主文件(文件1),选中存储销售数据的工作表和对应表,获取全量销售数据。
    • 第二个动作选择门店-客户经理映射文件(文件2),选中对应工作表和表,获取全量映射关系。
  • 添加「Excel Online (Business) - 运行脚本」动作,选择刚才保存的分组销售数据脚本,参数salesData传入销售主文件的行值,managerStoreMap传入映射文件的行值。该步骤运行后会直接输出按客户经理分组完成的结构化数据。
  • 添加「应用到每一个」循环控件,循环输入源选择上一步脚本输出的分组结果数组,在循环内完成以下操作:
    • 先创建新文件:可以提前准备一个仅含空白工作表的xlsx模板存在指定文件夹,用「复制文件」动作复制模板生成新文件,新文件命名为@{items('应用到每一个')?['managerName']}_专属销售数据.xlsx,存储位置选拆分后文件的目标文件夹。
    • 新文件创建完成后,再加一个「运行脚本」动作,定位到刚生成的新xlsx文件,选择写入专属销售数据脚本,参数managerName传入当前循环项的经理名称,salesRows传入当前循环项的销售行数据。
  • (可选)循环结束后添加邮件发送/Teams通知动作,将对应文件作为附件推送给对应客户经理,或者通知管理员拆分完成。

注意事项

  • 两个源文件内的门店名称尽量保持命名统一,脚本已自动处理字段首尾空格,可覆盖大部分格式不一致导致的匹配失败问题。
  • 单份销售主文件数据量超过10万行时,建议在分组脚本中添加分批处理逻辑,避免Power Automate运行超时。
  • 所有涉及的Excel文件必须存储在企业版OneDrive或SharePoint文档库,个人版OneDrive不支持Office Script跨文件调用。
  • 如果不需要自动调整格式,可以删掉写入脚本里的格式设置代码,能大幅提升大文件的写入速度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:15:52