'外部表格格式不符合预期'异常问题

3
我正在做的是获取所有表名并将它们插入到列表中。这是我的代码:

可能是重复问题:
Excel“外部表格不符合预期格式”

我的代码如下:

public List<string> GetEditExcelSheets(string fileName, out OleDbException Error)
{
    List<string> Result = new List<string>();
    Error = null;
    if (!string.IsNullOrEmpty(fileName) && File.Exists(fileName))
    {
        string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties=\"Excel 12.0 XML;HDR=YES;IMEX=1\"";

        if (!string.IsNullOrEmpty(connectionString))
        {
            using (OleDbConnection connection = new OleDbConnection(connectionString))
            {
                try
                {
                    connection.Open();
                    DataTable tables = connection.GetSchema("Tables");
                    foreach (DataRow row in tables.Rows)
                    {
                        string TableName = Convert.ToString(row["TABLE_NAME"]);
                        Result.Add(TableName);
                    }
                }

                catch (OleDbException ex)
                {
                    Error = ex;
                }
                finally
                {
                    if (connection.State == System.Data.ConnectionState.Open)
                    {
                        connection.Close();
                    }
                }
            }
        }
    }
    return Result;
}

我遇到了这个错误:

"'外部表格的格式与预期不符'"

当代码执行到以下代码行时出现了该错误:

connection.Open();

我在谷歌上搜索相关解决方案后,已经尝试过多次编辑连接字符串。但是没有其他连接字符串能够帮助我,而这个连接字符串应该是可以工作的。我似乎无法弄清楚自己做错了什么。


你是否提供了完整的文件名? - prthrokz
@James(和其他人):你们看过提出的重复问题吗?至少已接受的答案并没有帮助,因为他已经使用了那个连接字符串。 - Tim Schmelter
我刚刚检查了它所使用的文件,确认其中包含一个工作表,并且正在使用正确的Excel文件。并且这个文件没有副本。下面是完整的连接字符串:Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\users\lmy\documents\visual studio 2012\Projects\CustomerImportV2\CustomerImportV2\Upload\20130108111646excel.xlsx;Extended Properties="Excel 12.0 XML;HDR=YES;IMEX=1" - Lahib
文件未打开。但我生成了两个文件,一个是服务器端日志,另一个是客户端下载。不知道它是否有什么意义。 - Lahib
@TimSchmelter 这是 xlsx 文件。 - Lahib
显示剩余3条评论
1个回答

1
我找到了解决方案。由于我使用的是Open XML SDK,因此xlsx文件保存为xlsx扩展名,但该文件不是Excel文件。它是一个使用xlsx扩展名保存的Open XML文件,因此Excel可以打开它。这意味着我无法使用SQL查询来读取文件中的数据。

嗨,这是否意味着使用OpenXML创建的Excel文件都无法被OleDB读取? - Sebastian Widz
@SebastianWidz 在我写这段代码的时候,我还不能这样做。 - Lahib
我问这个问题是因为我也遇到了同样的问题。我想知道是否有可能解决,我知道EPPlus能够做到,但他们使用纯XML。使用纯OpenXML会出现上述错误,我不确定OleDb不喜欢xls的哪一部分。 - Sebastian Widz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接