如何使用Azure Data Factory合并多个Excel文件为单个文件
问题解答
一、Sink Dataset无Excel格式选项的原因
Azure Data Factory的Copy Activity在Sink端不支持直接将数据写入Excel文件,核心原因有两点:
- Excel是带复杂结构的二进制格式,包含工作表、样式、公式等元数据,不像CSV/Parquet这类扁平的文本/列存格式,ADF的Copy Activity底层设计更适配无复杂结构的批量数据写入,没针对Excel的写入逻辑做适配。
- 官方当前的数据集支持列表里,Excel仅作为**Source(数据源)**被支持,Sink端并未开放该选项,这是产品功能的限制。
二、可行的解决办法
方法1:先合并为中间格式,再转成Excel
- 操作步骤:
- 用Copy Activity把Blob Storage里的多个Excel文件合并,写入到中间存储——比如Blob的CSV/Parquet格式,或者Azure SQL Database的临时表。
- 用ADF的Data Flow或者Azure Function把中间格式转成单个Excel:
- Data Flow方案:创建映射数据流,读取中间的CSV/Parquet数据,Sink选择“Excel”格式(注意:得预先创建好目标Excel文件,还要指定对应的工作表)。
- Azure Function方案:写代码(比如Python用OpenPyXL,C#用EPPlus)读取中间数据,生成单个Excel文件后上传回Blob Storage。
方法2:用Azure Logic Apps实现合并
Logic Apps有专门的Excel操作连接器,能直接做多文件合并:
- 触发Logic Apps遍历Blob Storage里的所有目标Excel文件。
- 逐个读取每个文件指定工作表的数据。
- 把读取到的数据逐行追加到预先创建好的目标Excel文件的指定工作表中。
方法3:借助Azure Databricks处理
- 操作步骤:
- 在Databricks里挂载Blob Storage,读取所有要合并的Excel文件。
- 用Spark的Excel读取库(比如
com.crealytics:spark-excel_2.12:0.13.5)加载多文件数据,合并成单个DataFrame。 - 把合并后的DataFrame写入单个Excel文件,再存回Blob Storage。
内容的提问来源于stack exchange,提问作者Serdia
相关产品推荐
相关产品推荐

