首页 > 解决方案 > Excel OpenXML、OleDB 和“外部表不是预期格式”错误

问题描述

我正在使用 OpenXML 生成 Excel 文件,该文件在安装了 Excel 2016 的桌面上打开时没有任何问题。该文件还通过使用 Open XML Productivity Tool 2.5 的验证。

问题是该文件被 SQL Server Integration Services (SSIS) 处理拒绝。错误是“外部表不是预期的格式”

据我所知,SSIS 正在使用 OLEDB 来处理文件。我尝试使用以下代码在本地读取文件,并且能够重现相同的错误。

代码如下:

    var fileName = "C:\\Temp\\myExcel.xlsx";
    var connectionString = String.Empty;

    if (Path.GetExtension(fileName) == ".xlsx")
    {
        connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0;HDR=YES;\"", fileName);
    }
    else //.xls
    {
        connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1;\"", fileName);
    }

    using (OleDbConnection conn = new OleDbConnection(connectionString))
    {
        conn.Open();
        var adapter = new OleDbDataAdapter("select * from [test$]", conn);
        var excelDataSet = new DataSet();
        adapter.Fill(excelDataSet, "anyNameHere");

        var data = excelDataSet.Tables["anyNameHere"];
        foreach (DataRow row in data.Rows)
        {
            Console.Out.WriteLine(row[NAME].ToString());
        }
    }

我只能在网上找到这个错误是由于错误的连接字符串(Microsoft.Jet.OLEDB.4.0 和 Excel 8.0 而不是 Microsoft.ACE.OLEDB.12.0 和 Excel 12.0)造成的,但我已经有了这个。

这绝对是文件本身的问题。如果我在 Excel 中打开文件并使用另存为,问题就会消失。

我试图解压缩原始文件和重新保存的文件并比较内容,但差异很大,保存 excel 时会添加许多样式、主题和 xmls 引用。我真的不想走那条路。

你知道在阅读 Excel 时哪些部分对 OleDB 提供者很重要吗?

标签: exceloledbopenxml

解决方案


推荐阅读