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

C#将ODS文件转换为DataSet时报外部表格式错误如何解决

ODS转DataSet报错「外部表不是预期的格式」解决方法

问题根因

你当前使用的Microsoft.Jet.OLEDB.4.0/Microsoft.ACE.OLEDB.12.0连接串配置错误,配置的Extended Properties为Excel 8.0/Excel 12.0,是专门用于读取xls/xlsx格式Excel文件的参数,无法识别ODS(OpenDocument电子表格)格式,因此触发格式不匹配报错。且Jet 4.0驱动本身完全不支持ODS格式读取,不存在可用的Jet连接串适配ODS。

可行解决方案

  • 方案1:修正ACE OLEDB连接串适配ODS格式
    该方案需要运行环境安装2010及以上版本的Microsoft Access Database Engine,64位环境正确连接串如下:

    connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + location + @";Extended Properties=""ODS 12.0;HDR=YES;IMEX=1"";";
    

    参数说明:

    • ODS 12.0:声明数据源为ODS格式,是解决当前报错的核心配置
    • HDR=YES:识别第一行为表头
    • IMEX=1:强制混合数据按文本读取,避免列类型识别异常
      注意不要硬编码工作表名(比如你代码里写的[sheet1$]),读取前先查询schema获取实际工作表名,避免表名不匹配报错:
    connection.Open();
    DataTable sheetSchema = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
    string firstSheetName = sheetSchema.Rows[0]["TABLE_NAME"].ToString();
    selectCommand.CommandText = $"SELECT * FROM [{firstSheetName}]";
    

    另外要保证程序编译目标平台(x86/x64)和环境安装的ACE驱动版本一致,否则会触发驱动未注册的报错。

  • 方案2:使用专用表格解析库(生产环境推荐)
    OLEDB方案依赖系统安装的驱动,部署兼容性差,推荐直接通过Nuget安装ExcelDataReader和ExcelDataReader.DataSet两个包,无需依赖任何Office/Access系统组件,原生支持ODS格式读取,32/64位环境通用,示例代码:

    using (FileStream fs = File.OpenRead(location))
    {
        // 初始化ODS读取器
        using (var reader = ExcelReaderFactory.CreateOpenDocumentReader(fs))
        {
            // 直接读取为DataSet,第一行作为列名
            DataSet ds = reader.AsDataSet(new ExcelDataSetConfiguration()
            {
                ConfigureDataTable = _ => new ExcelDataTableConfiguration()
                {
                    UseHeaderRow = true
                }
            });
            // 后续直接使用ds即可对接你原有的存储过程导入逻辑
            DataTable dt = ds.Tables[0].Clone();
        }
    }
    

注意:不要尝试把ODS文件后缀改成xls/xlsx再用Excel连接串读取,会直接损坏文件结构,依然会报格式错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 00:48:31