yangyidiy521 2025-09-12 20:29 采纳率: 100%
浏览 4
已结题

Excel2019 从ODBC读取数据时出错22018

img


读取数据时提示上图错误,有那位小伙伴碰到过,请指点一下非常感谢

  • 写回答

5条回答 默认 最新

  • 檀越@新空间 2025-09-12 20:30
    关注

    晚上好🌙🌙🌙
    本答案参考通义千问

    在使用 Excel 2019 通过 ODBC 读取数据时,遇到错误代码 22018,这个错误通常与 数据类型不匹配字段值不符合预期的数据类型 有关。以下是详细的分析和解决方案:


    ✅ 错误代码 22018 的含义

    22018 是 ODBC 错误代码,表示:

    “[Microsoft][ODBC 驱动程序] 数据类型不匹配”

    这通常发生在以下情况:

    • 从数据库中读取的某列数据类型与 Excel 中定义的列数据类型不一致;
    • 某个字段包含非数值内容(如空值、特殊字符),而 Excel 尝试将其解析为数字;
    • 使用了 TEXT 类型但实际数据中有非文本内容(如数字或日期)。

    🛠️ 解决方案步骤

    1. 检查源数据库的字段类型

    确保从数据库中读取的字段类型与 Excel 中期望的类型一致。

    • 如果数据库中的某一列是 VARCHARTEXT,但在 Excel 中被识别为 NUMBER,就会引发 22018 错误。
    • 在 ODBC 数据源配置中,可以尝试更改该字段的默认数据类型为 TEXTCHAR

    建议:在 ODBC 数据源设置中,调整字段类型为 TEXT,避免自动转换。


    2. 修改 Excel 的查询设置

    在 Excel 中使用 Power Query(获取数据)时,可以手动调整字段类型:

    步骤如下:

    1. 点击菜单栏的 数据获取数据从其他来源从 ODBC
    2. 选择正确的 DSN(数据源名称);
    3. 导入数据后,在 Power Query 编辑器中:
      • 选中出错的列;
      • 右键 → 转换数据类型 → 选择 文本其他合适类型
    4. 点击 关闭并上载,重新加载数据。

    重点: 确保所有列的数据类型与源数据库一致,避免自动类型推断导致错误。


    3. 处理空值或非法字符

    如果某些字段包含空值、特殊字符(如换行符、制表符)或无法解析的内容,Excel 会报错。

    修改方法:

    • 在 Power Query 中添加一个 自定义列,使用 M 语言过滤掉非法字符:
    = Text.Clean([YourColumnName])
    

    或者用 try...otherwise 处理异常:

    = try [YourColumnName] otherwise null
    

    注意: 对于非常规数据,建议在导入前先清洗数据。


    4. 使用 SQL 查询代替直接导入

    如果你是从数据库中直接导入数据,可以考虑使用 SQL 查询来指定字段类型,而不是依赖 ODBC 自动推断。

    示例 SQL 查询:

    SELECT 
        CAST(column_name AS VARCHAR) AS column_name
    FROM your_table
    

    说明: 使用 CAST 强制转换字段类型,可避免类型不匹配问题。


    5. 更新 ODBC 驱动程序

    有时旧版 ODBC 驱动程序可能对某些数据库类型支持不佳,导致类型不匹配错误。

    更新方法:

    建议: 使用与你的数据库系统匹配的驱动(如 MySQL、SQL Server、Oracle 等)。


    🧪 示例代码(Power Query M 语言)

    如果你使用 Power Query 调整字段类型,可以参考以下 M 代码片段:

    let
        Source = Odbc.Query("DSN=YourDSN;UID=youruser;PWD=yourpassword", "SELECT * FROM your_table"),
        ChangedType = Table.TransformColumns(Source,{{"column_name", type text, Int64.Type}})
    in
        ChangedType
    

    说明:"column_name" 替换为你需要调整的列名,type text 可以改为 Int64.TypeDate.Type 等。


    ✅ 总结

    | 问题原因 | 解决方案 | |----------|-----------| | 字段类型不匹配 | 在 Power Query 中手动设置字段类型为 TextInteger | | 数据中存在非法字符 | 使用 Text.Clean() 清洗数据 | | ODBC 自动推断错误 | 使用 SQL 查询强制类型转换 | | 驱动程序过旧 | 更新到最新版本的 ODBC 驱动 |


    如有更多错误信息(如完整的错误提示、截图、使用的数据库类型等),可以提供更精准的诊断。

    如需我帮你检查具体的查询语句或 ODBC 设置,请贴出相关代码或截图。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 9月20日
  • 已采纳回答 9月12日
  • 创建了问题 9月12日