C#使用OleDbDataAdapter读取Excel文件时出错

C#使用OleDbDataAdapter读取Excel文件时出错,c#,excel,excel-2007,xlsx,import-from-excel,C#,Excel,Excel 2007,Xlsx,Import From Excel,我正在尝试使用OleDbDataAdapter读取“.xlsx”文件。在回答之前,请一直读到文章的结尾。以下是我正在使用的代码: private DataTable ExtractDataFromFile(string fileName) { DataTable sheetData = new DataTable(); using (OleDbConnection conn = this.returnConnection(fileName))

我正在尝试使用OleDbDataAdapter读取“.xlsx”文件。在回答之前,请一直读到文章的结尾。以下是我正在使用的代码:

    private DataTable ExtractDataFromFile(string fileName)
    {
        DataTable sheetData = new DataTable();
        using (OleDbConnection conn = this.returnConnection(fileName))
        {
            try{
                conn.Open();
                OleDbDataAdapter sheetAdapter = new OleDbDataAdapter("select * from [Sheet1$]", conn);
                sheetAdapter.Fill(sheetData);
            }
            catch(Exception e)
            {
                Console.WriteLine(e);
                Console.ReadLine();
            }
        }
        return sheetData;
    }

    private OleDbConnection returnConnection(string fileName)
    {
        return new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties=Excel 12.0;");
    }
但我有一个奇怪的错误。我必须查询的Excel文件是客户提供给我的,当我试图打开它们时,会出现以下错误

External table is not in the expected format
这里有一个陷阱:
我注意到,如果我打开一个Excel文件,然后手动保存一次并关闭该文件,那么我就可以用我的程序查询该文件了

您确定已使用Microsoft office创建xlsx文件吗?此文件可以是开放的xml文档,但可能不是由MS Office创建的,因此MS oledbadapter无法读取。如果您打开并保存它,它可能会将其转换为MS版本的OpenXML,然后oledbadapter就可以读取它了


您可以查看DocumentFormat.OpenXml来读取xlsx文件。

请不要被扩展名愚弄。在文本编辑器中打开文件,如果您可以阅读内容,那么可能是CSV文件而不是XLST感谢您的回答。但是,使用Notepad++打开该文件会得到XML代码,而不是“.xlsx”文件的真实内容。