You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerQuery捕获认证错误:连接失败时清空Excel工作表

PowerQuery捕获ODBC连接DataBricks异常并强制清空工作表

问题场景

我在Excel工作簿中通过PowerQuery使用ODBC驱动连接外部DataBricks Photon数据仓库,查询逻辑为先清空工作表现有数据,再填充查询结果。但偶尔会因VPN问题导致连接失败,此时PowerQuery抛出错误:We couldn't authenticate with the credentials provided. Please try again。

需要实现的目标:无论连接是否成功,都必须清空工作表,避免用户使用过时数据。之前尝试用try语句捕获错误返回空表,但无法捕获连接阶段的异常,理想逻辑如下:

let
    bar = Excel.CurrentWorkbook(){[Name="foo"]}[Content],
    rows_removed = Table.FirstN(bar,0),
    calculated_columns_removed = Table.RemoveColumns(rows_removed,{"FR", "SA", "SU", "MO", "TU", "WE", "TH"}),
    query_result = Odbc.Query("dsn=Simba Spark", query_str),
    test_for_error = try query_result,
    recover = if test_for_error[HasError] then calculated_columns_removed else query_result

in
   recover

可行解决方案

问题核心:连接阶段的错误属于执行早期异常,如果先执行Odbc.Query再用try捕获,错误已经提前抛出,无法被后续逻辑处理。必须将Odbc.Query直接包裹在try块内,才能捕获连接/认证类错误。

修改后的完整M代码

let
    // 生成与原表结构匹配的空表(移除指定计算列)
    source_table = Excel.CurrentWorkbook(){[Name="foo"]}[Content],
    empty_table = Table.RemoveColumns(Table.FirstN(source_table, 0), {"FR", "SA", "SU", "MO", "TU", "WE", "TH"}),
    
    // 将ODBC查询操作直接包裹在try块中,捕获连接/认证错误
    query_attempt = try Odbc.Query("dsn=Simba Spark", query_str),
    
    // 根据结果判断返回空表还是正常查询数据
    final_output = if query_attempt[HasError] 
                   then empty_table 
                   else query_attempt[Value]
in
    final_output

关键说明

  1. 异常捕获时机:将Odbc.Query直接放入try块,确保连接阶段的错误被及时捕获,不会中断整个查询流程。
  2. 空表结构兼容:通过Table.FirstN(source_table, 0)保留原表的字段结构,再移除指定计算列,保证返回的空表与原表结构一致,避免刷新时出现结构不匹配错误。
  3. 精准错误过滤(可选):如果需要只处理特定的认证错误,可对错误信息进行匹配,其他类型错误仍抛出:
    final_output = if query_attempt[HasError] and Text.Contains(query_attempt[Error][Message], "We couldn't authenticate")
                   then empty_table
                   else if query_attempt[HasError] then error query_attempt[Error][Message]
                   else query_attempt[Value]
    

内容的提问来源于stack exchange,提问作者corne12345

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 19:28:20