Azure Data Factory无法读取Blob存储中第三方.xlsx文件的解决问询
问题描述
我们正在搭建Azure Data Factory(ADF)管道,读取Blob存储中包含约30个工作表的第三方.xlsx文件,并将数据导入Snowflake表。目前已成功连接Blob存储,但读取文件时返回如下错误:
Only '.xls' and '.xlsx' format is supported in reading excel file while error is ' at System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles) at NPOI.SS.Util.SimpleDateFormat.ParseObject(String source, Int32 pos) at NPOI.OpenXml4Net.OPC.Internal.PackagePropertiesPart.SetDateValue(String s) at NPOI.OpenXml4Net.OPC.Internal.PackagePropertiesPart.SetCreatedProperty(String created) at NPOI.OpenXml4Net.OPC.Internal.Unmarshallers.PackagePropertiesUnmarshaller.Unmarshall(UnmarshallContext context, Stream in1) at NPOI.OpenXml4Net.OPC.OPCPackage.GetParts() at NPOI.OpenXml4Net.OPC.OPCPackage.Open(Stream in1) at NPOI.Util.PackageHelper.Open(Stream is1) at NPOI.XSSF.UserModel.XSSFWorkbook..ctor(Stream is1) at Microsoft.DataTransfer.ClientLibrary.ExcelUtility.GetExcelWorkbook(String fileExtension, TransferStream stream)'. String was not recognized as a valid DateTime.
我们未指定任何日期类型,但ADF无法正常读取文件以识别工作表名称等信息,即使指定工作表名或编号仍失败。本地打开文件无异常,推测是某工作表中DDMMMYYYY:HH:MM:SS格式的字符串被ADF误判为日期导致解析失败。因文件来自第三方无法修改,寻求解决方法。
注:已确认ADF中Blob存储连接正常,可访问目标文件,文件名格式为AAA_AAA_Changes_YYYY-MM-DD_YYYY-MM-DD_Relational.xlsx
可行解决方法
- Azure Function预处理文件:编写C#或Python的Azure Function,读取Blob中的xlsx文件,修复文件属性里的创建日期格式(错误栈显示是PackageProperties的Created属性解析失败,并非工作表数据),或用EPPlus等库重新保存文件修正属性问题,再将处理后的文件存入Blob供ADF读取。
- 切换ADF文件读取逻辑:放弃ADF原生Excel连接器,改用Blob存储连接器+复制活动的二进制格式将文件下载到集成运行时本地,再通过自定义活动调用Python脚本(用pandas等库自定义日期解析规则)读取文件,处理后写入Snowflake。
- 调整集成运行时区域设置:将自托管集成运行时的系统区域设置改为匹配文件日期格式的区域(如英语(英国)),可解决NPOI库的日期解析兼容性问题。
- Snowflake外部表直接读取:配置Snowflake与Azure Blob的集成,创建外部表直接读取xlsx文件,利用Snowflake的日期解析能力处理格式问题,再通过ADF同步外部表数据到目标表。
内容的提问来源于stack exchange,提问作者MikeLanglois
相关产品推荐
相关产品推荐

