Azure Data Factory如何动态遍历Excel文件所有工作表并写入单张表
ADF动态遍历Excel所有工作表实现方案
核心逻辑是调用ADF内置的Excel元数据读取能力,无需预定义工作表列表,也不需要额外维护元数据表,新增工作表会自动识别同步。
实现步骤
创建Excel源数据集
- 配置对应存储(Azure Blob/ADLS Gen2/本地文件系统等)的Excel链接服务,匹配你的Excel文件存储位置
- 数据集的工作表名称配置项留空,不要指定固定工作表名
新增Get Metadata活动
- 活动的数据集选择上一步创建的Excel数据集
- 字段列表添加系统内置的
工作表列表(sheetNames)字段,该活动运行时会自动读取当前Excel文件包含的所有工作表名,返回数组格式的结果
配置Foreach循环活动
- Foreach的输入项关联Get Metadata活动的输出,表达式填写:
@activity('Get Metadata1').output.sheetNames,不需要硬编码工作表数组 - 根据性能需求选择串行/并行执行,并行执行最多支持同时处理50个工作表
- Foreach的输入项关联Get Metadata活动的输出,表达式填写:
前置添加目标表截断操作
在Get Metadata活动之前,新增1个复制活动或者存储过程活动,执行目标表清空语句:
TRUNCATE TABLE 你的目标表名称,保证每次运行是全量截断加载Foreach循环内配置复制活动
- 源端:复用之前的Excel数据集,工作表选择动态模式,表达式填写:
@item().name,item为Get Metadata返回的单工作表对象 - 映射配置:确保所有待同步工作表的列结构和目标表匹配,若需要追加来源标识可在源端附加列添加字段,值填写
@item().name记录数据所属工作表 - 目标端:选择目标表数据集,写入模式选择追加,循环执行时会把所有工作表的数据依次写入目标表
- 源端:复用之前的Excel数据集,工作表选择动态模式,表达式填写:
特殊场景适配
- 若需要过滤隐藏工作表/特定命名规则的工作表,可在Get Metadata和Foreach之间添加Filter活动,自定义过滤规则即可,示例过滤表达式:
@not(startswith(item().name,'隐藏')) - 若工作表结构存在微小差异,可在复制活动的映射配置中开启允许 schema 漂移选项,适配列不完全一致的场景
内容的提问来源于stack exchange,提问作者amikm
相关产品推荐
相关产品推荐

