Azure Data Factory使用Copy Activity复制多标签Excel到ADLS报错如何解决
报错根因
你遇到的Only formula cells have cached results报错,本质是Azure Data Factory默认的Excel连接器读取逻辑为优先读取单元格的预计算缓存值,不会主动对单元格内的公式执行计算。当待读取的Excel工作表中仅公式类单元格有预存缓存值、其余数值单元格无缓存值时,就会触发该错误。
这类问题多出现于第三方工具/自动化脚本生成的Excel文件,生成时未执行公式计算步骤,或文件保存时勾选了「不保存公式计算值」的选项。
定位步骤
- 从ADLS下载对应报错的Excel文件,本地用Excel桌面端打开,确认是否弹出「此文件中的部分公式尚未计算」的提示
- 选中待复制工作表内的任意非公式数值单元格,查看编辑栏是否为空、仅单元格前端显示数值,或编辑栏存在公式但单元格显示空白
- 核对数据集配置的工作表名称是否和实际文件内的工作表完全匹配,包括大小写、前后空格,排除工作表名配置错误导致的读取范围异常
解决方案
方案1:源数据集开启公式计算(优先推荐)
在ADF的Excel源数据集配置页,找到「格式设置」分类下的计算公式选项,勾选开启。开启后ADF读取Excel时会主动计算所有单元格内的公式,无需依赖预存的缓存值即可正常读取数据。
注意:如果Excel包含复杂数组公式、跨表引用公式,开启该选项会增加读取耗时,单文件建议大小不超过100MB。如果是多工作表批量复制场景,开启该选项后会对所有配置的工作表生效,无需单独调整每个工作表的配置。
方案2:预处理Excel生成缓存值
如果开启公式计算后读取性能无法满足要求,可以先对源Excel文件做预处理再触发ADF复制任务:
- 手动生成的Excel:打开文件后按F9强制全表计算,重新保存后上传到ADLS即可
- 脚本/工具自动生成的Excel:调整生成逻辑,增加公式计算后保存的步骤。比如用Python的openpyxl生成Excel时,增加
data_only=True参数,或用win32com接口强制计算后再保存文件
方案3:缩小数据集读取范围
如果确认不需要读取工作表内公式生成的数据,可以在源数据集配置中指定固定的单元格读取范围,仅选中有缓存值的区域,避开未缓存的单元格范围即可。
内容的提问来源于stack exchange,提问作者arvind sharma
相关产品推荐
相关产品推荐

