Excel Power Query如何保留#VALUE!错误而非转为空值?
解决Power Query导入时保留#VALUE!错误的方法
我之前处理过一模一样的问题,默认情况下Power Query的通用错误加载到Excel表格后会变成空单元格,要保留源工作簿的#VALUE!错误,可以试试这几个方案:
方案一:在Power Query中映射错误为Excel的#VALUE!
这是最直接的方法,让Power Query把查询里的通用错误转换成Excel能识别的#VALUE!错误:
- 打开查询编辑器,选中包含错误的目标列
- 点击添加列选项卡中的自定义列,在公式编辑器里输入:
把try [你的列名] otherwise Excel.Error(Excel.ErrorValue.Value)[你的列名]替换成实际的列名称 - 点击确定后,新的自定义列里就会把原列的错误显示为#VALUE!对应的错误记录
- 右键删除原来的列,再把自定义列重命名为原列的名字
- 关闭并上载查询,此时目标工作簿的表格里就会正确显示#VALUE!错误了
方案二:精准匹配错误类型(适用于复杂场景)
如果源工作簿存在多种错误类型,你可以更精准地只把对应#VALUE!的错误保留下来:
- 在查询编辑器中选中目标列,点击转换选项卡的数据类型,选择任意
- 添加自定义列,输入以下公式:
这个方法会先判断错误类型,只把对应#VALUE!的错误映射成Excel原生错误,其他错误保持原样if Value.IsError([你的列名]) then let errorReason = Error.Record([你的列名])[Reason] in if errorReason = "Expression.Error" then Excel.Error(Excel.ErrorValue.Value) else [你的列名] else [你的列名]
补充说明
之所以默认加载后是空单元格,是因为Power Query的通用错误对象和Excel的单元格错误不是直接映射的——Power Query里的Error加载到Excel时,默认会被忽略显示为空,所以必须手动把它转换成Excel原生的#VALUE!错误常量。
内容的提问来源于stack exchange,提问作者CarlW




