Azure Data Factory中转换/直接使用数据湖XLSM/XLSB文件的方案咨询
在Azure Data Factory中处理XLSM/XLSB文件的可行方案
针对你在ADLS Gen2中存储的XLSM/XLSB文件,无需外部转换,可通过以下几种ADF原生或集成方案直接处理:
方案一:使用Azure Databricks活动(推荐大文件场景)
Databricks支持通过第三方库直接读取XLSM/XLSB格式,处理效率高,适合大体积文件:
- 配置ADF管道添加Databricks Notebook活动,关联你的Databricks集群
- 在Notebook中使用
spark-excel库读取ADLS Gen2中的文件,示例代码:
# 读取XLSM/XLSB文件 df = spark.read.format("com.crealytics.spark.excel") \ .option("header", "true") \ .option("inferSchema", "true") \ .option("dataAddress", "'Sheet1'!A1") \ .option("fileExtension", ".xlsm") # 处理XLSB时替换为.xlsb .load("abfss://<容器名>@<存储账户名>.dfs.core.windows.net/<源文件夹路径>") # 写入目标ADLS文件夹(可选择保存为XLSX/Parquet/CSV等格式) df.write.format("com.crealytics.spark.excel") \ .option("header", "true") \ .save("abfss://<容器名>@<存储账户名>.dfs.core.windows.net/<目标文件夹路径>")
- 集群可根据文件大小调整节点规格,横向扩展提升处理速度
方案二:使用自定义活动调用Azure Function/Azure Batch
通过自定义活动触发代码逻辑完成格式转换:
- 若选择Azure Function:编写Python/C#函数,使用
pandas(Python)或EPPlus(C#)读取XLSM/XLSB,转换为XLSX后写入目标ADLS路径,ADF中配置自定义活动调用该函数 - 若选择Azure Batch:创建Batch池,运行包含转换逻辑的脚本,ADF自定义活动提交Batch作业处理文件
示例Python转换代码片段:
import pandas as pd from azure.storage.filedatalake import DataLakeServiceClient # 初始化ADLS客户端 service_client = DataLakeServiceClient(account_url="https://<存储账户名>.dfs.core.windows.net", credential="<凭据>") # 读取源文件 file_client = service_client.get_file_client("<容器名>", "<源文件路径>") with open("temp.xlsm", "wb") as f: f.write(file_client.download_file().readall()) # xlsm用openpyxl引擎,xlsb替换为pyxlsb df = pd.read_excel("temp.xlsm", engine="openpyxl") # 写入目标文件 df.to_excel("temp_converted.xlsx", index=False) with open("temp_converted.xlsx", "rb") as f: target_file_client = service_client.get_file_client("<容器名>", "<目标文件路径>") target_file_client.upload_file(f)
方案三:使用自托管集成运行时+ODBC驱动直接读取(不转换格式)
若需直接读取文件内容而非转换格式,可配置自托管集成运行时:
- 在自托管运行时所在机器安装Microsoft Excel ODBC驱动
- 在ADF中创建ODBC数据源,指向ADLS Gen2中的XLSM/XLSB文件(需通过映射网络驱动器或存储访问路径关联)
- 使用Copy活动或Lookup活动直接读取文件数据,写入目标存储或数据服务
内容的提问来源于stack exchange,提问作者pandasandnumpy
相关产品推荐
相关产品推荐

