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 忽略 Excel 单元格中的数据
使用 Jet 的 OleDbDataAdapter 数据类型不匹配