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

Posted

技术标签:

【中文标题】C# 使用 OleDbDataAdapter 读取 Excel 文件时出错【英文标题】:C# Error reading Excel file with OleDbDataAdapter 【发布时间】:2016-04-08 16:07:20 【问题描述】:

我正在尝试使用 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 文件并手动保存一次并关闭该文件,那么我可以使用我的程序查询该文件!

【问题讨论】:

尽量不要被扩展所迷惑。如果您可以阅读内容,则在文本编辑器中打开文件,那么可能是 CSV 文件而不是 XLS 感谢您的回答。但是,使用 Notepad++ 打开文件会给我 XML 代码,而不是“.xlsx”文件的真实内容。 【参考方案1】:

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

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

【讨论】:

以上是关于C# 使用 OleDbDataAdapter 读取 Excel 文件时出错的主要内容,如果未能解决你的问题,请参考以下文章

更改数据库后的 OleDbDataAdapter 错误

OleDbDataAdapter 忽略 Excel 单元格中的数据

尝试读取或写入受保护的内存。这通常指示其他内存已损坏

使用 Jet 的 OleDbDataAdapter 数据类型不匹配

如何将准备好的语句与 OleDbDataAdapter 一起使用?

使用 vb.net、oledbdataadapter 更新数据库时出现问题