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

时间:2016-04-08 16:07:20

标签: 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))
        {
            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文件而手动保存一次并关闭文件,那么我可以用我的程序查询该文件!

1 个答案:

答案 0 :(得分:0)

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

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